Shell---if条件语句(if-test)

狂风中的少年 提交于 2020-02-15 12:52:02

一、if语句

if condition;then
   statement(s)
fi
#注意,conditon后面的分号;当if与then同行时,这个分号是必须的,否则会出现语法错误

示例:

#!/bin/bash
user=kiosk
if grep $user /etc/passwd;then
    echo "Hello $user"
fi

if date;then
    echo "Hello date"
fi

二、if-else 语句

如果有两个分支,就可以使用if else 语句
if condition
then
	statement1
else
	statement2
fi
如果condition成立,那么then后面的statement1将会被执行;
否则,执行else后面的statement2语句

示例1:

#!/bin/bash
read num1
read num2
if (($num1 == $num2))
then
	echo $num1和$num2相等
else
	echo $num1和$num2不相等

fi

在这里插入图片描述

三、if-elif-else语句

if condition1
then
	statement1
elif condition2
then
	statement2
elif condition3
then
	statement3
......
else
	statementn
fi
注意:if和eilf后面后要跟then
整条语句的执行逻辑为:
如果condition1成立,那么就执行if后面的statement1;
如果condition1不成立,就继续执行elif,判断condition2;
以此类推
如果所有的if和elif判断都不成立,就进入最后的else,执行statementn

例:

#!/bin/bash
read age
if (($age<=2));then
echo 婴儿
elif (($age>=3 && $age<=8));then
echo 幼儿
elif (($age>=9 && $age<=17));then
echo 少年
elif (($age>=18 && $age<=40));then
echo 青年
elif (($age>=41 && $age<=60));then
echo 中年
else
echo 老年
fi

在这里插入图片描述

四、if-test

1、test命令

test是shell内置命令,用来检测某个条件是否成立
test通常和if语句一起使用,并且大部分if语句都依赖test
shell test命令的用法有两种:

第一种:
test expression
第二种:
[ expression ]

注意:

1.当test判断expression成立时,退出状态为0,否则为非0值
2.[ ]和expression的两边都有空格,这个空格是必须的,否则会导致语法错误
3.[ ]写法更简介,使用频率更高

test命令可以判断三类条件:

  • 数值比较
  • 字符串比较
  • 文件比较

2、if–test之数值比较

test命令的数值比较功能:
在这里插入图片描述

#!/bin/bash
#数值条件测试可以用在数字和变量上

val1=10
val2=20

if [ $val1 -gt 5 ]					#检查变量val1是否大于5 
then
	echo "$val1 is greater than 5"	#大于5时执行此行代码
fi

if [ $val1 -eq $val2 ] 				#检查两个变量是否相等
then
	echo "The values are equal"
else
	echo "The values are different"
fi

在这里插入图片描述

#!/bin/bash
val1=`echo "scale=4;10 / 3 " | bc`
echo "The test value is $val1"
#不能在test命令中使用浮点值
if [ $val1 -gt 3 ]
then	
	echo "The result is larger than 3"
fi

在这里插入图片描述

3、if-test之字符串比较

在这里插入图片描述

  • 比较字符串是否相等
[ str1 = str2 ]
[ str1 != str2 ]
#!/bin/bash
#比较字符串是否相等
testing=root

if [ $USER = $testing ]
then
        echo "Welcome $testing"
else
        echo "This is not $testing"
fi         

在这里插入图片描述

注意:test比较字符串相等性时会将所有的标点和大写也考虑在内

  • 比较字符串的大小
[ str1 < str2 ]
[ str1 > str2 ]

注意:这里比较的是字符串,而不是字符串的长度

字符串大小的比较遵循字典顺序,规则如下:
1.如果第一个字符串是第二个字符串的前缀,那么第一个小(比如a小于about)
2.从字符串的开头比较,按照字母顺序,a比b小(比如about小于ball)
3.如果第一个字符相同,再比较第二个(比如about小于above)

#!/bin/bash

val1=aboot
val2=above
#大于小于符号必须转义
#否则shell会把它们当作重定向
if [ $val1 \> $val2 ]
then
	echo "$val1 is greater than $val2"
else
	echo "$val1 is less than $val2"
fi

在这里插入图片描述

  • 比较字符串的长度
[ -n str1 ]		#检查str1的长度是否非0
[ -z str1 ]		#检查str1的长度是否为0 
#!/bin/bash
val1=testing
val2=''

if [ -n "$val1" ]
then
	echo "The string '$val1' is not empty"
else
	echo "The string '$val1' is empty"
fi

if [ -z "$val2" ]
then
	echo "The string '$val2' is empty"
else
	echo "The string '$val2' is not empty"
fi

if [ -z "$val3" ]
then
	echo "The string '$val3' is empty"
else
	echo "The string '$val3' is not empty"
fi

在这里插入图片描述

4、if-test之文件比较

在这里插入图片描述

  • 检查file是否存在并是一个目录
#!/bin/bash

#检查file是否存在并是一个目录
if [ -d $HOME ]
then
	echo "Your HOME directroy exists"
	cd $HOME
	ls -a
else
	echo "There is a problem with your HOME directory"
fi

在这里插入图片描述

  • -r检查文件是否存在并可读
#!/bin/bash

# -r检查文件是否存在并可读

pwdfile=/etc/shadow

if [ -f $pwdfile ]		#先检查$pwdfile是否存在并是一个文件
then 
	if [ -r $pwdfile ]	#满足上面条件再检查它是否可读
	then
		tail $pwdfile
	else
		echo "Sorry,Permission denied.unable to read"
	fi
else
	echo "Sorry.the file $pwdfile does not exist"	
fi

在这里插入图片描述

  • -s检查文件是否存在并为非空
#!/bin/bash

# -s检查文件是否存在并为非空

file=test
touch $file

if [ -s $file ] 
then
	echo "The file $file exists and has data in it"
else
	echo "The $file exists and is empty"
fi

在这里插入图片描述

  • 使文件不为空,进行检测

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!