飞道的博客

自动化运维必须要学的Shell脚本之——条件语句的详细解读

431人阅读  评论(0)

1.test命令

测试表达式是否成立,若成立返回0,否则返回其他数值。

格式1	test 条件表达式
格式2	[ 条件表达式 ]

实例:比较整数的大小是否正确

实例:判断目录是否存在

test模块提供了在if-then语句中测试不同条件的途径,如果test命令中列出的条件成立,test命令就会退出并返回状态码0,这样if-then语句就与其他编程语言中的if-then语句以类似的方式工作了,如果条件不成立,test命令就会退出并返回非零的退出状态码,这使得if-then语句不会再被执行。

test命令的格式非常简单:test 表达式
表达式是test命令要测试的一系列参数和值,在if-then语句中,test命令看起来是这样的:

if test 表达式
then
	命令
fi

如果不写test命令的表达式部分,它会以非零的退出状态码退出,并执行else语句块

当我们加入一个条件的时候,test命令会测试该条件,这里我门加入一个变量var,并使用test判断变量中是否有内容。

2.文件测试

1.格式:操作符 文件名或者目录名
2.常用的测试操作符

  • -d∶ 测试是否为目录(Directory)
  • -e∶ 测试目录或文件是否存在(Exist)
  • -f∶ 测试是否为文件(File)
  • -r∶ 测试当前用户是否有权限读取(Read)
  • -w∶ 测试当前用户是否有权限写入(Write)
  • -x∶测试当前用户是否有权限执行(eXcute)
  • -L∶测试是否为软链接文件

实例:常用的测试操作符

3.整数值比较

1.格式:[ 整数1 操作符 整数2 ]
2.常用的测试操作符

  • -eq∶ 等于(Equal)
  • -ne∶ 不等于(Not Equal)
  • -gt∶ 大于(Greater Than)
  • -It∶ 小于(Lesser Than)
  • -le∶ 小于或等于(Lesser orEqual)·
  • -ge∶ 大于或等于(Greateror Equal)

实例:查询当前目录下的文件数是否大于10,如果大于,则进行提示。

实例:查看系统内存是否低于1024M,如果低于则提示。

4. 字符串比较

1.格式:

[ 字符串1 = 字符串2 ] 			#判断是否相等
[ 字符串1 = 字符串2 ] 			#判断是否不等

2.常用的测试操作符

  • =∶ 字符串内容相同
  • !=∶ 字符串内容不同,!号表示相反的意思
  • z∶字符串内容为空

实例:判断当前系统语言环境是否为“us.en”,如果不是则提示。

实例:测试用户输入的是否为yes,如果是的话,则进行文件覆盖(这里仅代表输出问文本覆盖,并不是实际操作,实际操作需要写执行命令)

5. 逻辑测试

1.格式:

格式1	[ 表达式1 ] 操作符 [ 表达式2 ]
格式2	命令1 操作符 命令2

2.常用的测试操作符

  • -a或&&∶ 逻辑与,"而且"的意思
  • -o或∶ 逻辑或,"或者"的意思
  • !∶逻辑否

6. if语句

6.1 单分支结构

如果只有一个判断式要进行,那么我们可以使用单分支的if语句

1.格式:

if [ 条件判断式 ]; than
	当条件判断成立时,可以进行的命令工作内容
fi 					#这里将if反过来写,结束if语句的意思

2.原理图:

实例:使用单分支if语句判断test文件是否存在

6.2 双分支结构

在同一个数据的判断中,如果该数据需要进行两种不同的判断,我们就需要双分支if语句了:

1.格式:

if [ 条件判断式 ]; than
	当条件判断成立时,可以进行的命令工作内容
else	
	当条件判断不成立时,可以进行的命令工作内容
fi 		

2.原理图:

实例:判断用户输入的是否为yes

6.3 多分支结构

如果数据需要进行多种不同的判断,则可以使用多分支结构
1.格式:

if [ 条件判断式 ]; than
	当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]; than
	当条件判断成立时,可以进行的命令工作内容
else	
	当上面的条件判断都不成立时,可以进行的命令工作内容
fi 		

2.原理图:

实例:判断用户输入的为yes还是no,或者是其他错误情况。

7. case语句结构

1.格式:

case 变量名称 in
“第一个变量内容”
	程序段
	;;
“第二个变量内容”
	程序段
	;;
*
	不包含第一个变量内容与第二个变量内容的其他程序执行段
	默认程序段
	;;
esac		

案例:判断用户掌握哪一种编程语言。


转载:https://blog.csdn.net/weixin_45551608/article/details/116594872
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场