Bash рукописный шрифт for finding number of поля, directories, and temporary поля in в directory

I want to write в shell рукописный шрифт that counts number of поля, directories, and temporary поля in в directory. The рукописный шрифт below throws an ошибка.

#!/bin/bash

cd '/home/Ubuntulover/Shell'

file=0
dir=0
temp=0
for d in *;
do
 for f in *;
 do
    if [ -d "$d" ]; then
        dir=$((dir+1))
    elif [ -f "$f" ]; then
        file=$((file+1))
    else
        temp=$((temp+1))
    fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"
0
задан 20 December 2015 в 20:48

2 ответа

У Вас есть слишком многие for операторы: В настоящий момент существует переменная цикла d рассчитывающий через все объекты в каталоге и вторую переменную цикла f выполнение этого снова для каждого существующего файла - поэтому, если у Вас будет 4 файла тогда, то Вы доберетесь 4*4=16 повторения (или был бы, если эти done были корректны).

Вы могли использовать оператор как ls -l | wc -l, чтобы сделать быструю проверку, что приблизительное значение в порядке.

я считаю, что это больше, что Вы хотите:

#!/bin/bash

cd '/home/Ubuntulover/Shell'

file=0
dir=0
temp=0
for d in *;
do
  if [ -d "$d" ]; then
    dir=$((dir+1))
  elif [ -f "$d" ]; then
    file=$((file+1))
  else
    temp=$((temp+1))
  fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"
2
ответ дан 30 September 2019 в 00:43

У Вас есть синтаксическая ошибка как done, ключевое слово пропускает в верхнем большинство for цикл:

 #!/bin/bash

cd '/home/479153/Temp' || exit

file=0
dir=0
temp=0
for d in *;
do
    for f in *; # this loop actually not needed
     do
        if [ -d "$d" ]; then
            dir=$((dir+1))
        elif [ -f "$f" ]; then # can be replace as $d
            file=$((file+1))
        else
            temp=$((temp+1))
        fi
    done
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"

можно всегда использовать http://www.shellcheck.net/ сайт для проверки синтаксической ошибки в код удара.

2
ответ дан 30 September 2019 в 00:43

Другие вопросы по тегам:

Похожие вопросы: