Shell-if和case条件语句

一、条件测试

1、文件测试与整数测试

1、test命令

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

2、文件测试

文件测试
[操作符 文件或目录]
常用的测试操作符
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)

常用的测试操作符

[ -d /medialcdrom] 
echo $?
0                                    #0表示条件成立
[ -d lmedialcdromlServer]
echo $?
0                                    #1表示条件不成立
[ -d /medialcdrom ] && echo "YES"    #&&逻辑与,而且的意思  
YES                             

3、整数值比较

[整数1 操作符 整数2]
常用的测试操作符
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le: 小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
常用的测试操作符

who | wc -l
1
[ $(who ] wc -l) -gt 5 ] && echo "Too many."                          #用户数是否>5
Too many.   
[ $(who | wc -l) -ge 10 ] && echo "> = 10."                           #用户数是否>=10
[root@localhost ~]# FreeCC=$(free -rli | grep "Mem: " | awk "{print $4}')
[root@localhost ~]#[ $FreeCC -lt 1024] && echo ${FreeCCMB             #空闲内存是否<1024MB
275MB

2、字符串测试与逻辑测试

1、字符串比较

格式1
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2
[ -z 字符串 ]
常用的测试操作符
=:字符串内容相同
!=:字符串内容不同,!号表示相反的意思
-z:字符串内容为空

2、逻辑测试

格式1
[表达式1] 操作符 [表达式2 ]…
格式2
[命令1 操作符 命令2]…
常用的测试操作符
-a或&&:逻辑与,“而且”的意思
-o或|:逻辑或,“或者”的意思T:逻辑否
[ -d /etc ] &&[ -r /etc ] && echo “You can open it”
[ -d /etc ] ll [ -d /home ] && echo “ok”

二、if语句

1、if单分支语句

单分支语句格式
if条件测试操作
then
命令序列
fi

3种命令序列
①
if [ 3 -gt 2 ]
> then
> echo "yes"
> fi
yes
②
if [ 3 -gt 2 ]; then echo "yes"; fi
yes
③
[ 3 -gt 2 ] && echo "yes"
yes

在这里插入图片描述
在这里插入图片描述

2、if双分支语句

双分支语句的格式
if条件测试操作
then
命令序列1
else
命令序列2
fi

#!/bin/bash
netstat -natp | grep ":80" &> /dev/null
if [ $? -eq 0 ]
then
 echo "httpd服务已在运行"
else
 echo "httpd未运行,请启动服务"
 echo "systemctl restart httpd"
fi

在这里插入图片描述
在这里插入图片描述

3、if多分支语句

多分支语句格式
if条件测试操作1
then命令序列1
elif条件测试操作2
then命令序列2
else
命令序列3
fi

#!/bin/bash
read -p "请输入你的分数:" score

if [ $score -ge 85 -a $score -le 100 ]then
  echo "你的分数为: ${score} ,优秀!"
  
elif [ $score -ge 70 ] &&[ $score -lt 85 ];then
  echo "你的分数为: ${score} ,一般般"
  
elif [[ score -lt 70 && $score -ge 0 ]];then
  echo "你的分数为: ${score} ,30遍!"
else
  echo "输入有误,请重新输入!"
 fi

在这里插入图片描述
在这里插入图片描述

三、case分支语句

1、case多分枝结构

case 变量值 in 
模式一)
   命令序列
;;
模式二)
   命令序列 
;;
*)
   默认命令序列
esac

case语句注意事项
①case行首必须以单词“in”,每一模式必须以单个右括号")"结束
②双分号";;"表示命令序列的结束
③模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
最后的*)表示默认模式,其中的*相当于通配符
在这里插入图片描述

2、实例

提示用户输入考试成绩,要求成绩0-75为较差;70-85为一般般;85-100为优秀,如果输入其他字符则提示,输入有误,从新输入。
方法一

#!/bin/bash
read -p "请输入你的分数(0-100):" x

[ $x -ge 85 -a $x -le 100 ] && a="1" &> /dev/null
[ $x -ge 70 ] && [ $x -lt 85 ] && a="2" &> /dev/null
[[ $x -lt 70 && $x -ge 0 ]] && a="3" &> /dev/null

case $a in
1)
echo "你的分数为$x ,优秀"
;;

2)
echo "你的分数为$x,一般般"
;;

3)
echo "你的分数为$x,30遍!"
;;

*)
  echo "输入有误,请重新输入!"

esac

在这里插入图片描述
在这里插入图片描述
方法二

#!/bin/bash
read -p "请输入你的分数(0-100):" x

case $x in
8[5-9]|9[0-9]|100)
  echo "你的分数为${x} ,优秀"
;;

8[0-4]|7[0-9])
  echo "你的分数为${x},一般般"
;;

[0-9]|0[1-6][0-9])
  echo "你的分数为${x},30遍!"
;;

*)
  echo "输入有误,请重新输入!"

esac

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/s15212790607/article/details/114329729