linux shell编程

function duan
{
if [ $# -ne 2 ]
then
echo "wrong"
esle
if [ $1 -eq "bob" ] && [ $2 -eq "123" ]
then
echo "true"
esle
echo "flase"
fi
fi
}
duan bob 123

在这个里面有一个问题是如果我使用 “$1 -eq bob” 他会报错说数据类型什么的
我使用“$!=bob” 就是对的
但是我看见过很多例题都是“$! -eq bob” 我按照例题写进去也是错的
后面的 [ $2 -eq "123" ] 还是 [ $2 = "123" ] 都是对的
我想问高手为什么不能用“$! -eq bob” 到底什么时候用= 什么时候用-eq

=用于字符字符串比较,而-eq是算术比较符
按照你的参数:duan bob 123
那就应该是if [ "$1" = "bob" ]
if [ "$2" -eq 123 ]或者if [ "$2" = "123" ]

字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string长度非零,则为真 [ -n "$myvar" ]
string1= string2 如果 string1与 string2相同,则为真 [ "$myvar" = "one two three" ]
string1!= string2 如果 string1与 string2不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1-eq num2 等于 [ 3 -eq $mynum ]
num1-ne num2 不等于 [ 3 -ne $mynum ]
num1-lt num2 小于 [ 3 -lt $mynum ]
num1-le num2 小于或等于 [ 3 -le $mynum ]
num1-gt num2 大于 [ 3 -gt $mynum ]
num1-ge num2 大于或等于 [ 3 -ge $mynum ]

有时,有几种不同方法来进行特定比较。例如,以下两个代码段的功能相同:

if [ "$myvar" -eq 3 ]
then
echo "myvar equals 3"
fi

if [ "$myvar" = "3" ]
then
echo "myvar equals 3"
fi

上面两个比较执行相同的功能,但是第一个使用算术比较运算符,而第二个使用字符串比较运算符。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-04-22
期待高手指点!!!
相似回答