shell条件语句理解及应用【石头、剪刀、布】

shell条件语句理解及应用

一、条件测试

【1】文本测试与整数测试

常见的操作符有:

 -d:测试是否为目录(directory)
 -e:测试目录或者文件是否存在(exist)
 -f:测试是否为文件(file)
 -r:测试当前用户是否有读取权限(read)
 -w:测试当前用户是否有写入权限(write)
 -x:测试当前用户是否有执行权限(excute)
(1)test命令

测试表达式是否成立,若成立返回0,否则返回其他值
格式1:test 条件表达式
格式2:[ 条件表达式 ] #####中括号中两端都有空格

[root@localhost opt]# test -f abc.sh 
[root@localhost opt]# echo $?(上一次执行命令是否成立,0表示成立,1表示不成立)
0
[root@localhost opt]# test -d abc.sh 
[root@localhost opt]# echo $?
1
[root@localhost opt]# test -e /etc/sr0 && echo "yes"(如果前面的语句不成立则不执行后面的语句)
[root@localhost opt]# test -e /dev/sr0 && echo "yes"(&&表示如果前面的语句成立则执行下面的语句)
yes
[root@localhost opt]# 
(2)文件测试

格式:[ 操作符 文件或目录 ] ######注意空格

[root@localhost opt]# [ -e abc.sh ](查看文件是否存在)
[root@localhost opt]# echo $?(0表示存在)
0
[root@localhost opt]# [ -x abc.sh ](查看文件是否有执行权限)
[root@localhost opt]# echo $?(1表示没有)
1
[root@localhost opt]# [ -r abc.sh ]&&echo "yes"(&&表示如果前面的语句成立则执行下面的语句)
yes
[root@localhost opt]# [ -x abc.sh ]&&echo "yes"(如果前面的语句不成立则不执行后面的语句)
[root@localhost opt]# [ -w abc.sh ]&&echo "yes"
yes
[root@localhost opt]# 
(3)整数值的比较

格式:[ num1 操作符 num2 ](注意中括号中两端要空格)
常见的操作符有:

-eq:等于(equal)
-ne:不等于(not equal)
-gt:大于(greater than)
-lt:小于(lesser than)
-le:小于等于(lesser or equal)
-ge:大于等于(greater or equal)

举例理解:

[root@localhost opt]# [ 80 -le 80 ]&& echo "yes"
yes
[root@localhost opt]# [ 80 -gt 90 ]&& echo "yes"
[root@localhost opt]# 

查看虚拟磁盘大小情况:

[root@localhost opt]# free -m(查看内存空间)
              total        used        free      shared  buff/cache   available
Mem:            972         598          60          28         313         161
Swap:          2047          18        2029
[root@localhost opt]# free -m |grep "Swap:" |awk '{ print $4 }'
2029
########(检索出Swap:并提取剩余空间大小)#########3
[root@localhost opt]# freeswap=$(free -m |grep "Swap:" |awk '{ print $4 }')
########(把剩余空间大小赋值个freeswap变量)########
[root@localhost opt]# [ $(free -m |grep "Swap:" |awk '{ print $4 }') -gt 2000 ]&& echo "$freeswap"MB
2029MB
########(大于2000输出大小,单位是MB)#########
[root@localhost opt]# 
【2】字符串测试与逻辑测试
(1)字符串测试
=或==:字符串的比较相同
!=:字符串比较不相同
-z:字符串内容为空

举例说明:

[root@localhost opt]# [ 80 != 080 ]&& echo "yes"
yes
[root@localhost opt]# [ 80 = 080 ]&& echo "yes"
[root@localhost opt]# [ 80 = 80 ]&& echo "yes"
yes
[root@localhost opt]# [ 80 == 80 ]&& echo "yes"
yes
[root@localhost opt]# [ -z '' ]&&echo "yes"
yes
[root@localhost opt]# [ -z "" ]&&echo "yes"
yes
[root@localhost opt]# [ -z " " ]&&echo "yes"
[root@localhost opt]# [ -z ' ' ]&&echo "yes"
(2)逻辑测试

格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常见的操作符有:

-a或&&:逻辑与,同时成立
-o或||:逻辑或,一个成立就可以
!:逻辑否,取反

举例说明:

[root@localhost opt]# [ -d /etc ]&& [ -x /etc ]&& echo "you can open it"
you can open it
[root@localhost opt]# [ -f /etc ]&& [ -x /etc ]&& echo "you can open it"
[root@localhost opt]# [ -f /etc ]|| [ -x /etc ]&& echo "are you sure?"
are you sure?
[root@localhost opt]# [ ! -f /etc ]&& [ -x /etc ]&& echo "you can open it"
you can open it

二、if语句

【1】if单分支语句

(1)结构图
在这里插入图片描述
(2)语法

语法1:
if  [ 条件 ]
  then
      命令集
fi

语法2:
if [条件]:then
       命令集
fi
【2】if双分支语句

(1)结构图
在这里插入图片描述
(2)语法:

if [ 条件测试表达式 ];then
    命令1            
else 
    命令2
fi      
【3】if多分支语句

(1)结构示意图
在这里插入图片描述
(2)语法:

if [ 条件测试表达式1 ];then
    命令1  
elif [ 条件表达式2 ];then
   命令2              
else 
   命令3
fi      

三、case语句

(1)结构示意图
在这里插入图片描述
(2)语法:

case $num in
  [0-9][1-9]|100)######"|"表示或
     echo "这是1-100之间的数"
   ;;
   男)
      echo "一个汉字"
esac

case $num1 in
  [0-9][1-9]|100)
     echo "这是1-100之间的数"
   ;;
   女)
      echo "一个汉字"
   ;;
   *)
   echo "*表示除了上面的条件之外"   
esac
......

四、条件语句应用实例

【1】10秒晋级分男女组

第一种方法:(if条件语句)

[root@localhost opt]# vim time.sh 
#!/bin/bash
#name=time
read -p "请输入你的比赛成绩:" score
if [ $score -le 10 ]&&[ $score -gt 0 ];then
  echo "恭喜你进入决赛!"
 read -p "性别(男/女):" gender
 if [ $gender = "男" ];then
  echo "你是男子组"
 else
  echo "你是女子组"
 fi
else
 echo "你被淘汰了"
fi
[root@localhost opt]# sh time.sh 
请输入你的比赛成绩:5
恭喜你进入决赛!
性别(男/女):男
你是男子组
[root@localhost opt]# sh time.sh 
请输入你的比赛成绩:12
你被淘汰了
[root@localhost opt]# sh time.sh 
请输入你的比赛成绩:6
恭喜你进入决赛!
性别(男/女):女
你是女子组

第二种方法:(case条件语句)

[root@localhost opt]# vim time1.sh
#!/bin/bash
#case方式实现10秒晋级,分男女组!
read -p "你的分数score是:" score
case $score in
  [1-9]|10)
    echo "恭喜你,you pass"
 read -p "你的性别gender是:" gender
 case $gender in
  男)
    echo "你是男子组"
  ;;
  女)
    echo "你是女子组"
 esac
  ;;
  *)
    echo "很遗憾,you out"
esac
[root@localhost opt]# sh time1.sh 
你的分数score是:4
恭喜你,you pass
你的性别gender是:男
你是男子组
[root@localhost opt]# sh time1.sh 
你的分数score是:12
很遗憾,you out
[root@localhost opt]# sh time1.sh 
你的分数score是:5
恭喜你,you pass
你的性别gender是:女
你是女子组
【2】石头、剪刀、布游戏

第一种方法:(多分支if语句)

[root@localhost opt]# vim four.sh 
#!/bin/bash
#name=four
#This is a game!

echo "石头=1、剪刀=2、布=3"
read -p "请随机输入1或2或3:" num1
num=$(($RANDOM%3 + 1))
if [ $num1 -ge 1 ] && [ $num1 -le 3 ];then
  if [ $num -eq 1 ] && [ $num1 -eq 3 ];then
   echo "恭喜哦,你赢了"
  elif [ $num -eq 1 ] && [ $num1 -eq 2 ];then
   echo "你输了,不要灰心"
  elif [ $num -eq 2 ] && [ $num1 -eq 1 ];then
   echo "恭喜哦,你赢了"
  elif [ $num -eq 2 ] && [ $num1 -eq 3 ];then
   echo "你输了,不要灰心"
  elif [ $num -eq 3 ] && [ $num1 -eq 2 ];then
   echo "恭喜哦,你赢了"
  elif [ $num -eq 3 ] && [ $num1 -eq 1 ];then
   echo "你输了,不要灰心"
  else
   echo "平局,再来"
  fi
else
 echo "你违规了"
fi
[root@localhost opt]# sh four.sh 
石头=1、剪刀=2、布=3
请随机输入1或2或3:2
你输了,不要灰心
[root@localhost opt]# sh four.sh 
石头=1、剪刀=2、布=3
请随机输入1或2或3:1
恭喜哦,你赢了
[root@localhost opt]# sh four.sh 
石头=1、剪刀=2、布=3
请随机输入1或2或3:3
恭喜哦,你赢了
[root@localhost opt]# sh four.sh 
石头=1、剪刀=2、布=3
请随机输入1或2或3:4
你违规了

第二种方法:(case语句和多分支if语句)

[root@localhost opt]# vim four1.sh
#!/bin/bash
#石头=1,剪刀=2,布=3
num=($(($RANDOM%3+1)))
read -p "请出石头、剪刀、布:" num1
case $num in
  1)
  if [ $num1 = '剪刀' ];then
    echo "电脑出的是石头,很遗憾你输了!"
  elif [ $num1 = '布' ];then
    echo "电脑出的是石头,恭喜你赢了哦!"
  elif [ $num1 = '石头' ];then
    echo "旗鼓相当,再来一次呀!"
  else
    echo "要好好玩哦,请出石头、剪刀、布!"
  fi
;;
  2)
  if [ $num1 = '布' ];then
    echo "电脑出的是剪刀,很遗憾你输了!"
  elif [ $num1 = '石头' ];then
    echo "电脑出的是剪刀,恭喜你赢了哦!"
  elif [ $num1 = '剪刀' ];then
    echo "旗鼓相当,再来一次呀!"
  else
    echo "要好好玩哦,请出石头、剪刀、布!"
  fi
;;
  3)
  if [ $num1 = '石头' ];then
    echo "电脑出的是布,很遗憾你输了!"
  elif [ $num1 = '剪刀' ];then
    echo "电脑出的是布,恭喜你赢了哦!"
  elif [ $num1 = '布' ];then
    echo "旗鼓相当,再来一次呀!"
  else
    echo "要好好玩哦,请出石头、剪刀、布!"
  fi
esac
[root@localhost opt]# sh four1.sh 
请出石头、剪刀、布:bu
要好好玩哦,请出石头、剪刀、布!
[root@localhost opt]# sh four1.sh 
请出石头、剪刀、布:布
电脑出的是剪刀,很遗憾你输了!
[root@localhost opt]# sh four1.sh 
请出石头、剪刀、布:剪刀
电脑出的是石头,很遗憾你输了!
[root@localhost opt]# sh four1.sh 
请出石头、剪刀、布:石头
旗鼓相当,再来一次呀!
[root@localhost opt]# sh four1.sh 
请出石头、剪刀、布:布
旗鼓相当,再来一次呀!
[root@localhost opt]# sh four1.sh 
请出石头、剪刀、布:石头
电脑出的是剪刀,恭喜你赢了哦!

第三种方法:(总结第二种方式)

[root@localhost opt]# vim four2.sh
#!/bin/bash
echo "石头=1、剪刀=2、布=3"
read -p "请随机输入1或2或3:" num1
num=$(($RANDOM%3 + 1))
if [ $num1 -ge 1 ] && [ $num1 -le 3 ];then
     if [ $num -eq 1 -a $num1 -eq 3 ]||[ $num -eq 2 -a $num1 -eq 1 ]||[ $num -eq 3 -a $num1 -eq 2 ];then
     echo "恭喜哦,你赢了"
     elif [ $num -eq 3 -a $num1 -eq 1 ]||[ $num -eq 1 -a $num1 -eq 2 ]||[ $num -eq 2 -a $num1 -eq 3 ];then
     echo "你输了,不要灰心"
     else
     echo "平局,再来"
     fi
else
 echo "你违规了"
fi
【3】成绩评分
[root@localhost opt]# vim sorce.sh 
#!/bin/bash
#name=score
#this is score menu!
read -p "请输入你的成绩:" score
case "$score" in
  8[0-9]|9[0-9]|100)
       echo "你的成绩是优秀!"
       ;;
  7[0-9])
       echo "你的成绩是良好!"
       ;;
  6[0-9])
       echo "你的成绩是合格!"
       ;;
  [1-5][0-9]|0)
       echo "你的成绩是不及格!"
       ;;
   *)
       echo "你就是弟弟!"
esac
[root@localhost opt]# sh score.sh 
请输入你的成绩:123
你就是弟弟!
[root@localhost opt]# sh score.sh 
请输入你的成绩:56
你的成绩是不及格!
[root@localhost opt]# sh score.sh 
请输入你的成绩:100
你的成绩是优秀!
[root@localhost opt]# sh score.sh 
请输入你的成绩:0
你的成绩是不及格!
[root@localhost opt]# sh score.sh 
请输入你的成绩:79
你的成绩是良好!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值