shell之条件语句

目录

条件语句

条件判断

条件测试

test 条件测试命令

整数比较的表达式

逻辑测试

if语句

单分支语句

双分支语句

多分支语句 

case语句

case语句结构

case语句结构特点

 实验

例一

例二

例三

例四

例五


条件语句

条件判断

条件判断为0    true 真
条件判断为非0  false 假

条件测试

test 条件测试命令

格式1 test 条件测试表达式
格式2 [ -e test.txt ] 注意空格
-e 测试目录或者文件是否存在
-d 测试目录是否存在
-f 测试文件是否存在
-r 测试当前用户是否有读权限
-w  测试当前用户是否有写权限
-x  测试当前用户是否有执行权限
在代码中使用格式2配合if语句

整数比较的表达式

-eq 等于 
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
以上英文格式的整数表达式,只能用于比较整数

== 等于
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
可以用字符串比较,也可以比较整数,两边类型要一样

逻辑测试

-a或&& 逻辑与,前后条件都满足
-o或|| 逻辑或,满足一个条件即可

写在一个[]中用字母表达式,写在

直接引用变量,最好用引号,特殊符号要慎用

[] [[]] 单双都是条件测试的语句,都可判断真假
双中括号 功能更强大 可以直接应用编量,不加引号不会出现歧义。支持正则表达式

if语句

单分支语句
if #条件测试
then 
   #命令
fi
双分支语句
if #条件测试
then 
  #命令
else
  #命令
fi
多分支语句 
if #条件测试
then
   #命令
elif #条件测试
then
   #命令
else
   #命令
fi

case语句

case语句结构

case语句结构特点

case行尾必须为单词 in 每个模式必须以右括号 ) 结束

双分号 ;; 表示命令序列结束

匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。

最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列

以esca结尾

case 变量值 in
模式1)
命令1
;;
模式2)
命令2
;;
......
*)
命令n
esac

 实验

例一

检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

[ -e /home/test.sh ]
if [[ $? -eq 0 ]]
 then 
      echo "存在"
      [ -x /home/test.sh ]
   if [[ $? -eq 0 ]]
      then 
      echo "有执行权限"
      else
      echo "没有执行权限"
   fi
  else
  echo "不存在"
fi

例二

提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,
如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,
男生进男生组,女生进女生组,如果输入错误请提示错误

read -p "输入100米秒数:" sec
if [ $sec -eq $sec ] &> /dev/null
  then 
     if [[ $sec -gt 0 && $sec -le 10 ]]
        then 
          echo "进入淘汰赛"
          read -p "输入性别:" sex
          if [[ $sex == "男" ]]
           then
             echo "进入男生组"
          elif [[ $sex == "女" ]] 
           then  
             echo "进入女生组"
          else 
             echo "输入错误"
          fi
     elif [[ $sec -gt 10 ]]             
        then
          echo "淘汰"
     else
       echo "输入错误"
     fi
  else
    echo "输入错误"
fi

例三

用case语句解压压缩包到 /opt 目录

read -p "请输入包名" decompress
case $decompress in
*.tar.bz2)
   tar -xf $decompress -C /opt/
;;
*.tar.gz)
    tar -xf $decompress -C /opt/
;;
*)
  echo "无压缩包"
esac

例四

根据判断输入的内容是奇数还是偶数

read -p "请输入数字" num
if  [ $num -eq $num ] &> /dev/null
 then
   if num1=$(($num%2)) 
     [[ $num1 -eq 0 ]]
     then
       echo "偶数"
     else
       echo "奇数"
   fi  
 else
   echo "非整数"
fi

例五

用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务,
要求如果命令选项不对,则提示输入不正确

read -p "请输入指令:" order
case $order in
start)
   systemctl start firewalld
;;
stop)
   systemctl stop firewalld
;;
restart)
   systemctl restart firewalld
;;
status)
   systemctl status firewalld
;;
*)
   echo "指令输入错误"
esac

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值