错误写法:变量名前没加$
错误写法:test条件测试表达式和if判断条件混淆了,去掉test
错误:If [ 条件一 ] && 条件二,正确写法应该去掉if
对于if条件语句中单[]和双[]的区别补充:
参考文章:https://blog.51cto.com/xoyabc/1794406
-
[[...]]双方括号里的expression使用了test命令中采用的标准字符串比较。但它提供了test命令未提供的另一个特性——模式匹配(pattern matching)。
-
在模式匹配中,可以定义一个正则表达式来匹配字符串值。
-
是关键字,可以直接支持 > < = && ||等符号,不用转义(只有字符串才可以用这些符号比较,数字还是要用-gt/-lt等比较)。
-
-
[ ]是内置条件判断符号。字串比较符号> < 要加转义符号'\',多条件用 -a(and,表示&&) -o(or,表示||)连接;
-
if cd "$dir" 2>/dev/null; then # "2>/dev/null" 会隐藏错误信息.
-
与此相似, 在中括号中的条件判断也不一定非得要if不可, 也可以使用列表结构:
var1=20
var2=22
[ "$var1" -ne "$var2" ] && echo "$var1 is not equal to $var2"
home=/home/bozo
[ -d "$home" ] || echo "$home directory does not exist."
#!/bin/bash
a1=$1
b1=$2
c1=$3
if [ $1 -gt $2 ] && [ $3 -gt $2 ];then
echo "yes"
else
echo "no"
fi
# 双中括号实现同上逻辑
if [[ $1 -gt $2 && $3 -gt $2 ]];then
echo "yes"
else
echo "no"
f
# 运行输出结果
~ % sh 10.square_brackets.sh 12 5 8
yes
yes