第七章 shell学习之退出、测试、判断及操作
退出状态$?记录了上一个命令的退出状态:
0 运行成功
1~125 运行失败
126 找到命令但无法执行
127 未找到要运行的命令
>128 命令被系统强制结束
测试
两种方式:
test expression
[ expression ]
注意[]的两边必须要空格
比较条件为真返回0,假返回非0(C语言为真返回非0正整数,假返回0)
算数比较运算符
n1 -eq n2 等于返回0,不等于返回1
n1 -gt n2
n1 -ge n2
n1 -le n2
n1 -lt n2
n1 -ne n2 不等于返回0,等于返回1
例:
# n1=15
# [ "$n1" -eq 15 ]
# echo $?
0
# test "$n1" -eq 15
# echo $?
0
# [ $n1 -ne 15 ]
# echo $?
1
# test $n1 -ne 15
# echo $?
1
注意:只能比较整数,不能比较浮点数
字符串运算符
方式1:(只能用test运算符)
-n string 测试字符串string是否不为空(不为空是真,值为0,为空值为1),-n为默认,可省略
-z string 测试字符串string是否为空(为空是真,值为0,不为空值为1)
方式2:
string1=string2 测试string1是否与string2相同
string1!=string2 测试string1是否与string2不同
例:
# str1="hello"
# test -n "$str1"
# echo $?
0
# test -z "$str1"
# echo $?
1
# [ "$str1"!=" " ]
# echo $?
0
# [ "$str1" -n " " ] #方式1不能用于[]
bash: [: -n: binary operator expected
# test "$str1"!=" " #方式2通用
# echo $?
0
文件操作符
test file_operator File
[ file_operator file ]
file_operator:
-d 是否为目录
-f 是否为普通文件
-e 是否存在
-r 是否可读
-w 是否可写
-x 是否可执行
-s 长度是否不为0
-L 是否符号化链接
如:
[ -d clc.txt ]
test -d clc.txt
echo $?
逻辑运算符
! 非
-a 与
-o 或
[ ! -e clc.txt ] #clc.txt不存在为真(值为0)
[ -e clc.sh -a -x clc.sh ]#clc.sh存在并且可执行则结果为真
判断
1.
if expression
then
...
fi
2.
if expression; then
...
fi
3.
if expression1
then
...
else
...
fi
4.
if expression1
then
...
elif expression2
then
...
else
...
fi
expression为表达式,如[ -e clc.sh -a -x clc.sh ]
case结构
case variable in
value1)
...;;
value2)
...;;
*)
...;;
esac
算术运算符
+;-;*;/;%;**(幂运算)
例:
let "z=8/5*5"
echo $z #结果为5,因为8/5取整结果为5
位运算符
> 右移
| 按位与
~ 按位非
^ 按位异或
例:
# let "value=~8"
# echo $value
-9
# let "value=12|8"
# echo $value
12
# value=8
# let "value
页:
[1]