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