2011-03-07 132 views
0

我认为if语句命令比较的文本,而不是命令的输出,任何提示或帮助解决这个简单的问题UNIX壳牌命令“R--”找不到命令脚本问题

我迄今取得验证码:

#!/bin/bash 
echo -n "Enter File Name: " 
read file 

#Permission for the User Date 
[ -w $file ] && W="yes" || W="No" 

[ -x $file ] && X="yes" || W="No" 

[ -r $file ] && R="yes" || R="No" 

#Permission for the Group Data 

grt= `ls -l $file | cut -c5-7` 

if [ "grt" = "---" ] 

then 

    grp="No No No" 

elif [ "$grt" = "r--" ] 

then 

    grp=" Yes No No" 

elif [ "$grt" = "-w-" ] 

then 

    grp="No Yes No" 

elif [ "$grt" = "--x" ] 

then 

    grp="No No Yes" 

elif [ "$grt" = "rw-" ] 

then 

    grp="Yes Yes No" 

elif [ "$grt" = "r-x" ] 

then 

    grp="Yes No Yes" 

elif [ "$grt" = "-wx" ] 

then 

    grp="No Yes Yes" 

fi 

#Output 

echo 

echo "$file Properties" 

echo 

echo "  Read Write Execute" 

echo "User: $R $W  $X" 

echo "Group: $grp" 

回答

2

似乎是一个空间grt=后,即

grt= `ls -l $file | cut -c5-7` 

,而不是正确

grt=`ls -l $file | cut -c5-7` 

这使得bash将变量grt设置为空字符串并在反引号中执行该命令的结果。

不相关的问题,但你要做什么,也许重要的是:-r,-w,-x测试用户/组/其他权利的用户部分,但测试是否当前用户能够读取(写入,...)该文件。

+0

太好了!你真的帮助了我,现在我知道该怎么做 – Pocari 2011-03-07 15:06:29

+0

@Pocari:如果这是帮助你的答案,你通常应该将它标记为“接受的答案” - 所以cebewee会得到它的帮助;) – GreyCat 2011-03-07 15:50:52

3

shouldn't parse ls。如果有,请使用stat。有关获取文件元数据的信息,请参阅BashFAQ/087

您可以将所有这些if/elif语句替换为case语句。

case "$grt" in 
    "---") grp="No No No";; 
    "r--") grp="Yes No No";; 
    . . . 
esac 

,或者你可以映射字符串和做这一切在短短的两个语句(不if,没有case):

grp=${grt//[rwx]/Yes } # change any "r", "w" or "x" to "Yes " 
grp=${grp//-/No }   # change any "-" to "No "