[] 和 [[]],涨知识了。
多数情况下[]和[[]]是可以通用的,两者的主要差异是:test 或[]是符合 POSIX 标准的测
试语句,兼容性更强,几乎可以运行在所有 Shell 解释器中,相比较而言[[]]仅可运行在特定
的几个 Shell 解释器中(如 Bash、Zsh 等)。事实上,目前支持使用[[]]进行条件测试的解释
器已经足够多了。使用[[]]进行测试判断时甚至可以使用正则表达式。
首先,测试两者的通用表达式(同样,一定要注意空格的问题,空格不可或缺)。
image.png
一,代码练习
1002 LANGC=C
1003 [[ b > A ]] && echo Y || echo N
1004 [[ A > 6 ]] && echo Y || echo N
1005 [[ A > b ]] && echo Y || echo N
1006 [[ 8 > C ]] && echo Y || echo N
1007 [[ 8 > 2 ]] && echo Y || echo N
1008 [[ 2 > 8 ]] && echo Y || echo N
1009 [[ T > F ]] && echo Y || echo N
1010 [[ m > c ]] && echo Y || echo N
1011 [[ yes == yes -a no == no ]] && echo Y || echo N
1012 [ yes == yes -a no == no ] && echo Y || echo N
1013 [ yes == y -a no == no ] && echo Y || echo N
1014 [ yes == y -o no == no ] && echo Y || echo N
1015 [[ yes == y && no == no ]] && echo Y || echo N
1016 [[ yes == y || no == no ]] && echo Y || echo N
1017 [[ yes == yes || no == no ]] && echo Y || echo N
1018 [[ A == A && 6 -eq 6 && C == C ]]
1019 echo $?
1020 [[ A == A && 6 -eq 3 && C == C ]]
1021 echo $?
1022 name=Jacob
1023 [[ $name == J* ]] && echo Y || echo N
1024 [[ $name == A* ]] && echo Y || echo N
1025 [[ $name == J?cob ]] && echo Y || echo N
1026 [[ a == [a-z] ]] && echo Y || echo N
1027 [[ a == [0-9] ]] && echo Y || echo N
1028 [ $name == J? ] && echo Y||echo N
1029 [ $name == J* ] && echo Y||echo N
1030 name='J*'
1031 [ $name == 'J*' ] && echo Y||echo N
1032 [[ a == a ]] && echo Y||echo N
1033 [[ a == b ]] && echo Y||echo N
1034 name="welcome to beijing"
1035 [[ $name =~ w ]] && echo Y||echo N
1036 [[ $name =~ [0-9] ]] && echo Y||echo N
1037 [[ $name =~ [a-z] ]] && echo Y||echo N
1038 [[ $name =~ [A-Z] ]] && echo Y||echo N
1039 [[ a == a && (b == b || c == d) ]] && echo Y || echo N
1040 [[ a == a && (b == g || c == d) ]] && echo Y || echo N
二,对比练习
通过建立用户名和修改密码的练习,可以深刻的对比[]和[[]]的用户区别。效果一样。
#!/bin/bash
# version:0.6
read -p "请输入用户名:" user
read -p "请输入密码:" pass
#if [ ! -z "$user" ]; then
# if [ ! -z "$pass" ]; then
# useradd "$user"
# echo "$pass" | passwd --stdin "$user"
# fi
#fi
#if [[ ! -z "$user" && ! -z "$pass" ]]; then
# useradd "$user"
# echo "$pass" | passwd --stdin "$user"
#fi
#if [ ! -z "$user" -a ! -z "$pass" ]; then
# useradd "$user"
# echo "$pass" | passwd --stdin "$user"
#fi
if [ ! -z "$user" ] && [ ! -z "$pass" ]; then
useradd "$user"
echo "$pass" | passwd --stdin "$user"
fi
网友评论