繁体   English   中英

找不到“ r--”命令上的UNIX Shell脚本问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM