逻辑值,0为真,非0为假
在shell中,一个逻辑表达式的逻辑值是真是假用0和非0来表示,其中0表示真,非0表示假。
逻辑表达式的逻辑值只能是正数,不能是其他的类型。
测试逻辑表达式的值
在shell中,测试一个逻辑表达式的值有两种方法,一种是使用test命令来测试,另一种是使用中括号[](建议使用中括号)。
1、test expression
2、[ expreesion ]
在第2中结构中,符号[是启动测试命令,要求在expreesion 后面要有一个]与其配对,同时中括号与expreesion 要有空格,最后整个表达式逻辑值0表示真,非0表示假。
演示示例:
test 3 -eq 5 #判断3是否等于5
echo $? #输出结果,为假
1
test 3 -eq 3 #判断3是否等于3
echo $? #输出结果,为真
0
测试文件类型
-e :判断文件或目录是否存在,如:[ -e /etc/passwd ]
-f :判断文件是否存在而且为普通文件,如:[ -f /etc/passwd ]
-d:判断目录是否存在,如:[ -d /etc/ ]
-r :判断文件是否可读, 如:[ -r /etc/passwd ]
-w :判断文件是否可写,如:[ -w /etc/passwd ]
-x :判断文件是否可执行,如:[ -x /etc/passwd ]
-L :判断文件是否是符号链接文件,如:[ -x /etc/passwd ]
-c :判断文件是否是字符文件,如:[ -x /etc/passwd ]
-b :判断文件是否是块文件,如:[ -b /dev/null ]
测试字符串
-z :判断字符变量值是否为空,变量值为空,返回0为true,变量值非空,返回1为false,变量要用双引号括起来,如:[ -z “name"]−n:判断字符变量值是否为空,变量值为空,返回1为false,变量值非空,返回0为true,变量要用双引号括起来,如:[−n"name" ] -n :判断字符变量值是否为空,变量值为空,返回1为false,变量值非空,返回0为true,变量要用双引号括起来,如:[ -n "name"]−n:判断字符变量值是否为空,变量值为空,返回1为false,变量值非空,返回0为true,变量要用双引号括起来,如:[−n"name” ]
string1 = string2 :测试两个字符串是否相等,注意等号两边有空格,如:[ “hhjshds” = “sdswd”]、[ “string1"="string1" = "string1"="string2”]
string1 != string2 :测试两个字符串不相等,注意等号两边有空格,如:[ “hhjshds” != “sdswd”]、[ “string1"!="string1" != "string1"!="string2”]
测试数值
-eq :Equal, 相等, 如 [ num1 -eq num2 ]
-ne :Not Equal , 不相等, 如 [ num1 -ne num2 ]
-lt :Lesser Than, 小于, 如 [ num1 -lt num2 ]
-le :Lesser or Equal, 小于等于, 如 [ num1 -le num2 ]
-gt :Greater Than, 大于, 如 [ num1 -gt num2 ]
-ge :Greater or Equal, 大于等于, 如 [ num1 -ge num2 ]
(大于符号>、小于符号<)
逻辑运算符
-a :与的关系,两个expression同时为真则表达式为真,如 [ expression1 -a expression2 ]
-o :或的关系,两个expression有一个为真则表达式为真,如 [ expression1 -o expression2 ]
!:取反,expression若为真,则整个表达式为假,expression若为假,则整个表达式为真,如 [ !expression ]
分号;
Linux中分号表示一条命令的结束,默认回车符也是一条命令的结束,如下:
[root@localhost~]# ls -al ;echo “I am good boy” #使用了符号,当然如果你想连接两条命令还可以使用&&符号
if语句结构
结构1、
if [ expreesion ]
then
commands
…
elif [ expreesion ]
then
command
…
else
commands
…
fi
为了美观,我还可以把then放在与if同一行,但要加分行,如下:
结构2、
if [ expreesion ] ;then
commands
…
elif [ expreesion ] ;then
command
…
else
commands
…
fi
小结:elif语句和else语句不是必须的;if语句是可以嵌套的,即在任何位置都可以再嵌套一个if语句;if语句结尾要用fi来表示结束。
if语句的执行顺序
先判断第一个if 表达式的逻辑值,如果为true,则执行对应的commands后直接结束整个if语句,如果为false,则继续判断elif 语句,遇到elif 语句表达式为true的就进入执行对应的commands,执行完就结束掉整个if语句,如果elif 语句表达式都判断完了也没有true的,则就执行else语句对应的commands,然后就结束整个语句了。
演示示例:
if [ -f /etc/passwd ];then
ehco “这是一个密码文件”
else
echo "糟了,文件不存在’
#!/bin/bash
read -p “请输入一个整数:” num
if [ $num -ge 80 -a num−le100];thenecho"这个数大于或等于80,小于或等于100."echo"是的,这个数是:num -le 100 ];then echo "这个数大于或等于80,小于或等于100." echo "是的,这个数是:num−le100];thenecho"这个数大于或等于80,小于或等于100."echo"是的,这个数是:{num}"
elif [ $num -ge 50 -a num−le100];thenecho"这个数大于或等于50,小于或等于79."echo"是的,这个数是:num -le 100 ];then echo "这个数大于或等于50,小于或等于79." echo "是的,这个数是:num−le100];thenecho"这个数大于或等于50,小于或等于79."echo"是的,这个数是:{num}"
elif [ num−le49];thenecho"这个数小于或等于49."echo"是的,这个数是:num -le 49 ];then echo "这个数小于或等于49." echo "是的,这个数是:num−le49];thenecho"这个数小于或等于49."echo"是的,这个数是:{num}"
else
echo “这个数大于100”
echo “这个数是:${num}”
fi