首先声明,此系列shell系列博客分为四篇发布,分别是:

  基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html

  提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html

  高级篇:https://www.cnblogs.com/lsy131479/p/9914962.html

  面试篇:

6. 条件判断

1.基本语法

[ condition ](注意condition前后要有空格)

注意:条件非空即为true,[ fsdm ]返回true,[] 返回false。

2. 常用判断条件

(1)两个整数之间比较

= 字符串比较

-lt 小于(less than) -le 小于等于(less equal)

-eq 等于(equal) -gt 大于(greater than)

-ge 大于等于(greater equal) -ne 不等于(Not equal)

(2)按照文件权限进行判断

-r 有读的权限(read) -w 有写的权限(write)

-x 有执行的权限(execute)

(3)按照文件类型进行判断

-f 文件存在并且是一个常规的文件(file)

-e 文件存在(existence) -d 文件存在并是一个目录(directory)

3.案例实操

(1)23是否大于等于22

[fsdm@hadoop101 datas]$ [  -ge  ]
[fsdm@hadoop101 datas]$ echo $?
0 (true)

(2)helloworld.sh是否具有写权限

[fsdm@hadoop101 datas]$ [ -w helloworld.sh ]
[fsdm@hadoop101 datas]$ echo $?
0 (true)

(3)/home/fsdm/cls.txt目录中的文件是否存在

[fsdm@hadoop101 datas]$ [ -e /home/fsdm/cls.txt ]
[fsdm@hadoop101 datas]$ echo $?
1 (false)

(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)

[fsdm@hadoop101 ~]$ [ condition ] && echo OK || echo notok
OK
[fsdm@hadoop101 datas]$ [ condition ] && [ ] || echo notok
notok

7. 流程控制(重点)

7.1 if 判断

1.基本语法

if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi

注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格

(2)if后要有空格

2.案例实操

(1)输入一个数字,如果是1,则输出fsdm zhen shuai,如果是2,则输出heihei zhen mei,如果是其它,什么也不输出。

[fsdm@hadoop101 datas]$ touch if.sh
[fsdm@hadoop101 datas]$ vim if.sh #!/bin/bash if [ $ -eq "" ]
then
echo "fsdm zhen shuai"
elif [ $ -eq "" ]
then
echo "heihei zhen mei"
fi [fsdm@hadoop101 datas]$ chmod if.sh
[fsdm@hadoop101 datas]$ ./if.sh
fsdm zhen shuai

7.2 case 语句

1.基本语法

case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

注意事项:

1) case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

2) 双分号“;;”表示命令序列结束,相当于java中的break。

3) 最后的“*)”表示默认模式,相当于java中的default。

2.案例实操

(1)输入一个数字,如果是1,则输出fsdm,如果是2,则输出heihei,如果是其它,输出renyao。

[fsdm@hadoop101 datas]$ touch case.sh
[fsdm@hadoop101 datas]$ vim case.sh !/bin/bash case $ in
"")
echo "fsdm"
;; "")
echo "heihei"
;;
*)
echo "renyao"
;;
esac [fsdm@hadoop101 datas]$ chmod case.sh
[fsdm@hadoop101 datas]$ ./case.sh
fsdm

7.3 for 循环

1.基本语法1

for (( 初始值;循环控制条件;变量变化 ))
do
程序
done

2.案例实操

(1)从1加到100

[fsdm@hadoop101 datas]$ touch for1.sh
[fsdm@hadoop101 datas]$ vim for1.sh #!/bin/bash s=
for((i=;i<=;i++))
do
s=$[$s+$i]
done
echo $s [fsdm@hadoop101 datas]$ chmod for1.sh
[fsdm@hadoop101 datas]$ ./for1.sh
“”

3.基本语法2

for 变量 in 值1 值2 值3…
do
程序
done

4.案例实操

(1)打印所有输入参数

[fsdm@hadoop101 datas]$ touch for2.sh
[fsdm@hadoop101 datas]$ vim for2.sh #!/bin/bash
#打印数字 for i in $*
do
echo "fsdm love $i "
done [fsdm@hadoop101 datas]$ chmod for2.sh
[fsdm@hadoop101 datas]$ bash for2.sh heihei haha hehe
ban xx love heihei
ban xx love haha
ban xx love hehe

(2)比较$*和$@区别

(a)$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数。

[fsdm@hadoop101 datas]$ touch for.sh
[fsdm@hadoop101 datas]$ vim for.sh #!/bin/bash for i in $*
do
echo "fsdm love $i "
done for j in $@
do
echo "fsdm love $j"
done [fsdm@hadoop101 datas]$ bash for.sh heihei haha hehe
fsdm love heihei
fsdm love haha
fsdm love hehe
fsdm love heihei
fsdm love haha
fsdm love hehe

(b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数。

[fsdm@hadoop101 datas]$ vim for.sh

#!/bin/bash 

for i in "$*"
#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次
do
echo "fsdm love $i"
done for j in "$@"
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次
do
echo "fsdm love $j"
done [fsdm@hadoop101 datas]$ chmod for.sh
[fsdm@hadoop101 datas]$ bash for.sh heihei haha hehe
fsdm love heihei haha hehe
fsdm love heihei
fsdm love haha
fsdm love hehe

7.4 while 循环

1.基本语法

while [ 条件判断式 ]
do
程序
done

2.案例实操

(1)从1加到100

[fsdm@hadoop101 datas]$ touch while.sh
[fsdm@hadoop101 datas]$ vim while.sh #!/bin/bash
s=
i=
while [ $i -le ]
do
s=$[$s+$i]
i=$[$i+]
done echo $s [fsdm@hadoop101 datas]$ chmod while.sh
[fsdm@hadoop101 datas]$ ./while.sh

8. read读取控制台输入

1.基本语法

read(选项)(参数)

选项:

-p:指定读取值时的提示符;

-t:指定读取值时等待的时间(秒)。

参数

变量:指定读取值的变量名

2.案例实操

(1)提示7秒内,读取控制台输入的名称

[fsdm@hadoop101 datas]$ touch read.sh
[fsdm@hadoop101 datas]$ vim read.sh #!/bin/bash read -t -p "Enter your name in 7 seconds " NAME
echo $NAME [fsdm@hadoop101 datas]$ ./read.sh
Enter your name in seconds fsdm
fsdm

9. 函数

9.1 系统函数

1.basename基本语法

basename [string / pathname] [suffix]   (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

选项:

suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

2.案例实操

(1)截取该/home/fsdm/fsdm.txt路径的文件名称

[fsdm@hadoop101 datas]$ basename /home/fsdm/fsdm.txt
fsdm.txt
[fsdm@hadoop101 datas]$ basename /home/fsdm/fsdm.txt .txt
fsdm

3. dirname基本语法

dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

4.案例实操

(1)获取fsdm.txt文件的路径

[fsdm@hadoop101 ~]$ dirname /home/fsdm/fsdm.txt
/home/fsdm

9.2 自定义函数

1.基本语法

[ function ] funname[()]
{
Action;
[return int;]
}
funname

2.经验技巧

(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

3.案例实操

(1)计算两个输入参数的和

[fsdm@hadoop101 datas]$ touch fun.sh
[fsdm@hadoop101 datas]$ vim fun.sh #!/bin/bash
function sum()
{
s=
s=$[ $ + $ ]
echo "$s"
} read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2; [fsdm@hadoop101 datas]$ chmod fun.sh
[fsdm@hadoop101 datas]$ ./fun.sh
Please input the number1:
Please input the number2:

基础篇结束,如需深入请阅读后续篇章,如有疑问私信或评论指出

大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)的更多相关文章

  1. 大数据系列博客之 --- 深入简出 Shell 脚本语言(高级篇)

    首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...

  2. 大数据系列博客之 --- 深入简出 Shell 脚本语言(基础篇)

    首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...

  3. 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置

    前言 经过前三篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,当然,我相信安装的过程肯定遇到或多或少的问题,这些都需要自己解决,解决的过程就是学习的过程,本篇的来介绍几个Hadoop环 ...

  4. 窥探Swift系列博客说明及其Swift版本间更新

    Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...

  5. 大数据系列(5)——Hadoop集群MYSQL的安装

    前言 有一段时间没写文章了,最近事情挺多的,现在咱们回归正题,经过前面四篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,相关的两款软件VSFTP和SecureCRT也已经正常安装了. ...

  6. 大数据系列(3)——Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...

  7. 大数据系列(2)——Hadoop集群坏境CentOS安装

    前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...

  8. Django 系列博客(十四)

    Django 系列博客(十四) 前言 本篇博客介绍在 html 中使用 ajax 与后台进行数据交互. 什么是 ajax ajax(Asynchronous Javascript And XML)翻译 ...

  9. Django 系列博客(十三)

    Django 系列博客(十三) 前言 本篇博客介绍 Django 中的常用字段和参数. ORM 字段 AutoField int 自增列,必须填入参数 primary_key=True.当 model ...

随机推荐

  1. mysql 案例 ~查询导致的tmp临时文件问题

    一 简介:之前遇到一个tmp分区暴涨的问题,后来经过大神的指点,遂分析写下 二 分类: 1  select语句出现 using temporay tmp 下出现 #sql_631a_1.MYD #sq ...

  2. 基于theano的降噪自动编码器(Denoising Autoencoders--DA)

    1.自动编码器 自动编码器首先通过下面的映射,把输入 $x\in[0,1]^{d}$映射到一个隐层 $y\in[0,1]^{d^{'}}$(编码器): $y=s(Wx+b)$ 其中 $s$ 是非线性的 ...

  3. kmalloc vmalloc kzalloc malloc 和 get_free_page()【转】

    转自:http://blog.csdn.net/hbhhww/article/details/7236695 kmalloc vmalloc kzalloc get_free_page()是内核空间申 ...

  4. mysql中文乱码或提示error

    插入一条中文记录: 语句: insert into employee(id,name,job,salary) values(4,'小明','清洁员',1500); 提示: ERROR 1366 (HY ...

  5. java 基础(转自索宁)

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...

  6. db_recovery_file_dest_size

    select name,space_limit,space_used,number_of_files from v$recovery_file_dest; alter system set db_re ...

  7. Linux清除文件内容的几种方法

    # 清空或删除大文件内容的五种方法: # 法一:通过重定向到 Null 来清空文件内容 $ >test.sh # 法二:使用 ‘true' 命令重定向来清空文件 $ true > test ...

  8. jquery实现右键菜单

    <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/h ...

  9. js继承的几种实现方法

    一.用function实现: function Person(name) { this.name = name; } Person.prototype.getName = function() { r ...

  10. Windows下安装并启动mongodb

    一.Windows下mongodb的安装 MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https ...