目录
一、条件测试
测试表达式是否成立,若成立返回0,否则返回其他数值。
格式:
1 test 条件表达式
2 [ 条件表达式 ]
1.文件测试
[ 操作符 文件或目录 ]
1.1常见的测试操作符:
-d | 测试是否为目录 |
-e | 测试目录或文件是否存在 |
-f | 测试是否为文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
1.2示例:
2.整数值比较
[ 整数1 操作符 整数2 ]
2.1常用测试操作符
操作符1 | 操作符2 | 作用 |
-eq | == | 等于(Equal) |
-ne | != | 不等于(Greater Than) |
-gt | > | 大于(Greater Than) |
-lt | < | 小于(Lesser Than) |
-le | <= | 小于等于(Lesser or Equal) |
-ge | >= | 大于等于(Greater or Equal) |
操作符1只能用于比较整数;操作符2可以用于比较字符串。
2.2示例
3.逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常用的测试操作符:
- -a 或 && :逻辑与,“而且”的意思,表示前后条件都需成立。
- -o 或 || :逻辑或,“或”的意思,表示前后条件只需成立一条。
- !:逻辑否
例:
[ $a -ne 1 ] && [ $a != 2 ]
[ $a -ne 1 -a $a != 2 ]
[ [ $a -ne 1 && $a != 2 ] ]
上面三种语法起到作用相同,&& 和 || 操作符使用时用双中括号。
二、if语句
1.单分支结构
1.1格式
if 条件测试操作
then 命令序列
fi
1.2单分支流程
2.双分支结构
2.1格式
if 条件测试操作
then
命令序列1
else
命令序列2
fi
2.2双分支流程
2.3实验
判断输入的值是否为整数。
vim zhengshu.sh
read -p "输入值:" num
if [ $num -eq $num ] &> /dev/null
then
echo "整数"
else
echo "非整数"
fi
sh zhengshu.sh
3.多分支结构
3.1格式
if 条件测试操作1
then
elif 条件操作测试2
then
命令序列1
else
命令序列2
else
命令序列3
fi
3.2多分支流程
3.3实验
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组.
read -p "请输入100米赛跑的秒数:" second
if [ $second -eq $second ] &> /dev/null
then
if [ $second -gt 0 -a $second -le 10 ] &> /dev/null
then
read -p "性别:" sex
if [[ "$sex" == "男" ]]
then
echo "恭喜您进入男生组!"
elif [[ "$sex" == "女" ]]
then
echo "恭喜您进入女生组!"
else
echo "输入错误,请重新输入。"
fi
else
echo "很遗憾,您未能进入选拔赛。"
fi
else
echo "重新输入"
fi
三、case语句
1.格式
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认命令序列
esac
2.case多分支流程:
3.实验
read -p "命令:" a
case $a in
start)
systemctl start firewalld
echo "开启防火墙"
;;
status)
systemctl status firewalld
echo "查看防火墙状态"
;;
stop)
systemctl stop firewalld
echo "关闭防火墙"
;;
restart)
systemctl restart firewalld
echo "重启防火墙"
;;
*)
echo "用法:$0 {start|stop|status|restart}"
esac