if语句
if语句根据不同的条件执行不同的命令,有三种不同的形式,不过都是以if
开始,以fi
结束:
1 | # 形式一 |
在第一种形式中,如果condition
的结果为真,则执行commands
,否则不执行任何操作。
在第二种形式中,如果condition
的结果为真,则执行commands1
,否则执行commands2
。
在第三种形式中,如果condition1
的结果为真,则执行commands1
,否则判断condition2
,如果结果为真,则执行commands2
,否则不执行任何操作。
关于condition
先举个栗子,如果我们在C语言中要判断一个变量是不是大于100,可能会直接写if ( a > 100 )
,直接用数学表达式来表示条件,可是在shell当中,事情变得有些不一样。
test
命令
在shell的condition
中,需要用test
命令来获取condition
的结果,test
命令有两种形式:
1 | # 形式一 |
一般在if
语句中,比较多的采用形式二,需要注意的是,在[
后面一定要跟一个空格,在]
前面也需要有一个空格。
比较运算
shell中的比较运算也与C语言等编译型语言有些不同:
字符串比较:
- 内容相同 -
stra = strb
- 内容不同 -
stra != strb
- 字符串长度不为零 -
-n str
- 字符串长度为零 -
-z str
- 内容相同 -
数字比较
- 相等 -
int1 -eq int2
- 不等 -
int1 -ne int2
- 大于 -
int1 -gt int2
- 小于 -
int1 -lt int2
- 大于等于 -
int1 -ge int2
- 小于等于 -
int1 -le int2
结论
综上所述,在shell中如果要执行类似C语言中
if ( a > 100 )
的判断,应当写作if [ $a -gt "100" ]
。一个完整的判断变量大小的shell脚本:
1
2
3
4
5
6
7
8
a=50
if [ $a -gt "100" ];then
echo "a is greater than 100"
else
echo "a is not greater than 100"
fi- 相等 -
一些其它判断
关于文件的判断
-d file
- 判断是否是目录-e file
- 判断文件是否存在-f file
- 判断文件是否存在并且是正规文件-L file
- 判断文件是否为链接-r file
- 判断文件是否对当前用户可读-w file
- 判断文件是否对当前用户可写-x file
- 判断文件是否对当前用户可执行file1 -nt file2
- 判断file1是否比file2新file2 -ot file2
- 判断file1是否比file2旧例如,判断
/etc/
目录下是否存在shadow
文件:1
2
3
4
5
6
7
if [ if "/etc/shadow" ]; then
echo "shadow file exists."
else
echo "no shadow file."
fi
判断是否超级用户
1 |
|