test :用于文件类型检查和变量比较
一.用途:
1.判断表达式
2.判断字符串
3.判断整数
4.判断文件
测试例子:
(1).test
[[email protected]~_~ day5]# cat test.sh
#!/bin/bash
a=$1
b=$2
if test $a -eq $b
then
echo "a=b"
else
echo "a!=b"
fi
[[email protected]~_~ day5]# sh test.sh 1 1
a=b
[[email protected]~_~ day5]# sh test.sh 1 2
a!=b
---------------------------------------------
(2).[]
[[email protected]~_~ day5]# cat test.sh
#!/bin/bash
a=$1
b=$2
[ $a = $b ] && echo "a=b" || echo "a!=b"
[[email protected]~_~ day5]# sh test.sh 1 2
a!=b
[[email protected]~_~ day5]# sh test.sh 1 1
a=b
-------------------------------------------------
(3).判断文件
[[email protected]~_~ day5]# cat test2.sh
#!/bin/bash
[ -f "$0" ]&& echo "$0 is a file" || echo "$0 is not a file"
[[email protected]~_~ day5]# sh test2.sh
test2.sh is a file
二.test,[] , [[]]用法比较
[]与test等价,均为shell得到内部命令,而[[]]是shell得到关键字,bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码,故推荐用 [[]] 作为条件判断语句,不易出现逻辑错误。另外,[[]]还支持模式匹配和正则表达式
(1).语法比较
[[]]: if [[ $a != 1 && $a != 2 ]]
[]: if [ $a -ne 1] && [ $a != 2 ] 或者 if [ $a -ne 1 -a $a != 2 ]
(2). [[]] 支持模式匹配
[[email protected]~_~ day5]# cat test4.sh
#!/bin/bash
[[ "abcd" == a*d ]]&& echo True || echo Flase
[ "abcd" == a*d ]&& echo True || echo Flase
[[email protected]~_~ day5]# sh test4.sh
True
Flase
(3).[[]] 支持正则表达式
[[email protected]~_~ day5]# cat test5.sh
[[ "hello" =~ ^h ]]&& echo Ture || echo False
[[email protected]~_~ day5]# sh test5.sh
Ture