簡體   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