Shell编程之条件语句(if语句与case语句)

一:条件测试

1.1:文件测试

1.1.1:test命令

  • test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
命令基本格式
格式一:test 条件表达式
格式二:[  条件表达式  ]		    两端要有空格

1.1.2:文件测试

- 文件测试基本格式
[ 操作符 文件或目录 ]               注意两端空格
- 常用的测试操作符
-d:测试是否为目录(directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
&?:返回0表示条件成立,返回非零值表示条件不成立 
&&:逻辑与,"而且"的意思 
||:逻辑或,"或者"的意思
例如
[root@localhost ~]# test -d 3.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -f 3.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d 3.txt ] &&echo "yes"
[root@localhost ~]#
[root@localhost ~]# [ -f 3.txt ] &&echo "yes"
yes

1.2:整数值比较

- 命令基本格式
[  整数1 操作符 整数2  ]
- 常用的测试操作符		
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
[root@localhost ~]# [ 5 -le 6 ]&&echo "yes"
yes
[root@localhost ~]# [ 5 -gt 6 ]&&echo "yes"
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           2827         447        1918          12         462        2139
Swap:          3071           0        3071
[root@localhost ~]# free -m | grep  "Mem" |awk '{print $4}'
1917
[root@localhost ~]# freeCC=$(free -m |grep "Mem" |awk '{print $4}')
[root@localhost ~]# echo $freeCC
1917
[root@localhost ~]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 10000 ] && echo "yes"
[root@localhost ~]# 
[root@localhost ~]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 100 ] && echo "yes"
yes

1.3:字符串与逻辑测试

1.3.1:字符串比较

- 常用的格式
格式一:[ 字符串1 = 字符串2 ]	            
       [ 字符串1  = 字符串2 ]
格式二:[ -z 字符串 ]
- 常用的测试操作符
=:第一个字符串与第二个字符串内容相同
=:第一个字符串与第二个字符串内容不同,!号表示相反的意思
-z:检查字符串内容是否为空,对于未定义或赋予空值的变量将视为空串
[root@localhost ~]# [ $LANG != "en_US" ] && echo "yes"
 yes
[root@localhost ~]# [ $LANG = "en_US" ] && echo "yes"
[root@localhost ~]# vim jj.sh 
#!/bin/bash
read -p "请输入目录位置:" MOUNT_DIR
if [ ! -d $MOUNT_DIR ]                判断是否是目录,取反
then
  mkdir -p $MOUNT_DIR
fi
[root@localhost ~]# sh jj.sh 

在这里插入图片描述

1.3.2:逻辑测试

- 基本格式
格式一: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式二: 命令1 操作符 命令2 ...
- 常用的测试操作符
&&:逻辑与,“而且”的意思,使用test命令测试时,可将“&&”改为“-a”
||:逻辑或,“或者”的意思,使用test命令测试时,可将“||”改为“-o”
!:逻辑否
[root@localhost ~]# [ -d /~/demo ] && echo "yes"
yes
[root@localhost ~]# [ ! -d /~/demo ] && echo "yes"
[root@localhost ~]# [ 1 -eq 1 ] && [ 2 -eq 2 ] && echo "yes"
yes
[root@localhost ~]# [ 1 -eq 1 -a 2 -eq 2 ] && echo "yes"		-a和-o也可使用在[]中,更加方便
yes

1.3.3:一元运算符,二元运算符和三元运算符

一元运算符

  • 带一元运算符的表达式遵循从右到左的结合性,常见的一元表达式:++一元表达式,–一元表达式

  • 前缀自增运算符与前缀自减运算符

​ 在一元表达式的前面添加运算符++或–后得到的表达式是一个一元表达式。操作数将被加1(++)或减1(–),表达式的值是经过加1、减1 以后的值。操作数必须是一个左值。

  • i=1;

i++: i=$i+1

i=i++:先赋值在运算

i=++i:先自加在赋值

i=–i:先自减在赋值

[root@localhost ~]# i=1
[root@localhost ~]# echo $i
1
[root@localhost ~]# let i=++i
[root@localhost ~]# echo $i
2
[root@localhost ~]# let i+=2 	'相当于i=i+2'
[root@localhost ~]# echo $i
4

二元运算符

a + b = c

三元运算符

条件&&结果1 || 结果2

二:If语句

2.1:if单分支语句

单分支结构(基本格式)
if 条件测试操作
	then  命令序列
fi
例如
单分支结构
if 磁盘已用空间>80%
	then  报警
fi
exit 1 异常退出
exit 0 正常退出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IJV4LNtj-1595126662912)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200717153601592.png)]

实例
[root@localhost opt]# vim aa.sh
#!/bin/bash
read -p "请输入目录位置:" file
if 
        [ ! -d $file ]
        then
        mkdir -p $file
fi
[root@localhost opt]# sh aa.sh
请输入目录位置:kevin
[root@localhost opt]# ls
30.txt  aa.sh  httpd-2.4.25  httpd-2.4.25.tar.gz  kevin  opt  opt.zip

2.2:if双分支语句

双分支结构(基本格式)
if 条件测试操作
	then  命令序列1
	else  命令序列2
fi
例如
双分支结构
if 80端口是否在监听
	then  网站服务已在运行
	else  启动httpd服务
fi

在这里插入图片描述

实例

[root@localhost opt]# sh bb.sh
#!/bin/bash
read -p "你输入你的分数:" score
if 
        [ $score -ge 60 ]
        then
        echo "恭喜通过考试"
        else
        echo "很遗憾,希望你继续努力"
fi
[root@localhost opt]# sh bb.sh
你输入你的分数:95
恭喜通过考试
[root@localhost opt]# sh bb.sh
你输入你的分数:18
很遗憾,希望你继续努力

2.3:if多分支语句

多分支结构(基本格式)
if 条件测试操作1
	then  命令序列1
elif  条件测试操作2
	then  命令序列2
else
	命令序列3
fi
例如
多分支结构
if 分数为85~100之间
	then  判为优秀
elif  分数为70~84之间
	then  判为合格
else
	判为不合格
fi

在这里插入图片描述

实例
[root@localhost opt]# vim score.sh
#!/bin/bash
read -p "请输入你的分数:" score
if 
        [ $score -ge 80 ] && [ $score -le 100 ];then
        echo "成绩优秀"
        elif
        [ $score -ge 60 ] && [ $score -le 79 ]; then
        echo "成绩良好"
        else
        echo "请找我面批"
fi
[root@localhost opt]# sh score.sh 
请输入你的分数:85
成绩优秀
[root@localhost opt]# sh score.sh 
请输入你的分数:61
成绩良好
[root@localhost opt]# sh score.sh 
请输入你的分数:59
请找我面批

三:Case语句

3.1:case多分支结构(基本格式)

case 变量值 in
模式1)
	命令序列1
	;;
模式2)
	命令序列2
	;;
*)
	默认命令序列
esac
例如
case 分数 in
85~100)
	判为优秀
	;;
70~84)
	判为命令
	;;
*)
	判为不合格
esac

在这里插入图片描述

3.2:case多分支语句

[root@localhost ~]# vim kevin.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:"  KEY
case "$KEY" in
	[a-z]|[A-Z])                            匹配任意字母
		echo "您输入的是字母"
		;;
	[0-9]                                     匹配任意数字
		echo "您输入的是数字"
		;;
	*)                                          匹配任意字符
		echo "你输入的是其他字符"
esac
实例
[root@localhost ~]# vim baimi.sh 
#!/bin/bash
read -p "请输入的成绩:" sorce
read -p "您的性别是:" sex
case $sex in
  female)
  case $sorce in
    [0-9]|10)                
    echo "进入决赛"
    ;;
    *)
    echo "未进决赛"
   esac
  ;;
  male)
  case $sorce in
    [0-9]|10)
    echo "进入决赛"
    ;;
    *)
    echo "未进决赛"
   esac
   ;;
esac
[root@localhost ~]# sh baimi.sh 
请输入的成绩:9
您的性别是:male
进入决赛

猜你喜欢

转载自blog.csdn.net/m0_47219942/article/details/107441923