一、条件测试
- test命令:测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
1、文件测试
- 格式:[ 操作符 文件或者目录 ]
-d 测试是否为目录(director)
-e 测试目录或文件是否存在(exist)
-f 测试是否为文件(file)
-r 测试当前用户是否有读的权限(read)
-w 测试当前用户是否有写的权限(write)
-x 测试是否有执行的权限(eXcete)
[root@localhost /]# cd /root
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]# ll
总用量 12
-rw-------. 1 root root 2053 7月 8 08:36 anaconda-ks.cfg
-rw-r--r--. 1 root root 2101 7月 8 08:37 initial-setup-ks.cfg
-rw-r--r--. 1 root root 1276 7月 14 19:26 ks.cfg
drwxr-xr-x. 2 root root 6 7月 8 08:37 公共
drwxr-xr-x. 2 root root 6 7月 8 08:37 模板
drwxr-xr-x. 2 root root 6 7月 8 08:37 视频
drwxr-xr-x. 2 root root 6 7月 8 08:37 图片
drwxr-xr-x. 2 root root 6 7月 8 08:37 文档
drwxr-xr-x. 2 root root 6 7月 8 08:37 下载
drwxr-xr-x. 2 root root 6 7月 8 08:37 音乐
drwxr-xr-x. 2 root root 6 7月 8 08:37 桌面
[root@localhost ~]# test -f ks.cfg
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d 图片 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -f ks.cfg ]&& echo "yes" ## &&后面跟的是输出内容,判断为则输出否则什么也不输出
yes
[root@localhost ~]#
2、整数测试
- 格式 [ 整数1 操作符 整数2 ]
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于或等于
-ge 大于或等于
! 取反
[root@localhost ~]# [ 100 -le 120 ]&& echo "yes"
yes ## 100小于120 所以输出yes
[root@localhost ~]# [ 100 -le 12 ]&& echo "yes"
[root@localhost ~]# ## 判断不正确 所以什么都不输出
3、字符串测试
格式:[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]
操作符:= 字符串内容相同
!= 字符串内容不相同
-z 字符串内容为空
4、逻辑测试
格式:[表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
-a 或 && 逻辑与 而且的意思
-o 或|| 逻辑或 或者的意思
! 逻辑否
二、if语句
1、if单分支语句
if [ 条件测试操作 ]
then 命令序列
fi
示例:判断如果 1.txt 是文件则删除它,否则退出
[root@localhost opt]# ls
1.txt adc.sh bak.sh caiquan.sh ping.sh sum.sh test1.sh
abc.sh a.sh beifen-1594976568.tgz first.sh rh test01.sh test2.sh
[root@localhost opt]# vim a.sh
[root@localhost opt]# sh a.sh
[root@localhost opt]# ls
abc.sh a.sh beifen-1594976568.tgz first.sh rh test01.sh test2.sh
adc.sh bak.sh caiquan.sh ping.sh sum.sh test1.sh
[root@localhost opt]# vim a.sh
#!/bin/bash
if [ -f /opt/1.txt ]
then $(rm -rf /opt/1.txt)
fi
2、if双分支语句
格式 if [ 条件测试操作 ]
then 命令序列1
else 命令序列2
fi
[root@localhost opt]# vim a.sh
#!/bin/bash
if [ -f /opt/a.test ]
then $(rm -rf /opt/1.txt)
else echo "这不是一个文件,无法删除"
fi
[root@localhost opt]# sh a.sh
这不是一个文件,无法删除
3、if多分支语句
格式 if [ 条件测试操作1 ]
then 命令序列1
elif [ 条件测试操作2 ]
then 命令序列2
else 命令序列3
fi
#!/bin/bash
read -p "请输入你的赛跑时间:" S
if [ $S -le 10 ] && [ $S -ge 0 ]
then
read -p "恭喜你进入决赛,你是男生还是女生?" sex
if [ $sex = "男生" ] | [ $sex = "男" ]
then
echo "恭喜你进入男子组决赛"
else
echo "恭喜你进入女子组决赛"
fi
else
echo "未进入决赛,下次努力"
fi
三、case语句
多分支结构:case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
......
*)
默认命令序列
esac
#!/bin/bash
read -p "输入一个成绩:" num
case $num in
8[0-9]|9[0-9]|100)
echo "成绩优秀"
;;
6[0-9]|7[0-9])
echo "成绩合格"
;;
[0-5][0-9])
echo "你等着挨打吧!"
;;
*)
echo "请输入0-100的数字,谢谢!"
esac