shell 脚本-test 命令
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试
参数 | 说明 |
---|
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于等于则为真 |
num1=1
num2=2
if test $num1 -eq $num2
then
echo "test $num1 -eq $num2: $num1 等于 $num2"
else
echo "test $num1 -eq $num2: $num1 不等于 $num2"
fi
if test $num1 -ne $num2
then
echo "test $num1 -ne $num2: $num1 不等于 $num2"
else
echo "test $num1 -ne $num2: $num1 等于 $num2"
fi
if test $num1 -gt $num2
then
echo "test $num1 -gt $num2: $num1 大于 $num2"
else
echo "test $num1 -gt $num2: $num1 不大于 $num2"
fi
if test $num1 -ge $num2
then
echo "test $num1 -ge $num2: $num1 大于等于 $num2"
else
echo "test $num1 -ge $num2: $num1 小于 $num2"
fi
if test $num1 -lt $num2
then
echo "test $num1 -lt $num2: $num1 小于 $num2"
else
echo "test $num1 -lt $num2: $num1 不小于 $num2"
fi
if test $num1 -le $num2
then
echo "test $num1 -le $num2: $num1 小于等于 $num2"
else
echo "test $num1 -le $num2: $num1 大于 $num2"
fi
字符串测试
参数 | 说明 |
---|
= | 等于则为真 |
!= | 不相等则为真 |
-z | 的长度为零则为真 |
-n | 字符串的长度不为零则为真 |
str1="Hello"
str2="World"
if test $str1 = $str2
then
echo "test $str1 = $str2: $str1 等于 $str2"
else
echo "test $str1 = $str2: $str1 不等于 $str2"
fi
if test $str1 != $str2
then
echo "test $str1 != $str2: $str1 不等于 $str2"
else
echo "test $str1 != $str2: $str1 等于 $str2"
fi
empty_str=""
if test -z "$empty_str"
then
echo "test -z $empty_str: \"$empty_str\"是空字符串"
else
echo "test -z $empty_str: \"$empty_str\"不是空字符串"
fi
if test -n "$empty_str"
then
echo "test -n $empty_str: \"$empty_str\"不是空字符串"
else
echo "test -n $empty_str: \"$empty_str\"是空字符串"
fi
文件测试
参数 | 说明 |
---|
-e | 如果文件存在则为真 |
-r | 如果文件存在且可读则为真 |
-w | 如果文件存在且可写则为真 |
-x | 如果文件存在且可执行则为真 |
-s | 如果文件存在且至少有一个字符则为真 |
-d | 如果文件存在且为目录则为真 |
-f | 如果文件存在且为普通文件则为真 |
-c | 如果文件存在且为字符型特殊文件则为真 |
-b | 如果文件存在且为块特殊文件则为真 |
file="./test.sh"
if test -e $file
then
echo "文件存在"
else
echo "文件不存在"
fi
if test -r $file
then
echo "文件可读"
else
echo "文件不可读"
fi
if test -w $file
then
echo "文件可写"
else
echo "文件不可写"
fi
if test -x $file
then
echo "文件可执行"
else
echo "文件不可执行"
fi
if test -s $file
then
echo "文件不为空"
else
echo "文件为空"
fi
if test -d $file
then
echo "文件为目录"
else
echo "文件不是目录"
fi
if test -f $file
then
echo "文件为普通文件"
else
echo "文件不是普通文件"
fi
if test -c $file
then
echo "文件为字符设备文件"
else
echo "文件不是字符设备文件"
fi
if test -b $file
then
echo "文件为块设备文件"
else
echo "文件不是块设备文件"
fi
test 命令的逻辑运算
优先级: ! 最高, -a 次之, -o 最低
if test -r $file -a -w $file
then
echo "文件即可读也可写"
else
echo "文件不可读或不可写或不可读也不可写"
fi
if test -r $file -o -x $file
then
echo "文件可读或可执行"
else
echo "文件既不可读也不可执行"
fi
if ! test -e $file
then
echo "文件不存在"
else
echo "文件存在"
fi