在初次接触shell脚本编程时,容易犯一些基础的错误,下面是本人经历和经过查阅资料整理的,现分享与这里。
一、数值比较
-eq 等于,如:if[ "$a" -eq "$b" ]
-ne 不等于,如:if[ "$a" -ne "$b" ]
-gt 大于,如:if[ "$a" -gt "$b" ]
-ge 大于等于,如:if[ "$a" -ge "$b" ]
-lt 小于,如:if[ "$a" -lt "$b" ]
-le 小于等于,如:if[ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a"< "$b"))
< = 小于等于(需要双括号),如:(("$a"<= "$b"))
> 大于(需要双括号),如:(("$a"> "$b"))
> = 大于等于(需要双括号),如:(("$a">= "$b"))
需要注意的是:
a. 这里[]前内的空格与双引号,双引号左右各占一个空格,否则脚本运行时报错;
b. 数值比较,相关参数不可用于字符串比较
eg:
<strong>#!/bin/sh
# This script is for comparing two numbers
echo Let's take an example
echo Please input the first number:
read num1
echo Input the second number:
read num2
if [ "$num1" -eq "$num2" ]
then
echo "$num1 = $num2"
elif [ "$num1" -gt "$num2" ]
then
echo "$num1 \> $num2"
else
echo "$num1 \< $num2"
fi
</strong>
二、字符串比较
= 等于为真,如:if[ "$a" = "$b" ]
!= 不等于为真,如:if [ "$a" != "$b" ]
== 等于,如:if[ "$a" == "$b" ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
3 [ $a == z* ] #File globbing 和word splitting将会发生
4 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" \< "$b" ]
注意:在[]结构中"<"需要被转义.
> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" \> "$b" ]
注意:在[]结构中">"需要被转义.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"