文章目录
一.条件测试
1.test命令
- 测试表达式是否成立,若成立返回0,否则返回其他数值
格式:
- test 条件表达式
- [ 条件表达式 ]
2.文件测试
格式
[操作符 文件或目录]
常用的测试操作符
- -d:测试是否为目录
- -e:测试目录或文件是否存在
- -f:测试是否为文件
- -r:测试当前用户是否有权限读取
- -w:测试当前用户是否有权限写入
- -x:测试当前用户是否有权限执行
3. 整数值比较
格式:
[整数1 操作符 整数2]
常用的测试操作符
- -eq:等于
- -ne:不等于
- -gt:大于
- -lt:小于
- -le:小于或等于
- -ge:大于或等于
ack用法
4.字符串比较
格式1:
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2:
[ -z 字符串 ]
常用的测试操作符
- =:字符串内容相同
- !=:字符串内容不同,!号表示相反的意思
- -z:字符串内容为空
- -n:字符串有内容
5.逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常用的操作符
-a或&& | 逻辑与,"而且"的意思,前后条件需都成立 |
---|---|
-o或▕▕ | 逻辑或,“或者”的意思,只需前后条件中一个成立 |
! | 逻辑否的意思 |
例如:
a=5
[ $a -ne 1 ] && [ $a != 2 ] 等同于 [ $a -ne 1 -a $a != 2 ]
&&、||操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错
例如:
二.条件语句
(一)if语句
1.单分支结构
if 条件测试操作 if 已用磁盘空间>80%
then 命令序列 then 报警
fi fi
if语句的三种表达方式
方法1:
[root@localhost ~]# if [ 3 -ne 2 ]
> then
> echo "yes"
> fi
yes
方法2:
if [ 3 -ne 2 ]; then echo "yes"; fi
方法3:
[ 3 -ne 2 ] && echo "yes"
2.双分支结构
if 条件测试操作 if 80端口是否在监听
then then
命令序列 1 ➡➡➡ 网站服务已在运行
else ➡➡➡ else
命令序列 2 启动httpd服务
fi fi
3.多分支结构
if 条件测试操作 if 分数85-100之间
then then
命令序列1 判为优秀
elif elif
条件测试操作2 分数在70-84之间
then then
命令序列2 判为合格
else else
命令序列3 判为不合格
fi fi
例题:
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
read -p "输入100米赛跑的秒数:" math
if [ "$math" -gt 0 -a "$math" -le 10 ]
then
echo "恭喜你进入选拔赛! "
elif [ "$math" -gt 10 ]
then
echo "不好意思,你已被淘汰! "
else
echo "输入有误,请重新输入! "
fi
read -p "请输入你的性别:" sex
if [ "$sex" = '男' ]
then
echo "恭喜你进入男子组! "
elif [ "$sex" = '女' ]
then
echo "恭喜你进入女子组! "
else
echo "输入错误,请重新输入! "
fi
(二)case语句结构
case多分支结构
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
……
*)
默认命令序列
esac
case语句注意事项
1.case行首必须以单词“in”,每一模式必须以单个右括号")"结束
2.双分号";;"表示命令序列的结束
3.模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
最后的*)表示默认模式,其中的*相当于通配符
例题:
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
#!/bin/bash
read -p "输入100米赛跑的秒数:" s
case $s in
[1-9][1-9]|100)
echo "恭喜你已被淘汰"
;;
[0-9]|10 )
echo "恭喜你进入选拔赛"
read -p "你的性别:" sex
case $sex in
男)
echo "你已进入男子组"
;;
女)
echo "你已进入女子组"
;;
*)
echo "请重新输入"
esac
;;
*)
echo "请重新输入"
esac