测试用法
- 格式:
test 表达式
或
[ 表达式 ]
条件为
真
时返回0值
,条件为假
返回非0值
[
后和]
前的空格是必不可少的
- 比较运算符:
-eq
相当于=
-ge
相当于>=
-gt
相当于>
-le
相当于<=
-lt
相当于<
-ne
相当于!=
- 测试demo:
$ test 1 -eq 1
$ echo $?
0
$ test 1 -eq 2
$ echo $?
1
测试只有一个字符串,无操作符时:返回值都为0,例:
$ test 1
$ echo $?
0
$ test 0
$ echo $?
0
$ test 001021
$ echo $?
0
$ [ 344 ]
$ echo $?
0
- 字符串运算符
string
测试字符串是否不为空
-n string
同上,测试字符串是否不为空(不建议使用-n 这种,在我manjaro系统中返回值不正常)
-z string
测试字符串是否为空
string1 = string2
测试两个字符串是否相等
string1 != string2
测试两个字符串是否不相等
注意=和!=两侧必须有空格,否则当成一个字符串测试是否为空
$ test ""
$ echo $?
1
$ test -n ""
$ test -n "" ; echo $?
1
$ test "" ; echo $?
1
$ test "hhh" = "hhh"
$ echo $?
0
$ test "hhh" = "hhh "
$ echo $?
1
$ test "hhh"!="hhh"
$ echo $?
0
- 文件操作符
-d
file 是否为目录
-e
file 是否存在
-f
file 是否为普通文件
-r
file 是否进程可读
-s
file 是否长度不为0
-w
file 是否可写
-x
file 是否可执行
-L
file 是否为符号化链接(L不可小写) - 逻辑运算符
! 表达式
取反
表达式1 -a 表达式2
同时为真
表达式1 -o 表达式2
有一个为真
判断
if后面跟的表达式有两种形式:
(( 表达式 ))
这里的表达式中运算符需要使用普通运算符
(==、<、>=等)
[ 表达式 ]
这里的表达式中运算符需要使用测试运算符
(-eq、-lt、-ge等)
一个demo即可说明用法:
$ cat test.sh
#!/bin/bash
echo "输入一个数进行测试"
read num
if [ 1 -eq $num ] ; then
echo 输入了1
exit 0
elif [ $num -lt 5 ]
then
echo "大于1小于5"
exit 2
else
case "$num" in
5)
echo "输入了5";;
6)
echo "输入了6";;
7)
echo "输入了7";;
*)
echo "大于7";;
esac
exit 3
fi
$ ./test.sh ; echo '$?:'$?
输入一个数进行测试
1
输入了1
$?:0
$ ./test.sh ; echo '$?:'$?
输入一个数进行测试
3
大于1小于5
$?:2
$ ./test.sh ; echo '$?:'$?
输入一个数进行测试
6
输入了6
$?:3
$ ./test.sh ; echo '$?:'$?
输入一个数进行测试
8
大于7
$?:3
需要注意的是case 每一个匹配条件的执行后面必须有;;,不然会提示错误,我之前以为是继续执行下一个。
- 算数及位运算符
大部分与c语言一致,以下比较特别
** 幂运算
~ 按位非
^ 按位异或
- 不同进制数字表示
2进制表示:
$ let "num=2#10" ; echo $num
2
8进制表示:
$ let "num=010";echo $num
8
$ let "num=8#10" ; echo $num
8
16进制表示:
$ let "num=16#10" ; echo $num
16
#
用来表示的进制更广,任何进制都可以