理论+实验·Shell编程之条件语句===>if语句,case语句

理论+实验·Shell编程之条件语句

条件测试操作

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)

常用的测试操作符
[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
常用的测试操作符
[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

if语句应用示例

单分支if语句

​ 判断挂载点目录,若不存在则自动创建

[root@locahost ~]# cat chkmountdir.sh

#!/bin/bash

MOUNT_DIR="/dev/cdrom"

if[ ! -d $MOUNT_DIR]  ===>当目录不存在时执行

    then

    mkdir -p $MOUNT_DIR

fi
双分支if语句

​ 判断目标主机是否存货,显示检测结果

[root@localhost ~]# cat pinghost.sh

#!/bin/bash

ping -c 3 -i 0.2 -W 3 $1 &> /dev/null  ===>"-c"三个测试包 "-i"间隔0.2秒 "-W"超时3秒

if [ $? -eq 0 ]

  then                                                      ===>判断ping命令的检测结果,分别给出不通提示

    echo "Host $1 is up."         

  else

    echo "Host $1 is down."

fi
多分支if语句

​ 判断分数范围,分为优秀,合格,不合格三档

[root@localhost ~]# cat gradediv.sh

#!/bin/bash

read -p "请输入你的分数(0-100):" GRADE

if [ $ake -ge 85 ] && [ $ake -le 100 ]                   ===>判断分数所在区间,给出不同的分档结果

then

    echo "$GRADE分,优秀!"

elif [ $ake -ge 70 ] && [ $ake -le 84 ]

    then

echo "$GRADE分,合格!"

else

  echo "$GRADE分,不合格!"

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
#石头剪刀布小游戏
num=$[$RANDOM%3+1]
#石头=1 剪刀=2 布=3
read -p "请输入您需要出石头,剪刀还是布:" shoushi
echo "你出的是$shoushi"
if [ $shoushi = 石头 ];then
    case $num in
        1)
        echo "电脑出的是石头,平局"
        ;;
        2)
        echo "电脑出的是剪刀,你赢了"
        ;;
        3)
        echo "电脑出的是布,你输了"
    esac
elif [ $shoushi = 剪刀 ];then
    case $num in
        1)
        echo "电脑出的是石头,你输了"
        ;;
        2)
        echo "电脑出的是剪刀,平局"
        ;;
        3)
        echo "电脑出的是布,你赢了"
    esac
elif [ $shoushi = 布 ];then
    case $num in
        1)
        echo "电脑出的是石头,你赢了"
        ;;
        2)
        echo "电脑出的是剪刀,你输了"
        ;;
        3)
        echo "电脑出的是布,平局"
    esac  
else echo "输入的信息有误,请输入正确的信息"
fi
#!/bin/bash
#竞速比赛10秒内进入决赛,分为男子组,女子组

read -p "请输入你的百米赛跑成绩:" miao
read -p "请输入你的性别(男or女):" xing


if [ $xing = 男 ]
    then
      echo "男子组"

  if [ $miao -ge 0 ]&&[ $miao -le 10 ]
    then
      echo "成绩合格"
    else
      echo "成绩不合格,被淘汰."
  fi

  elif [ $xing = 女 ]
    then
      echo "女子组"

  if [ $miao -ge 0 ]&&[ $miao -le 10 ]
    then
      echo "成绩合格"
    else
      echo "成绩不合格,被淘汰."
  fi

  else
      echo "请输入正确的信息"
fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值