LinuxSir.cn,穿越时空的Linuxsir!

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

怎么检测用户输入变量的有效性?

[复制链接]
发表于 2003-9-3 16:31:49 | 显示全部楼层 |阅读模式
我的script中,要求用户输入的变量至少在四位以上,且必须全部是数字,我用下面的语句判断
if [[ $1 = [0-9]\{4,\} ]]
为什么不能得到正确的结果?
发表于 2003-9-3 17:01:01 | 显示全部楼层
在sed中的正则表达式是不能使用在if语句中的!
你可以这样:
  1. #!/bin/ksh
  2. #要求用户必须输入大于四位的数字
  3. while true
  4. do
  5. echo -n "请输入四个以上的数字:"
  6. read num
  7. var=$(echo "$num*1"|bc)
  8. #变量var存放你输入的字符的值,如果你输入的数字和1相乘,那么var的值就应该是num,否则num就不是数字.
  9. len=${#num}
  10. #变量len存放输入的长度
  11. if [[ $num != $var || $len < 4 ]] then
  12. #进行检测,如果你输入有非数字字符,或者长度小于4个,便提示错误信息
  13. echo "错误! 重新输入"
  14. continue
  15. else
  16. echo "输入正确,退出!";exit 0
  17. fi
  18. done
复制代码
 楼主| 发表于 2003-9-3 17:37:53 | 显示全部楼层
thanks,搞了老半天了,总算明白了
发表于 2003-9-3 18:52:41 | 显示全部楼层
exit 0; exit 1和exit有什么区别?
发表于 2003-9-3 19:11:03 | 显示全部楼层
exit n
那个n不过是前面的命令执行后返回的一个状态,0表示成功,非0的表示不同的返回值.如果不加的话,shell会返回默认的值.
发表于 2003-9-4 09:31:17 | 显示全部楼层
这个返回值应该可以利用的吧,javalee兄可否举一例?
发表于 2003-9-4 11:33:07 | 显示全部楼层
最初由 cx6445 发表
这个返回值应该可以利用的吧,javalee兄可否举一例?

我举个简单的例子看能不能说明问题.
  1. [/home/javalee/funlib]cat gp
  2. function gp {
  3. grep $1 $2 2>/dev/null
  4. case $? in    #监查grep的返回值
  5. 1)      echo "$1:找不到此模式!";;
  6. 2)      echo "$2:没有这个文件!";;
  7. esac
  8. }
  9. [/home/javalee/funlib]gp abc gp
  10. abc:找不到此模式!
  11. [/home/javalee/funlib]gp in aaa
  12. aaa:没有这个文件!
  13. [/home/javalee/funlib]gp in gp
  14. case $? in
复制代码
发表于 2003-9-5 20:27:23 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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