echo $BASH_VERSION # Bash 1.14版本
a=2147483646
echo "a = $a" # a = 2147483646
let "a+=1" # 自增 "a".
echo "a = $a" # a = 2147483647
let "a+=1" # 再次自增"a",超出取值范围。
echo "a = $a" # a = -2147483648
# 错误:超出范围,
#+ 最左边的符号位被重置,
#+ 结果变负
a=1.5
let "b = $a + 1.3" # 报错
# t2.sh: let: b = 1.5 + 1.3: syntax error in expression
# (error token is ".5 + 1.3")
echo "b = $b" # b=1
if [ ! -f $FILENAME ]
then
...
if [ $condition1 ] && [ $condition2 ]
# 等同于: if [ $condition1 -a $condition2 ]
# 返回true如果 condition1 和 condition2 同时为真...
if [[ $condition1 && $condition2 ]] # 可行
# 注意,&& 运算符不能用在[ ... ]结构里。
if [ $condition1 ] || [ $condition2 ]
# 等同于: if [ $condition1 -a $condition2 ]
# 返回true如果 condition1 和 condition2 任意一个为真...
if [[ $condition1 || $condition2 ]] # 可行
# 注意,|| 运算符不能用在[ ... ]结构里。
#!/bin/bash
a=24
b=47
if [ "$a" -eq 24 ] && [ "$b" -eq 47 ]
then
echo "Test #1 succeeds."
else
echo "Test #1 fails."
fi
# 错误: if [ "$a" -eq 24 && "$b" -eq 47 ]
# 这样写的话,bash会先执行'[ "$a" -eq 24'
# 然后就找不到右括号']'了...
#
# 注意: if [[ $a -eq 24 && $b -eq 24 ]] 这样写是可以的
# 双方括号测试结构比单方括号更加灵活。
# (双方括号中的"&&"与单方括号中的"&&"意义不同)
# 感谢 Stephane Chazelas 指出。
if [ "$a" -eq 98 ] || [ "$b" -eq 47 ]
then
echo "Test #2 succeeds."
else
echo "Test #2 fails."
fi
# 使用 -a 和 -o 选项也具有同样的效果。
# 感谢 Patrick Callahan 指出。
if [ "$a" -eq 24 -a "$b" -eq 47 ]
then
echo "Test #3 succeeds."
else
echo "Test #3 fails."
fi
if [ "$a" -eq 98 -o "$b" -eq 47 ]
then
echo "Test #4 succeeds."
else
echo "Test #4 fails."
fi
a=rhino
b=crocodile
if [ "$a" = rhino ] && [ "$b" = crocodile ]
then
echo "Test #5 succeeds."
else
echo "Test #5 fails."
fi
exit 0