条件测试:
$? 返回码
判断命令或者脚本是否执行成功
为0 true 为真就是成功
非0 fales 失败或者异常
test命令
可以进行条件测试,然后根据返回值来判断条件是否成立
-e :测试文件或者目录是否存在
-d :只能测试目录是否存在
-f :只能测试文件是否存在
-r :测试当前用户是否对文件/目录有读权限
-w :测试当前用户是否对文件/目录有写权限
-x :测试当前用户是否对文件/目录有执行权限
整数比较符
(以下操作符只能用于整数比较)
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
比较符变种写法:
== 等于,该写法既可以比较整数,也可以比较字符串
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
条件测试表达式
第一种:[ ]
第二种(建议使用):
[[ ]] 可以使用更高级的模式,可以使用正则表达式,而且,在双中括号当中,使用字符串的时候可以不加引号
第三种:
(())运算符
逻辑与逻辑或
与 && 条件都满足才成立 -a
或 || 有一个条件满足就成立 -o
if语句
格式:
if [ 条件测试语句 ]
then +命令序列。 只有条件测试语句成立,才会执行then的命令
elif [ 条件测试语句 ] ,用于多分支结构,
else +命令序列上面条件都不满足时,执行该命令 ,双分支结构
fi 结束语句
单分支结构
条件满足执行then
双分支结构
条件满足执行then
条件不满足执行else
练习1:
练习2:
多分支结构
如果if条件不满足,则看下一个elif条件,还不满足,再看下一个elif条件...
都不满足最后执行else命令
练习:
嵌套式if语句
嵌套式if语句中第一层if条件满足才会执行第二层if,每一层都有对应的fi结束语句
例:在上面多分支练习中加一条整数判断
&> /dev/null :将输出结果全部重定向到/dev/null
,/dev/null
有一个非常有用的特性:它会立即丢弃所有写入它的数据,也被称为“数据黑洞”。这样将ping
的结果重定向到/dev/null
,就不会在终端上显示
case语句
练习:
用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
习题:
1.检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
2.提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,
大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别。
男生进男生组,女生进女生组,如果输入错误请提示错误
3.提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。
根据上一题再判断输入的内容是奇数还是偶数
4.用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务,
要求如果命令选项不对,则提示输入不正确: {start|stop|status|restart}