LinuxSir.cn,穿越时空的Linuxsir!

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

大家好,我自己编写了个shell脚本,但好像出了点问题,请大家帮帮忙^^

[复制链接]
发表于 2010-4-19 12:59:44 | 显示全部楼层 |阅读模式
做这个脚本,我是想看看,一个if里,能不能接多个elif~
但好像写的错误很多哦。我基础还很差,看不出来哪里出错了。请各位大哥帮帮忙^^,谢谢哦

脚本的执行步骤是:
1.输入档名abc
2.检测是否有输入档名,没有的话,则提示重新输入
3.检测档名是不是和abc一样,如果不一样的话,提示输入档名abc
4.检测abc是不是存在,如果存在的话,那么检测本用户对abc是否有读取的权限,如果有的话,则提示'您有读取权限',没有的话,则提示'您没有读取权'。


#!/bin/bash
#这个脚本是用来一个检查if语句里,能否接多个elif语句的。
#版本1
read -p '请输入档名abc:' filename
if [ test -z "$filename" -a "$?" == '0' ];then
echo -e '\n输入错误,请重新输入档名'
exit 0
elif [ test "$filename" != 'abc' -a "$?" =='0' ];then
echo -e '\n请输入档名abc'
exit 0
elif [ test -e "$filename" -a "$?" == 0 ];then
test -r $filename &&echo -e '\n您有读取权限' ||echo -e '\n您没有读取权限
'
fi

--------------------------------
是不是一个if语句里,只能同时处理一个变量呀??
发表于 2010-4-19 14:09:03 | 显示全部楼层
[ ] 等同于 test. 用[], 就不用test;或者用test,就把[] 替换成()
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-19 14:29:53 | 显示全部楼层
Post by U571;2083979
[ ] 等同于 test. 用[], 就不用test;或者用test,就把[] 替换成()
楼上的兄弟,谢谢你呀。我现在用你说的第二个方法:“用test,就把[] 替换成()”,改好了。
但是还是没全修复。
现在是,第一条if语句,条件达成时会执行,
但是之后的两条elif语句,条件达成后,都不执行呢。请问这是为什么?

------------------------------------------------------------------------
if ( test -z "$filename" -a "$?" == '0' );then
echo -e "\n输入错误,请重新输入档名"
exit 0
#如果输入的档名不是abc,则提示输入abc
elif ( test "$filename" != 'abc' -a "$?" == '0' );then
echo -e "\n请输入档名abc"
exit 0
elif ( test -e "$filename" -a "$?" == 0 );then
test -r $filename &&echo -e "\n您有读取权限" ||echo -e "\n您没有读取权限"
fi
回复 支持 反对

使用道具 举报

发表于 2010-4-19 14:46:55 | 显示全部楼层
大致原因是test成功后,$?数值由0变1。导致所有的判断都不成立吧,程序直接执行到fi,结束了!

-。-  (说错,欢迎砖头)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-19 17:21:51 | 显示全部楼层
test 成功后 $?的值应该是为0吧?为什么会是1呢?
回复 支持 反对

使用道具 举报

发表于 2010-4-19 18:03:39 | 显示全部楼层
应该是1吧,不信你把elif ( test -e "$filename" -a "$?" == 0 );then中的0改1,立马有输出“您有读取权限”。
至于为什么会变1,这个问题不知。
推测 if 重置了 $?  -。- (欢迎砖头)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-19 19:14:41 | 显示全部楼层
果然呀,改成1后就执行成功了。果然是高手呀 ^^
但是为什么原本0会变成1呢~~@_@
呀,这个shell果然不好学,思绪都乱成一锅粥了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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