当前位置: 技术问答>linux和unix
请问有关shell编程下if语句的一个小问题
来源: 互联网 发布时间:2016-08-23
本文导语: 本帖最后由 zjwssg 于 2010-02-27 15:50:42 编辑 在写if语句时,if比较只能是数字才可以运行,设成字符条件的话就无法运行了,真奇怪啊。 #!/bin/bash #test varchar read name if [ $name -eq "11" ] then echo "yes" else echo "no" fi 上...
#!/bin/bash
#test varchar
read name
if [ $name -eq "11" ]
then
echo "yes"
else
echo "no"
fi
上面这个我运行时,可以正常运行。
可下面这个,运行时输入 zjw或者 "zjw" 后,都是直接报错。
#!/bin/bash
#test varchar
read name
if [ $name -eq "zjw" ]
then
echo "yes"
else
echo "no"
fi
就不行了,难道字符时不是这样写吗
报错信息:
rac1 ~/test-> ./test7
zjw
./test7: line 4: [: zjw: integer expression expected
no
谢谢指教。
|
-eq只能是数字比较
字符串比较直接一个=
自己在CSDN下载个Unix与linux shell编程指南吧
仔细看看
1 字符串判断
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
2 数字的判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真
3 文件的判断
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
3 复杂逻辑判断
-a 与
-o 或
! 非
字符串比较直接一个=
自己在CSDN下载个Unix与linux shell编程指南吧
仔细看看
1 字符串判断
str1 = str2 当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1 当串的长度大于0时为真(串非空)
-z str1 当串的长度为0时为真(空串)
str1 当串str1为非空时为真
2 数字的判断
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真
3 文件的判断
-r file 用户可读为真
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
3 复杂逻辑判断
-a 与
-o 或
! 非
|
果然还是有问题,我这里有本 shell编程,上面说的是2.2版本以后的shell可以使用 -eq.
只不过扩展为[[ 了。
看来尽信书不如无书。
刚刚测试了,输入正确的时候和输入错误的时候的结果竟然是一样的。
汗。。