20.5 shell脚本中的逻辑判断
20.6 文件目录属性判断
20.7 if特殊用法
20.8/20.9 case判断
20.5 Shell脚本中的逻辑判断
语法格式
格式1:if 条件 ; then 语句; fi
脚本形式
1 | [root@kun05 shell]# vim if1.sh |
1 | [root@kun05 shell]# sh if1.sh |
命令行形式
1 | [root@kun05 shell]# a=3 |
或者1
2
3
4
5[root@kun05 shell]# a=3
[root@kun05 shell]# if [ $a -gt 2 ]
> then echo ok
> fi
ok
格式2:if 条件; then 语句; else 语句; fi
1 | [root@kun05 shell]# vim if2.sh |
1 | [root@kun05 shell]# sh -x if2.sh |
格式3:if 条件1; then 语句1;elif 条件2; then 语句2; else 语句3; fi
意思为符合条件1则执行语句1,不符合则再判断是否符合条件2,都不符合则执行语句3
1
2
3
4
5
6
7
8
9
10
11
12
13[root@kun05 shell]# vim if3.sh
#!/bin/bash
a=2
if [ $a -eq 3 ]
then
echo "the num = 3"
elif [ $a -gt 3 ]
then
echo "the num > 3"
else
echo "the num < 3"
fi
1 | [root@kun05 shell]# sh -x if3.sh |
逻辑判断表达式:if [ $a -gt $b ]
if [ $a -lt 5 ]
if [ $b -eq 10 ]
也可以使用数学形式 if (($a>$b))
if(($a<5))
if(($b==10))
为了方便记忆 我们可以选择记忆带[]格式的表达式,但要注意[]两侧都是空格
参数 | 数学符号 | 含义 |
---|---|---|
-gt | > | 大于(greater than) |
-lt | < | 小于 (less than) |
-eq | == | 等于(equal) |
-ge | >= | 大于等于 |
-le | <= | 小于等于 |
-ne | != | 不等于 |
-eq
适用于整数数字,不能进行字符串的条件测试=
既适用于数字,又适用于字符串
可以使用 &&
||
结合多个条件if [ $a -gt 5 ] && [ $a -lt 10 ]
&&表示并且if [ $b -gt 5 ] || [ $b -lt 3 ]
||表示或者
20.6 文件目录属性判断
参数 | 含义 |
---|---|
[ -f file ] | 判断是否是普通文件,且存在 |
[ -d file ] | 判断是否是目录,且存在 |
[ -e file ] | 判断文件或目录是否存在 |
[ -r file ] | 以当前用户来判断文件是否可读 |
[ -w file ] | 以当前用户来判断文件是否可写 |
[ -x file ] | 以当前用户来判断文件是否可执行 |
判断文件是否存在
1 | [root@kun05 shell]# vim file1.sh |
第一次文件不存在则创建文件1
2
3
4[root@kun05 shell]# sh -x file1.sh
+ f=/tmp/test
+ '[' -f /tmp/test ']'
+ touch /tmp/test
第二次文件存在1
2
3
4
5[root@kun05 shell]# sh -x file1.sh
+ f=/tmp/test
+ '[' -f /tmp/test ']'
+ echo '/tmp/test exist'
/tmp/test exist
判断文件/目录是否存在
1 | #!/bin/bash |
即使已经存在了再touch则会更改文件/目录的是时间
判断文件是否可读
1 | [root@kun05 shell]# vim file2.sh |
1 | [root@kun05 shell]# sh file2.sh |
有时候为了方便可以写成下面代码1
2
3#!/bin/bash
f="/tmp/test"
[ -f $f ] && rm -f $f
它表示文件存在则执行rm语句 等同于1
2
3
4
5
6#!/bin/bash
f="/tmp/test"
if [ -f $f ]
then
rm -f $f
fi
[ -f $f ] || rm -f $f
它表示文件不存在则执行rm语句 等同于[ ! -f $f ] && rm -f $f
20.7 if特殊用法
参数 | 含义 |
---|---|
[ -z “$a” ] | 表示当变量a的值为空 |
[ -n “$a” ] | 表示当变量a的值不为空 |
判断变量是否不为空
1 | [root@kun05 shell]# vim file3.sh |
1 | [root@kun05 shell]# sh file3.sh |
其他特殊用法
使用命令来做判断条件
1
2[root@kun05 shell]# if grep -wq 'root' /etc/passwd;then echo root exist;fi
root existgrep -w 'root'
只搜索root此单词-q
不在屏幕打印出来- 使用! 在参数前 表示取反 [ ! -e file ] 表示文件不存在
- 中括号中不能使用<,>,==,!=,>=,<=这样的符号
20.8/20.9 case判断
语法格式
1 | case 变量名 in |
在case程序中,可以在条件中使用|
,表示或
的意思, 比如1
2
32|3)
command
;;
判断学生的成绩脚本
1 | [root@kun05 shell]# vim case1.sh |
1 | [root@kun05 shell]# sh -x case1.sh |