35. 用 [[ ]] 扩展测试命令
我们已经知道,[ ]
是测试命令,通常与if
语句一起使用。
[[ ]]
是扩展测试命令,是[ ]
命令的高级变体,可以执行 [ ]
执行的所有操作,此外还执行以下操作:
- 当您使用
=
、==
或!=
时,使用字符串比较中的模式匹配 =~
位于扩展测试命令内&&
和||
在扩展测试命令中<
和>
用于在扩展测试命令中进行比较- 将表达式括在
( )
中以更改其计算优先级 ~
波形符扩展、算术扩展和参数扩展- 命令替换和进程替换
以下示例演示如何使用扩展测试命令来使用模式匹配(使用=
、||
和=~
)。
$ cat extended-test1.sh
name=${1}
# 1. You can use pattern matching in [[ ]]
if [ $name = bon* ]; then
echo "[test] command: Good Morning, Mr. Bond"
fi
if [[ $name = bon* ]]; then
echo "[[test]] command: Good Morning, Mr. Bond"
fi
# 2. You can use || && inside [[ ]]
if [[ $name = super || $name = bon* ]]; then
echo "[[test]] command: Good Morning, Mr. Hero"
fi
# 3. You can use =~ for regular expression inside [[ ]]
if [[ $name =~ ^b ]]; then
echo "[[test]] command: Mr. $name, your name starts with 'b'"
fi
$ ./extended-test1.sh bon
[[test]] command: Good Morning, Mr. Bond
[[test]] command: Good Morning, Mr. Hero
[[test]] command: Mr. bon, your name starts with 'b'
以下示例演示如何使用扩展测试命令来使用模式匹配(使用=
)和正则表达式比较(使用=~
)。
$ cat extended-test2.sh
i=1
cd ~
for item in *
do
if [[ $item = *.jpg ]]; then
echo "Image $((i++)) : $item"
fi
done
cd /etc
for item in *.conf
do
if [[ $item =~ ^a ]]; then
echo "Conf $((i++)) : $item"
fi
done
$ ./extended-test2.sh
Conf 1 : asound.conf
Conf 2 : autofs_ldap_auth.conf