LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1209|回复: 5

一句很简单的code,好心人帮我看一下,谢谢

[复制链接]
发表于 2004-5-10 10:47:58 | 显示全部楼层 |阅读模式
if [ [ $1 = "-d" -o $1 = "-y" ] -a \
   [ expr "$2" + 0 > /dev/null 2>&1 ] -a \
   [ $3 != "-v" -a $3 != "-h" -o !-z $3 ] ];then
...
我想表达的是:$1是-d或-y,且$2是数字,且$3不空而且不是-v和-h
请问上面的code错在哪里?应该怎么写?
谢谢
发表于 2004-5-10 11:28:22 | 显示全部楼层

回复: 一句很简单的code,好心人帮我看一下,谢谢

最初由 lionheart28 发表
if [ [ $1 = "-d" -o $1 = "-y" ] -a \
   [ expr "$2" + 0 > /dev/null 2>&1 ] -a \
   [ $3 != "-v" -a $3 != "-h" -o !-z $3 ] ];then
...
我想表达的是:$1是-d或-y,且$2是数字,且$3不空而且不是-v和-h
请问上面的code错在哪里?应该怎么写?
谢谢

逻辑关系混乱 ;)
这样试试看:

  1. #检查位置参数个数,如果不是3个,那么提示出错信息
  2. (($#!=3))&&{ echo "Usage: $(basename $0) arg1 arg2 arg3";exit 1; }
  3. #你要表达的意思~
  4. if [[ ($1 == "-y" || $1 == "-h") && $2 == [0-9]* && ($3 != "-v" || $3 != "-h") ]];then
  5. ...
  6. fi
复制代码
 楼主| 发表于 2004-5-10 12:09:40 | 显示全部楼层
谢谢,不过我用的是bash,你给出的好像是c shell的吧
还有个问题,如果用$2 == [0-9]*的话,好像如果第二个字符开始不是数字的话,好像就不对了吧?
请问在bash下怎么写?还有那个$2的问题
谢谢了
发表于 2004-5-10 12:14:25 | 显示全部楼层
这是标准的ksh/bash的写法
至于对于$2的数字的判断,那只不过是个举例,没有过多的考虑 ;)
 楼主| 发表于 2004-5-10 12:38:24 | 显示全部楼层
那按我的判断数字的写法可以吗?
expr "$2" + 0 > /dev/null 2>&1
谢谢
发表于 2004-5-10 12:45:15 | 显示全部楼层
最初由 lionheart28 发表
那按我的判断数字的写法可以吗?
expr "$2" + 0 > /dev/null 2>&1
谢谢

判断输入是否为数字的方法见:
http://www.linuxsir.cn/bbs/showt ... 15&pagenumber=3  <<技巧:如何判断输入的是字符还是数字的三个方法>>
你的方法可不可以,只有动手实践一下不就知道喽 ;)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表