Ваш код у меня работает нормально, но в нем есть несколько ошибок, которые в некоторых случаях не сработают (, например. если в имени файла есть пробел ).
$(ls)
используйте *
. "$foo"
вместо $foo
. Если вы не укажете их в кавычках, оболочка разделит вывод на IFS (, то есть на пробелы ). Вы можете проверить это с помощью своего скрипта. Включите несколько каталогов без пробелов, а затем проверьте с пробелом. Будут учитываться только первые. Вот фиксированный код:
#!/bin/bash
n=0
for afile in *
do
if [ -d "$afile" ]
then
(( n ++ ))
fi
done
echo There are $n directories under the current directory $(pwd).
exit 0
Не уверен, что это очевидно, но скрипт запустится в текущем каталоге.
Вы, как и я, можете найти утилиту boot-repair
весьма полезной для этого.
Он использует системные инструменты fdisk
, parted
, lsblk
, blkid
и каталог /dev/disk
для обнаружения всех разделов и диагностики всех меток; а также GRUB os-prober
для идентификации операционных систем, загружаемых с него.