Я подкачал кабели на видеокарту... простую... замечательно!
Это дает count
как обнуляют, потому что Вы - инкремент count
в подоболочке. По сути, изменения, внесенные в переменную, потеряны.
Вместо этого скажите:
while read -r dir
do
count=$(($count + 1))
done < all_files
достигнуть желаемого результата.
Тем не менее парсинг ls
никогда не рекомендуется.
Можно использовать массив, чтобы содержать имена файлов и исследовать размер массива:
files=( /root/Jamshed/script/* )
echo "${#files[@]}"
Если Вы хотите все файлы рекурсивно:
shopt -s globstar nullglob
files=( /root/Jamshed/script/** )
echo "${#files[@]}"
Можно сделать это без парсинга ls
вывод или использование wc
следующим образом:
cd /root/Jamshed/script
count=0
shopt -s nullglob
for file in * .*[!.]*;do
count=$(($count+1))
done
echo $count
Объяснение
Шаблон шарика *
будет соответствовать всем именам файлов и именам каталогов, не запускающимся с a .
и шаблон шарика .*[!.]*
будет соответствовать всем именам файлов и именам каталогов, имя которых запускается с a .
и содержит по крайней мере один не -.
символ (чтобы не считать специальные каталоги .
и ..
).
...
и .....
также. Обратите внимание, что стандартный синтаксис [!.]
, нет [^.]
. Обратите внимание, что в пустом каталоге, это возвратилось бы 2.
– Stéphane Chazelas
16.02.2014, 19:46
подстановки процесса [11547] можно - с [11548]bash 4. 2[11549] on - используйте [11550]shopt -s lastpipe[11551], чтобы избежать проблемы подоболочки (назначение переменных в дочернем процессе не видно в родительской оболочке).
(Другой способ избежать проблемы подоболочки - использовать
exec
и перенаправлять stdin из файла или heredoc). Если вы настаиваете на использовании [11554]ls[11555], используйте [11556]ls -1Artb[11557].
Ваш сценарий отлично работает в ksh, вы также можете изменить первую строку (в Linux пакет ksh должен быть установлен).
#! / Bin / ksh
ksh не использует подоболочки в цикле.