一、条件测试
1、1 返回码 $?
$? :返回码,用来判断命令或者脚本是否执行成功。
0 :表示true ,成功;非0 则表示flase ,失败。
1、2 test命令
可以进行条件测试,然后根据返回值来判断条件是否成立
-e
:exist,测试目录或者目录是否存在
-d
:directory,测试目录是否存在
-f
:file,测试普通文件是否存在
-r
:read,测试当前用户是否对文件/目录有读权限
-w
:write,测试写权限
-x
:execution,测试执行权限
1、3 比较符
1.3.1 整数比较
-eq
:等于,equal
-ne
:不等于,not equal
-gt
:大于,greater than
-lt
:小于,less than
-ge
:大于等于,gt
或eq
-le
:小于等于,lt
或eq
1.3.2 类C语言的整数比较
==
:等于,既可以比较数字,也可以比较字符串
!=
:不等于
>
:大于
<
:小于
>=
:大于等于
<=
:小于等于
这种比较符一般用于比较变量或者字符串。
1.3.3 比较符格式
[ ]
:注意格式,所有参数和符号都要以空格隔开
[[ ]]
:可以使用更高级的模式,可以使用正则表达式。而且,在双中括号中使用字符串的时候可以不加引号,而不用担心引起歧义。
(( ))
:只能使用算数比较符
1.3.4 逻辑与和逻辑或
与:&&
,或者-a
,条件都满足才成立
或:||
,或者-o
,满足一个条件即成立
注意:-a
和 -o
只能在 [ ]
中使用,[[ ]]
中或者两个[ ]
之间只能用&&
||
二、if 语句
2.1 if
语句的基本组成
if
:后面是条件测试语句then
:后面跟命令序列,只有条件测试语句成立,才会执行then的命令模块elif
:后面也是条件测试语句,用于多分支结构else
:后面跟命令序列,所有的条件测试语句均不满足时,执行else
的命令模块fi
:结束语句
2.2 单分支结构
在 /opt 目录下创建test1.sh
2.2 双分支结构
在 /opt 目录下创建test2.sh
2.3 多分支结构
在 /opt 目录下创建test3
2.4 嵌套 if 结构
需求:检查用户家目录中的test.sh 文件是否存在,并且检查是否有执行权限
在 /opt 目录下创建test4.sh
三、case语句
case相当于 if 多分支结构,格式如下:
:要求:用case
语句解压根据后缀名为 .tar.gz
或 .tar.bz2
的压缩包到 /opt
目录,分别使用tar -zxvf
和tar -jxvf
用 case语句实现2.3 的列子,如下所示:
四、shell练习
需求1
通过位置变量传参的方式,给脚本内部传一个ip地址
用if判断主机是否存活,若存活提示用户ip is online,而且要保存到/opt/hosts.txt文件,若主机无连接,提示用户 ip is offline
使用ping -c 5 检测连通性,但不显示ping的过程
需求2
提示用户输入内容,使用if
语句判断输入的内容是否为整数。判断范围0-100。然后再判断输入的内容是奇数还是偶数。
提示:判断输入的内容是否为整数,可以用 if [ $num -eq $num ] &> /dev/null ,-eq
是整数比较符,如果变量不是整数,比如小数或者字符串会报错,并跳转到else
执行,把报错信息重定向到/dev/null
就不会在终端显示多余的信息。
对检验奇数偶数的解释: $(($num%2))
,对变量除以2取余数,余数为0则为偶数,余数为1则为奇数。
需求3
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,
大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误(整数判断,小数判断。)
test3.sh:只允许输入整数
如果要实现小数判断,可以用bc
实现,比如:result=$(echo "$num1 > $num2" | bc) 。把两个小数变量比较的结果保存到result
中,再用if
语句对result
进行判断
需求4
用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示输入不正确:{start|stop|status|restart}test4.sh
:用传参的方式