Shell编程之条件语句

avatar
作者
猴君
阅读量:2

目录

一、条件测试

1、test命令

2、文件测试

3、整数值比较

4、字符串比较

5、逻辑测试

二、if语句

1、if单分支语句

2、if双分支语句

3、if多分支语句

4、if嵌套语句

三、case分支语句


一、条件测试

1、test命令

测试表达式是否成立,成立返回0,否则返回其他数值。

  • 语法格式
格式1:  test 条件表达式 格式2:  [条件表达式]

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,表示具备写权限  

3、整数值比较

整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作选项如下,使用时将操作选项放在要  比较的两个整数之间。

  • 语法格式
[ 整数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

4、字符串比较

字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的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 /]#  

5、逻辑测试

逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。   

  • 语法格式
格式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语句

1、if单分支语句

单分支 if 语句:对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作。

  • 语法格式1
if 条件测试操作  then 命令序列  fi    #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误
  • 语法格式2
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]#  


2、if双分支语句

双分支 if 语句只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是 “坐视不管”地不执行任何操作

  • 语法格式
if 条件测试操作 then 命令序列 1 else 命令序列 2 fi

  • 示例1
[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]# 


3、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]# 

4、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分支语句

  • 语法格式
 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]#  

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!