赞
踩
在shell的各种条件结构和流程控制结构中都要进行各种测试,然后根据测试结果执行不同的操作,有时候也会与 if 等条件语句相结合,来完成测试判断,以减少程序运行错误。
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或
者判断文件是否存在,是否可读、可写、可执行等
文件测试操作符 | 说明 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或者文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-L | 测试是否为链接文件 |
-b | 测试是否为设备文件 |
-c | 测试是否为字符设备文件 |
-r | 测试当前用户是否有权读取 |
-w | 测试当前用户是否有权写入 |
-x | 测试是否设置有可执行权限 |
-s | 测试存在且文件大小为空 |
-a、&& | 逻辑与,且 |
-o 、|| | 逻辑或,或 |
-n | 测试是否为非空 |
-z | 测试是否为空值 |
[root@localhost ~]# a=shenjie [root@localhost ~]# [ -z $a ] && echo y || echo n n [root@localhost ~]# [ -n $a ] && echo y || echo n y [root@localhost ~]# [ -n ] && echo y || echo n y [root@localhost ~]# [ -z ] && echo y || echo n y [root@localhost ~]# a= [root@localhost ~]# [ -n $a ] && echo y || echo n y [root@localhost ~]# [ -z $a ] && echo y || echo n y [root@localhost ~]# [ -n "$a" ] && echo y || echo n n
整数值比较指的是根据给定的两个整数值,判断第一个数与第二 个数的关系,如是否大于、等于、小于第二个数实际应用非常广泛
参数 | 含义 |
---|---|
-eq | 第一个数等于第二个数 |
-ne | 第一个数不等于第二个数 |
-gt | 第一个数大于第二个数 |
-lt | 第一个数小于第二个数 |
-le | 第一个数小于或等于第二个数 |
-ge | 第一个数大于或等于第二个数 |
[root@localhost ~]# [ 3 -eq 6 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -eq 3 ] && echo y || echo n
y
[root@localhost ~]# [ 3 -ne 3 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -lt 3 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -gt 3 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -ge 3 ] && echo y || echo n
y
[root@localhost ~]# [ 3 -le 3 ] && echo y || echo n
y
条件测试语句 | 说明 |
---|---|
test 测试表达式 | 利用test命令进行条件测试表达式的方法 |
[ 测试表达式 ] | 通过[ ]进行条件测试表达式的方法,和test命 令用法相同 |
[[ 测试表达式 ]] | 通过[[ ]]进行条件测试表达式的方法,比test和[ ]更新 |
(( 测试表达式 )) | 通过(())进行条件测试表达式的方法,一般用于if语句里 |
注:(())不能用于文件测试,文件测试一般常用的是 []
不分主次,按顺序逐个判断,判断的是前面的结果
&& 如果前面是正确的,执行
|| 如果前面是错误的,执行
; 挨个儿执行
[root@localhost ~]# test a == b [root@localhost ~]# echo $? 1 [root@localhost ~]# test a != b [root@localhost ~]# echo $? 0 [root@localhost ~]# [ a == b ] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ a != b ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ a == b ] && echo y || echo n n [root@localhost ~]# [ a != b ] && echo y || echo n y [root@localhost ~]# [ a != b ] && echo y y [root@localhost ~]# [ a == b ] && echo y [root@localhost ~]# echo $? 1 [root@localhost ~]# [ a == b ];echo y y [root@localhost ~]# [ a != b ];echo y y
只有在“条件成立”时,才会执行相应的代码
if [条件判断];then
command
fi
#或
if [条件判断]
then
command
fi
针对“条件成立”“条件不成立”两种情况,分别执行相应的代码
if 条件判断
then
命令
else
命令
fi
#或
if 条件判断;then
命令
else
命令
fi
嵌套使用,进行多次判断
if 条件测试操作
then
命令序列
elif 条件测试操作
then
命令序列
else
命令序列
fi
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break,其中“;;”不是跳出循环,是不在去匹配下面的模式
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
……
*)
默认命令序列
esac
例1:输出菜单
#!/bin/bash read -p "请输入今天星期几": week case $week in 周一) echo "吃水饺";; 周二) echo "吃面条";; 周三) echo "吃牛排";; 周四) echo "吃馒头";; 周五) echo "吃烧饼";; 周六) echo "吃油条";; 周日) echo "吃豆腐脑";; *) echo "输入错误";; esac
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。