文件测试
要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。
test 操作符 表达式
| 操作符 | 作用 |
|---|---|
| -d | 测试文件是否为目录文件(Directory) |
| -f | 测试文件是否为普通文件(File) |
| -e | 测试目录或文件是否存在(Exist)。 |
| -a | 测试目录或文件是否存在(Exist) |
| -r | 测试当前用户是否有权限读取(Read) |
| -w | 测试当前用户是否有权限写入(Write) |
| -x | 测试当前用户是否有权限执行(eXcute) |
| -L | 测试是否为符号链接(软链接文件) |
| -ef | 判断两个文件是否为同一文件。可用于硬链接,主要判断两个文件是否指向同一个inode |
整数测试
test 整数变量1 操作符 整数变量2
[ 整数变量1 操作符 整数变量2 ]
| 操作符 | 含义 |
|---|---|
| -eq | 等于 |
| -ne | 不等于 |
| -gt | 大于 |
| -lt | 小于 |
| -le | 小于等于 |
| -ge | 大于等于 |
逻辑运算符
- -a或&& :逻辑与,“而且”的意思,全真才为真。
- -o或|| :逻辑或,“或者”的意思,一真即为真。
- ! :逻辑否。
二元运算符
三元运算符
ping命令:
- -c,发送包的个数。
- -i,发送的间隔时间。
- -w(小写),多少秒后停止ping操作。
- -W(大写),以毫秒为单位设置ping的超时时间 。
if语句
if双分支结构
格式:
if 判断条件
then 条件成立的分支代码
else 条件不成立的分支代码
fi
实际应用
判断输入的数字是否为整数
if多分支结构
格式:
if 判断条件1
then
条件1为真的分支代码
elif 判断条件2
then
条件2为真的分支代码
elif 判断条件3
then
条件3为真的分支代码
...
else
以上条件都为假的分支代码
fi
实际应用
实验要求:提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入决赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入决赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误。
case语句
格式:
实际应用
实验要求:用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中(#chkconfig: 2345 99 20),使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务;如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。