shell编程条件语句(if语句结构、示例+case语句结构、示例)

一、条件测试

1.1 test命令

  • 测试表达式是否成立,若成立返回0,否则返回其他数值
格式一:test 条件表达示
格式二:[ 条件表达示 ]

1.2 文件测试

[ 操作符 文件或目录]

常用的测试操作符

  • -d: 测试是否为目录(Directory)
  • -e:测试目录或文件是否存在(Exist)
  • -f:测试是否为文件(File)
  • -r: 测试当前用户是否有权限读取(Read)
  • -w:测试当前用户是否有权限写入(Write)
  • -x:测试当前用户是否有权限执行(eXcute)
[root@localhost opt]# test -d run.txt 
[root@localhost opt]# echo $?
1
[root@localhost opt]# test -f run.txt 
[root@localhost opt]# echo $?
0
[root@localhost opt]# test -e run.txt 
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -d run.txt ]
[root@localhost opt]# echo $?
1
[root@localhost opt]# [ -f run.txt ]
[root@localhost opt]# echo $?
0
[root@localhost opt]# [ -e run.txt ]
[root@localhost opt]# echo $?
0
[cllt@localhost opt]$ ll
总用量 16
-rwxr-xr-x. 1 root root 466 7月  16 18:27 123.sh
-rwxr-xr-x. 1 root root 689 7月  16 20:11 321.sh
-rwxr-xr-x. 1 root root 307 7月  16 16:54 abc.sh
-rwxr-xr-x. 1 root root  57 7月  16 11:29 passwd.sh
-rw-r--r--. 1 root root   0 7月  17 08:34 run.txt
[cllt@localhost opt]$ test -r run.txt 
[cllt@localhost opt]$ echo $?
0
[cllt@localhost opt]$ test -w run.txt 
[cllt@localhost opt]$ echo $?
1
[cllt@localhost opt]$ test -x run.txt 
[cllt@localhost opt]$ echo $?
1
[cllt@localhost opt]$ [ -r run.txt ]
[cllt@localhost opt]$ echo $?
0
[cllt@localhost opt]$ [ -w run.txt ]
[cllt@localhost opt]$ echo $?
1
[cllt@localhost opt]$ [ -x run.txt ]
[cllt@localhost opt]$ echo $?
1

1.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` -le 2 ] && echo "yes" `当前用户小于或等于2,则输出yes
yes
[root@localhost ~]# [ $(free -m | grep Mem | awk '{print $4}') -gt 1000 ] && echo "yes"
yes

1.4 字符串比较

格式一:[ 字符串1 = 字符串2 ]
	   [ 字符串1 != 字符串2 ]
格式二:[ -z 字符串 ]

常用的测试操作符

  • =:字符串内容相同
  • !=: 字符串内容不同,!号表示相反的意思
  • -z: 字符串内容为空
[root@localhost ~]# [ 80 = 80 ] && echo "yes"
yes
[root@localhost ~]# [ 男 != 女 ] && echo "yes"
yes

1.5 逻辑测试

格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式二: 命令1 操作符 命令2 ...

常用的测试操作符

  • -a或&&:逻辑与,"而且”的意思
  • -0或||: 逻辑或,“或者”的意思
  • !:逻辑否
[root@localhost ~]# [ -d /etc ] && [ -r /etc ]&&echo "yes"
yes
[root@localhost ~]# [ -f /etc ] || [ -r /etc ]&&echo "yes"
yes
[root@localhost ~]# [ -f /etc ] && [ -r /etc ]&&echo "yes"   ‘错误表达’
[root@localhost ~]# [ ! -f /etc ] && [ -r /etc ]&&echo "yes"  ‘逻辑否后正确表达’
yes

二、if语句的结构

2.1 单分支结构

基本格式

if 条件测试操作
   then 命令序列
fi

在这里插入图片描述

2.2 双分支结构

if 条件测试操作
   then 命令序列1
   else 命令序列2
fi   

在这里插入图片描述

2.3 多分支结构

if 条件测试操作1
   then 命令序列1
elfi 条件测试操作2
   then 命令序列2
else
   命令序列3
fi  

在这里插入图片描述

2.4 if语句应用示例

利用if条件语句实现查成绩,80-100分为优秀,60-79分为合格,低于60分不合格

[root@localhost opt]# vim abc.sh 

#!/bin/bash
read -p "请输入你的成绩:" num
if [ $num -ge 0 ] && [ $num -le 100 ];then

  if [ $num -ge 80 ] && [ $num -le 100 ];then
    echo "成绩优秀"
  elif [ $num -ge 60 ] && [ $num -le 79 ];then
    echo "成绩合格"
  else
    echo "成绩不合格"
  fi

else
  echo "请输入正确的成绩"
fi
[root@localhost opt]# ./abc.sh 
请输入你的成绩:80
成绩优秀
[root@localhost opt]# ./abc.sh 
请输入你的成绩:60
成绩合格
[root@localhost opt]# ./abc.sh 
请输入你的成绩:40
成绩不合格
[root@localhost opt]# ./abc.sh 
请输入你的成绩:101
请输入正确的成绩

三、case语句的结构

3.1 case多分支结构

case 变量值 in
模式1)
  命令序列1
  ;;
模式2)
  命令序列2
  ;;
  ......
*)
  默认命令序列
esac

在这里插入图片描述

3.2 case语句应用示例

赛跑成绩10秒内的进入决赛,决赛分为男子组和女子组

[root@localhost opt]# vim 123.sh 

#!/bin/bash
read -p "请输入你的跑步成绩:" num
 case "$num" in
  [0-9]|10)
   echo "恭喜你进入决赛"
read -p "请输入你的性别(woman/man):" see
    case "$see" in
    woman)
    echo "你已被分入女子组"
    ;;
    man)
    echo "你已被分入男子组"
    ;;
  *)
    echo "请出入正确的性别"
  esac
   ;;
 *)
   echo "对不起,你已被淘汰"
esac
[root@localhost opt]# ./123.sh 
请输入你的跑步成绩:10
恭喜你进入决赛
请输入你的性别(woman/man):woman
你已被分入女子组
[root@localhost opt]# ./123.sh 
请输入你的跑步成绩:9
恭喜你进入决赛
请输入你的性别(woman/man):man
你已被分入男子组
[root@localhost opt]# ./123.sh 
请输入你的跑步成绩:12
对不起,你已被淘汰

猜你喜欢

转载自blog.csdn.net/weixin_47153988/article/details/107399841