Проблема сценариев оболочки UNIX для команды "r--" команда не найдена - PullRequest
0 голосов
/ 07 марта 2011

Я думаю, что оператор 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"

Ответы [ 2 ]

3 голосов
/ 07 марта 2011

Вы не должны анализировать 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  "
2 голосов
/ 07 марта 2011

Кажется, что после grt= есть пробел, т.е.

grt= `ls -l $file | cut -c5-7`

вместо правильного

grt=`ls -l $file | cut -c5-7`

Это заставляет bash установить переменную grt в пустую строку и выполнить результат команды в обратных галочках.

Не относится к вашему вопросу, но, возможно, важно для того, что вы собираетесь делать: тесты -r, -w, -x не пользовательская часть прав пользователя / группы / других прав, но проверьте, может ли текущий пользователь прочитать (записать, ...) этот файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...