2011-03-07 129 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 "