Программа оболочки не работает - PullRequest
0 голосов
/ 16 октября 2010

Для нескольких папок, предоставляемых пользователем в качестве входных данных, я хочу подсчитать, сколько файлов и папок в них имеют разные настройки разрешений, чем сама папка контейнера.

Я написал следующеекод оболочкиПочему он отображает права, но ничего не считает?

#!/bin/sh
if [ ! -d $1 ]
 then echo $1 nu este director
  exit1
fi 
ls -R $1 >temp
permission= ls -al $1 | cut -d" " -f1   
for i in `cat temp`
do 
  perm= ls -l $i | cut -d" " -f1  
if [ $permission -ne $perm ] 
   then n=`expr $n + 1`
fi
echo   $n
done

Ответы [ 4 ]

1 голос
/ 17 октября 2010
  • Вы не должны использовать -ne для сравнения строк.Вам нужно сделать следующее:

    if [ "$permission" != "$perm" ] 
    then 
        n=`expr $n + 1`
    fi
    
  • Вам нужно инициализировать n, прежде чем вы сможете увеличить его.

    n=0
    
  • Вынеобходимо исправить подстановку команды:

    permission=$(ls -al $1 | cut -d" " -f1)  
    perm=$(ls -l $i | cut -d" " -f1)
    
  • exit1 должно быть exit 1

0 голосов
/ 16 октября 2010

Вы не инициализируете свою переменную $n, поэтому ваш вызов expr расширяется до expr + 1, что является синтаксической ошибкой. Вы должны увидеть множество сообщений "expr: syntax error" на stderr. Просто добавьте строку n=0 перед циклом, и все будет в порядке.

0 голосов
/ 17 октября 2010

Добавление к ответам других:

exit1 должно быть exit 1

0 голосов
/ 16 октября 2010

вы хотите использовать подстановку команд:

permission=$(ls -al $1 | cut -d" " -f1)
# ...
perm=$(ls -l $i | cut -d" " -f1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...