Вы объединяете буквы флага в одну строку, поэтому с помощью myscript -l -r
вы получаете FLAGS=lr
, что не равно ни l
, ни r
.
Вы можете использовать сопоставление с образцом вместо проверки на равенство, чтобы справиться с этим:
if [[ $FLAGS = *r* ]]; then
echo "flag -r was given"
или добавьте отдельные переменные для каждого флага:
r_flag=
l_flag=
while getopts "rluh" opt; do
case $opt in
r) r_flag=1;;
...
if [[ $r_flag ]]; then
echo "flag -r was given"
В любом случае, вы, скорее всего, захотите shift $(( OPTIND - 1 ))
после цикла while getopts
, чтобы опции, обрабатываемые getopts
, были удалены из позиционных параметров, а то, что осталось в $1
, $2
... аргументы скрипта, указанные после опций.
Когда вы опускаете косую черту в путях, это должно работать:
ncdu / --exclude home --exclude media
в документации сказано про --исключить:
Exclude files that match PATTERN. The files will still be displayed
by default, but are not counted towards the disk usage statistics.
Шаблон относится к имени , а не к пути .