②Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab \< bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。
if [ 'a' == 'b' ]; then
echo "a=b"
else
echo "a!=b"
fi
if [ 1 -lt 2 ]; then
echo '1<2'
else
echo '1>2'
fi
if [ 1 \< 2 ]; then
echo '1<2'
else
echo '1>2'
fi
if [[ abcdefg =~ ^[a-z0-9]+$ ]]; then
echo "match"
else
echo "no match"
fi
if [[ "012345abc" =~ ^[0-9]+$ ]]; then
echo "match"
else
echo "no match"
fi
输出结果:
match
no match
if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]
for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done
看到上面的例子就知道了,各种括号,各种用法,一个问题可以用几种不同的方法解决,但是在节约代码的同时,也要照顾到脚本的可读性,可移植性,尽量使用风险小的,可移植性好的,不要只图省事,养成一个良好的代码风格。
五)expr用法
①运算表达式用法
-bash-4.1$ count=1
-bash-4.1$ num=2
-bash-4.1$ echo `expr $count + $num`
3
-bash-4.1$ echo $[${count} + ${num}]
3
-bash-4.1$ echo $((${count} + ${num}))
3
-bash-4.1$ echo $[${count} + 1]
2
补充:变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,例如echo "I am good at ${skill}Script",如果不加花括号解释器就会把$skillScript当成一个变量
②运算
STRING : REGEXP anchored pattern match of REGEXP in STRING
match STRING REGEXP same as STRING : REGEXP
substr STRING POS LENGTH substring of STRING, POS counted from 1
index STRING CHARS index in STRING where any CHARS is found, or 0
length STRING length of STRING