目录
一、条件测试
1、test命令
2、文件测试
3、整数值比较
4、字符串比较
5、逻辑测试
二、if语句
1、if单分支语句
2、if双分支语句
3、if多分支语句
4、if嵌套语句
三、case分支语句
测试表达式是否成立,成立返回0,否则返回其他数值。
格式1: test 条件表达式 格式2: [条件表达式]
[操作符 文件或目录 ]
常用的测试操作符
选项 | 描述 |
---|---|
-d | 测试是否为目录 (Directory) |
-e | 测试目录或文件是否存在 (Exist) |
-f | 测试是否为文件 (File) |
-r | 测试当前用户是否有权限读取 (Read) |
-w | 测试当前用户是否有权限写入 (Write) |
-x | 测试当前用户是否有权限执行 (eXcute) |
[root@localhost /]# test -d /opt/cxc //是否为目录 [root@localhost /]# echo $? 0 //返回值为0,表示真 [root@localhost /]# [root@localhost /]# test -f /opt/huawei //是否为文件 [root@localhost /]# echo $? 0 //返回值为0,表示真 [root@localhost /]# [root@localhost /]# test -d /opt/nj //是否为目录 [root@localhost /]# echo $? 1 //返回值为1,表示假 [root@localhost /]# [root@localhost /]# test -f /opt/kfc/ //是否为文件 [root@localhost /]# [root@localhost /]# echo $? 1 //返回值为1,表示假 [root@localhost /]# [root@localhost /]# test -e /opt/zmx/ //是否存在文件或目录 [root@localhost /]# echo $? 0 //返回值为0,表示存在 [root@localhost /]# [root@localhost /]# test -e /opt/feiji //是否存在文件或目录 [root@localhost /]# echo $? 1 //返回值为1,表示不存在 [root@localhost /]# [root@localhost /]# test -x /opt/huawei //是否具有执行权限 [root@localhost /]# echo $? 1 //返回值为1,表示不具备该权限 [root@localhost /]# test -r /opt/huawei //是否具有读权限 [root@localhost /]# echo $? 0 //返回值为0,表示具备该读权限 [root@localhost /]# test -w /opt/huawei //是否具备写权限 [root@localhost /]# echo $? 0 //返回值为0,表示具备写权限
整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作选项如下,使用时将操作选项放在要 比较的两个整数之间。
[ 整数1 操作符 整数2 ]
常用测试操作符
运算符 | 含义 |
---|---|
-eq | 第一个数等于(Equal)第二个数 |
-ne | 第一个数不等于(Not Equal)第二个数 |
-gt | 第一个数大于(Greater Than)第二个数 |
-lt | 第一个数小于(Lesser Than)第二个数 |
-le | 第一个数小于或等于(Lesser or Equal)第二个数 |
-ge | 第一个数大于或等于(Greater or Equal)第二个数 |
[root@localhost /]# who|wc -l 3 //有三个用户 [root@localhost /]# [root@localhost /]# [ $(who|wc -l) -gt 2 ] && echo "Too many" Too many //如果用户大于2,返回TOO many [root@localhost /]# [root@localhost /]# [ $(who|wc -l) -ge 3 ] && echo " good" good //如果用户大于等于3,返回good [root@localhost /]# [root@localhost /]# [ $(who|wc -l) -lt 5 ] && echo " litter" litter //如果用户小于5个,返回litter [root@localhost /]# [ $(who|wc -l) -le 5 ] && echo " Better" Better 如果用户个数小于等于5,返回Better [root@localhost /]# [ $(who|wc -l) -eq 3 ] && echo " Well" Well //如果用户个数等于3,返回Well
字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。
[ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ]
[ -z 字符串 ]
常用的测试操作符
操作符 | 含义 |
---|---|
= | 第一个字符串等于第二个字符串。 |
!= | 第一个字符串不等于第二个字符串。 |
-z | 检查字符串是否为空(零长度)。 |
[root@localhost /]# echo $LANG zh_CN.UTF-8 [root@localhost /]# [root@localhost /]# [ $LANG = "en_us" ] && echo "不相同" [root@localhost /]# [root@localhost /]# [root@localhost /]# [ $LANG != "en_us" ] && echo "不相同" 不相同 [root@localhost /]# [root@localhost /]# [root@localhost /]# read -p "是否覆盖当前目录(yes/no) ?" ACK 是否覆盖当前目录(yes/no) ?yes [root@localhost /]# [root@localhost /]# echo $ACK yes [root@localhost /]# [root@localhost /]# [ -z $cxc ] && echo "空字符串" 空字符串 [root@localhost /]#
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。
格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ... 格式2: 命令1 操作符 命令2 ...
操作符 | 含义 |
---|---|
-a 或 && | 逻辑与,“而且”的意思 |
-o 或 || | 逻辑或,“或者”的意思 |
! | 逻辑否,“非”的意思 |
[root@localhost /]# [root@localhost /]# [ -d /opt/cxc/ ] && [ -r /opt/zmx/ ] && echo "目录和权限都有" 目录和权限都有 [root@localhost /]# [ -d /opt/kfc/ ] || [ -r /opt/kfc/ ] && echo "目录和权限有一个" 目录和权限有一个 [root@localhost /]# [ ! -d /opt/xiaomi ] && echo "xiaomi不是目录" xiaomi不是目录
单分支 if 语句:对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。
if 条件测试操作 then 命令序列 fi #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误
if 条件测试操作;then 命令序列 fi
[root@localhost if]# vim demo1.sh //编写脚本 [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo1.sh //添加权限 [root@localhost if]# [root@localhost if]# ./demo1.sh //执行脚本 true [root@localhost if]#
[root@localhost if]# vim demo2.sh [root@localhost if]# [root@localhost if]# chmod +x demo2.sh [root@localhost if]# [root@localhost if]# ./demo2.sh OK [root@localhost if]#
[root@localhost if]# vim demo3.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo3.sh [root@localhost if]# [root@localhost if]# ./demo3.sh [root@localhost if]# [root@localhost if]# ls /mnt/ cdrom [root@localhost if]#
[root@localhost if]# vim demo4.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo4.sh //添加权限 [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo4.sh //实行脚本 请输入参数:sh.sh 这是一个Shell脚本 //有返回值 [root@localhost if]# [root@localhost if]# ./demo4.sh 请输入参数:cxc.sh 这是一个Shell脚本 [root@localhost if]# [root@localhost if]# ./demo4.sh 请输入参数:zmx //不是.sh结尾,没有返回值 [root@localhost if]#
[root@localhost if]# vim demo5.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo5.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo5.sh //为真,返回true 请输入一个字符:1dhudu6 true [root@localhost if]# [root@localhost if]# ./demo5.sh 请输入一个字符:bdqhud //为假,没有返回值 [root@localhost if]#
双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作
if 条件测试操作 then 命令序列 1 else 命令序列 2 fi
[root@localhost if]# vim demo6.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo6.sh //添加权限 [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo6.sh //设备没开启,返回file file [root@localhost if]# ./demo6.sh true //设备存在,返回true
[root@localhost if]# vim demo7.sh [root@localhost if]# [root@localhost if]# chmod +x demo7.sh //添加权限 [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo7.sh 请输入你的用户:cxc 用户已存在 //用户已存在 [root@localhost if]# [root@localhost if]# ./demo7.sh 请输入你的用户:zmx 已创建用户 //已主动创建一个用户 [root@localhost if]# [root@localhost if]# ./demo7.sh 请输入你的用户:lala 已创建用户 //已主动创建一个用户 [root@localhost if]#
[root@localhost if]# vim demo8.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo8.sh //添加权限 [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo8.sh //root用户是管理员 拥有管理员身份 [root@localhost if]# [root@localhost if]# su - cxc //切换用户 [cxc@localhost ~]$ [cxc@localhost ~]$ cd /opt/ [cxc@localhost opt]$ ls cxc huawei if kfc nj rh xiaomi zmx [cxc@localhost opt]$ cd if [cxc@localhost if]$ ls demo1.sh demo2.sh demo3.sh demo4.sh demo5.sh demo6.sh demo7.sh demo8.sh [cxc@localhost if]$ ./demo8.sh 不是管理员 //cxc用户不是管理员 [cxc@localhost if]$
[root@localhost if]# vim demo9.sh [root@localhost if]# [root@localhost if]# chmod +x demo9.sh [root@localhost if]# [root@localhost if]# ./demo9.sh 网站服务正在运行 [root@localhost if]#
与单分支、双分支 if 语句相比,多分支 if 语句的结构能够根据多个互斥的条件分别执行不同的操作
if [ 表达式 ] then ... elif [ 表达式 ] then ... [else] ... fi
[root@localhost if]# vim demo10.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo10.sh [root@localhost if]# [root@localhost if]# ./demo10.sh 请输入你的分数:99 优秀 [root@localhost if]# ./demo10.sh 请输入你的分数:84 良好 [root@localhost if]# ./demo10.sh 请输入你的分数:72 合格 [root@localhost if]# ./demo10.sh 请输入你的分数:60 不合格 [root@localhost if]#
[root@localhost if]# vim demo11.sh [root@localhost if]# [root@localhost if]# chmod +x demo11.sh [root@localhost if]# [root@localhost if]# ./demo11.sh 是一个目录 [root@localhost if]#
[root@localhost if]# [root@localhost if]# vim demo2.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo2.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo2.sh 输入一个时间:5 凌晨 [root@localhost if]# ./demo2.sh 输入一个时间:8 早上 [root@localhost if]# ./demo2.sh 输入一个时间:12 中午 [root@localhost if]# ./demo2.sh 输入一个时间:15 下午 [root@localhost if]#
[root@localhost if]# [root@localhost if]# vim demo5.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo5.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo5.sh 请输入文件路径:/opt/cxc 这是一个目录 文件可读 文件可写 文件可执行 [root@localhost if]# ./demo5.sh 请输入文件路径:/opt/zmx 这是一个目录 文件可读 文件可写 文件可执行 [root@localhost if]# ./demo5.sh 请输入文件路径:/opt/111 这是一个文件 文件可读 文件可写 [root@localhost if]# ./demo5.sh 请输入文件路径:/opt/222 这是一个文件 文件可读 文件可写 [root@localhost if]#
case 变量 in 模式1) 命令序列1 ;; 模式2) 命令序列1 ;; *) 默认命令序列 ;; esca
[root@localhost if]# vim demo6.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# chmod +x demo6.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo6.sh 请输入一个数字:1 周一 [root@localhost if]# ./demo6.sh 请输入一个数字:2 周二 [root@localhost if]# ./demo6.sh 请输入一个数字:3 周三 [root@localhost if]# ./demo6.sh 请输入一个数字:5 周五 [root@localhost if]# ./demo6.sh 请输入一个数字:7 周日 [root@localhost if]#
[root@localhost if]# vim demo7.sh [root@localhost if]# [root@localhost if]# chmod +x demo7.sh [root@localhost if]# [root@localhost if]# [root@localhost if]# ./demo7.sh 请输入你的分数:99 优秀 [root@localhost if]# ./demo7.sh 请输入你的分数:88 良好 [root@localhost if]# ./demo7.sh 请输入你的分数:77 还行 [root@localhost if]# ./demo7.sh 请输入你的分数:66 合格 [root@localhost if]# ./demo7.sh 请输入你的分数:55 不合格 [root@localhost if]#