shell编程之条件语句

本章结构

条件测试
​ 文件测试与整数测试
​ 字符串测试与逻辑测试

if语句

​ if单分支语句
​ if双分支语句
​ if多分支语句
case分支语句
条件测试操作

test命令

测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
常用的测试操作符
​ -d:测试是否为目录
​ -e:测试目录或文件是否存在
​ -f:测试是否为文件
​ -r:测试当前用户是否有权限读取
​ -w:测试当前用户是否有权限写入
​ -x:测试当前用户是否有权限执行
条件测试操作
文件测试
[ 操作符 文件或目录 ]
常用的测试操作符

[root@localhost ~]# [ -d /dev/cdrom ]

[root@localhost ~]# echo $?

0                        0表示条件成立

[root@localhost ~]# [ -d /dev/cdrom/Server ]

[root@localhost ~]# echo $?  

1                         1表示条件不成立

[root@localhost ~]# [ -d /dev/cdrom ]&&echo "YES" 逻辑与,"而且"的意思

YES

条件测试操作
整数值比较
[ 整数1 操作符 整数2 ]

常用的测试操作符
​ -eq:等于(Equal)

​ -ne:不等于(Not Equal)

​ -gt:大于(Greater Than)

​ -lt:小于(Lesser Than)

​ -le:小于或等于(Lesser or Equal)

​ -ge:大于或等于(Greater or equal)

条件测试操作
整数值比较
[ 整数1 操作符 整数2 ]

常用测试操作符

[root@localhost ~]# who | ec -l

6

[root@localhost ~]# [ $(who | wc-l) -gt 5 ]&&echo "Too many." 用户数是否>5

Too Many.

[root@localhost ~]#  [ $(who | wc-l) -gt 10 ]&&echo ">=10." 用户数是否 >=10

条件测试操作
整数值比较
[ 整数1 操作符 整数2 ]

常用的测试操作符

[root@localhost ~]#  FreeCC=$(free -m | grep "Mem:" | awk '{print $6}')

[root@localhost ~]#  [ $FreeCC -lt 1024 ]&& echo ${FreeCC}MB     ===>空闲内存是否<1024MB

588MB

条件测试操作
字符串比较
​ 格式1 [ 字符串1 = 字符串2 ]

​ [ 字符串1 != 字符串2 ]

​ 格式2 [ -z 字符串 ]

常用的测试操作符
​ =:字符串内容相同

​ !=:字符串内容不通,!号表示相反的意思

​ -z:字符串内容为空

常用的测试操作符

[root@localhost ~]#  echo $LANG 

zh_CN.UTF-8

[root@localhost ~]#  [ $LANG != "en.US" ]&&echo "Not en.US"  ===>测试当前语言环境

Not en.US

[root@localhost ~]#  read -p "是否覆盖现有文件 (yes/no)?" ACK

是否覆盖现有文件 (yes/no)? yes

[root@localhost ~]#  [ $ACK = "yes" ]&&echo "覆盖"  ===>测试读入的字符串是否为yes

覆盖

条件测试操作
逻辑测试
格式1: [ 表达式1 ] 操作符 [ 表达式2 ]

格式2:命令1 操作符 命令2 …

常用的测试操作符

-a或&&:逻辑与,"而且"的意思

-o或||:逻辑或,"或者"的意思

!:逻辑否

[root@localhost ~]# [ -d /etc ] && [ -r /etc ] && echo "You can open it"

[root@localhost ~]#  [ -d /etc ] || [ -d /home ]&&echo "ok"

if语句的结构

单分支结构

if    条件测试操作                       if    已用磁盘空间>80%

    then    命令序列                        then    报警

fi                                     fi

双分支结构

if    条件测试操作                       if    80端口是否在监听

    then    命令序列1                        then    网站服务已在运行
    else    命令序列2                        else    启动htpd服务
fi                                     fi

多分支结构

if    条件测试操作1                                                     if    分数为85~100之间

    then    命令序列1                                                       then    判为优秀

elif     条件测试操作2                                                 elif    分数为70~84之间

    then 命令序列2                                                          then    判为合格

else                                                                              else

    命令序列3                                                                   判为不合格

fi                                                                                   fi

case语句结构

case多分支结构
case 变量值 in

模式1)

​ 命令序列1

​ ;;

模式2)

​ 命令序列2

​ ;;

*)

​ 默认命令序列

esca

case语句应用实例
case多分支语句

[root@localhost ~]# cat hitkey.sh

#!/bin/bash

read -p "请输入一个字符,并按Enter键确认:" KEY

case $KEY in

[a-z]|[A-Z])           ===>匹配任意字母

    echo "您输入的时字母."

    ;;

[0-9])                     ===>匹配任意数字

    echo "您输入的时数字."

    ;;

*)                           ===>匹配任意字符

    echo "您输入的是空格、功能键或其他控制字符."

esac

小实验

石头剪刀布脚本
#!/bin/bash
pc=`expr $[$RANDOM%10+1] % 3`
read -p "输入剪刀石头布 " qq
if [ $qq == 剪刀 ];then
  if [ $pc -eq 0 ];then
    echo "电脑出布,爸爸赢了"
  elif [ $pc -eq 1 ];then
   echo "电脑出石头,哦我输了"
  else
   echo "电脑出剪刀,平局"
  fi
elif [ $qq == 石头 ];then
  if [ $pc -eq 0 ];then
    echo "电脑出布,哦我输了"
  elif [ $pc -eq 1 ];then
   echo "电脑出石头,平局"
  else
   echo "电脑出剪刀,爸爸赢了"
  fi
elif [ $qq == 布 ];then
  if [ $pc -eq 0 ];then
    echo "电脑出布,平局"
  elif [ $pc -eq 1 ];then
   echo "电脑出石头,爸爸赢了"
  else
   echo "电脑出剪刀,哦我输了"
  fi
fi

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值