Linux中的shell编程Ⅲ——判断表达式及if语句使用

一、判断

1.符号说明

1.1 关于某个档名的文件类型判断

如test -e filename表示存在否

符号 说明
-e 该档名是否存在? (常用)
-f 该档名是否存在且为档案(file) ? (常用)
-d 该文件名是否存在且为目录(directory) ? (常用)

1.2 关于档案的权限侦测

如test -r filename表示可读否(但root权限常有例外)

符号 说明
-r 侦测该档名是否存在且具有可读的权限?
-w 侦测该档名是否存在且具有可写的权限?
-x 侦测该档名是否存在且具有可执行的权限?

1.3 关于两个整数之间的判定

例如test n1 -eq n2

符号 说明
-eq 两数值相等(equal)
-ne 两数值不等(not equal)
-gt n1大于n2 (greater than)
-lt n1小于n2 (less than)
-ge n1大于等于n2 (greater than or equal)
-le n1小于等于n2 (less than or equal)
  • 试验:创建test_eq.sh,编辑:
#!/bin/bash
#功能:条件判断

num1=100
num2=100

if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

运行:

[jingkong@muguangjingkong ~]$ sh test_eq.sh
两个数相等!

1.4 判定字符串的数据

符号 说明
test -Z string 判定字符串是否为0?若string为空字符串,则为true
test -n string 判定字符串是否非为0?若string为空字符串,则为false 注: -n亦可省略
test str1 = str2 判定str1是否等于str2,若相等,则回传true
test str1!= str2 判定str1是否不等于str2,若相等,则回传false

2.判断符号“[]”

除了使用的test之外还可以利用判断符号“[]”(就是中括号)来进行数据的判断
举例来说,如果我想要知道$HOME这个变量是否为空的,可以这样做:

# [-z "$HOME"];echo $?

使用中括号必须要特别注意,因为中括号用在很多地方,包括通配符与正规表示法等等,所以,如果要在bash的语法当中使用中括号作为shell的判断式时,必须要注意中括号的两端需要有空格符来分隔
[ “HOME=="HOME* == "MAIL” ]

注:赋值时等号两边没空格,比较或测试时运算符两边都要有空格

二、if 判断

1.单层、简单条件判断式

如果只有一个判断式要进行,

if [条件判断式];then
    当条件判断式成立,可以进行的指令工作内容;
fi <==将if反过来写,即结束if

是将多个条件写入一个中括号内可以用多个中括号来隔开,而括号与括号之间,则以&&或ll来隔开,他们的意义是:

&& 代表AND;
|| 代表or ;
  • 举例:
if["$yn" == "Y"]||["$yn^ == "y"];then
    echo "OK, continue"
    exit 0
fi

if[ "$yn" == "N"]||["$yn" == "n"];then
    echo "interrupt"
    exit 0
fi

2.多重、复杂条件判断式

在同一个数据的判断中,如果该数据需要进行多种不同的判断时,想要作多次if的判断,要用到底下的语法:

#一个条件判断,分成功进行与失败进行(else)
if[条件判断式]; than
    当条件判断式成立时,可以进行的指令工作内容; 
else
    当条件判断式不成立时,可以进行的指令工作内容;
fi

如果考虑更复杂的情况,则可以使用这个语法:

#多个条件判断(if...elif...elif...else)分多种不同情况执行
if[条件判断式一];then
    当条件判断式一成立时,可以进行的指令工作内容;
elif [条件判断式];then
    当条件判断式二成立时,可以进行的指令工作内容;
else
    当条件判断式-与均不成立时 ,可以进行的指令 工作内容;
fi

要注意的是,elif也是个判断式因此出现elif后面都要接then来处理!但是else已经是最后
的没有成立的结果了,所以else后面并没有then

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章