1. if-test
test是shell内置命令,用来检测某个条件是否成立。test通常和if语句一起使用,并且大部分if语句都依赖test。
test命令有很多选项,可以进行数值、字符串和文件三个方面的检测。
shell test 命令的用法为:test expression
当test判断expression成立时,退出状态为0,否则为非零值。
test命令也可以简写为[],他的用法为:[ expression ]
,注意[]和expression之间的空格,这两个空格时必须的,否则会导致语法错误。[]的写法更加简洁,比test使用频率高。
test命令可以判断3类条件:数值比较,字符串比较,文件比较。
2. test的数值比较
test命令的数值比较功能
比较 | 描述 |
---|---|
n1 -eq n2 | 检查n1是否与n2相等 |
n1 -ge n2 | 检查n1是否大于或等于n2 |
n1 -gt n2 | 检查n1是否大于n2 |
n1 -le n2 | 检查n1是否小于或等于n2 |
n1 -lt n2 | 检查n1是否小于n2 |
n1 -ne n2 | 检查n1是否不等于n2 |
#!/bin/bash
# 数值条件测试可以用在数字和变量上
read val
read val1
if [ $val -eq $val1 ]
then
echo "The test value $val is equal $val1"
elif [ $val -gt $val1 ]
then
echo "The test value $val is greater than $val1"
else
echo "The test value $val is lower than $val1"
fi
结果:
12
33
The test value 12 is lower than 33
33
33
The test value 33 is equal 33
注意:不能在test中使用符点值
3. test的字符串比较
比较 | 描述 |
---|---|
str1 = str2 | 检查str1是否和str2相同 |
str1 != str2 | 检查str1是否和str2不同 |
str1 < str2 | 检查str1是否比str2小 |
str1 > str2 | 检查str1是否比str2大 |
-n str1 | 检查str1的长度是否非0 |
-z str1 | 检查str1的长度是否为0 |
$USER的用法:
[kiosk@foundation60 ~]$ echo $USER
kiosk
#!/bin/bash
# 字符串的相等性
# 比较字符串相等性的时候,test的比较会将所有的标点和大写也考虑在内
luser=root
if [ $USER=$luser ]
then
echo "登录成功"
else
echo "登录失败"
fi
结果:
登录成功
# 大于小与符号必须转义
# 否则shell会把他们当作重定向符号,从而把字符串当作文件名
val1=zjy
val2=ljl
if [ $val1 \> $val2 ];then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
结果:
zjy is greater than ljl
==注意:==字符串的比较遵循字典顺序,规则如下:如果第一个字符串是第二个字符串的前缀,那么第一个小,比如a小于about。从字符串的开头比较,按照字母顺序,a比b小,比如about小于ball。如果第一个字符相同,在比较第二个,比如about小于above。总之,如果你查字典,字典排在前面的单词比后面的单词小。
#!/bin/bash
# 注意:没有被定义的值也会有输出结果
val1=zjy
val2=''
if [ -n $val1 ]