[英]UNIX Shell Scripting Problem on command “r--” command not found
我认为if语句会将命令与文本而不是命令的输出进行比较,任何提示或帮助解决此简单问题
到目前为止,我编写了以下代码:
#!/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"
您不应该解析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 "
似乎在grt=
之后有一个空格,即
grt= `ls -l $file | cut -c5-7`
而不是正确的
grt=`ls -l $file | cut -c5-7`
这使得bash将变量grt设置为空字符串,并在反引号中执行命令的结果。
与您的问题无关,但可能对您的工作很重要:-r,-w,-x测试不是用户/组/其他权限的用户部分,而是测试当前用户是否能够读取(写入,...)此文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.