У меня есть цикл для анализа аргументов командной строки. Все работает нормально, если аргумент -d или -b имеет параметр. Но когда я передаю -d или -b без параметра, сценарий попадает в бесконечный цикл.Логика логического вывода Bash работает в бесконечный цикл
# Parse command line input
while [ "$#" -gt 0 ]; do
case "$1" in
-d) DOMAIN="$2"; shift 2;;
-b) BITS="$2"; shift 2;;
*) die "unrecognized argument: $1"
esac
done
Как выбросить ошибку при пустом параметре?
Если ваши аргументы просто однобуквенные, вы можете использовать ['getopts'] (https://www.gnu.org/software/bash/manual/bashref.html#index-getopts) вместо того, чтобы , –
Один трюк, который будет работать, особенно если у вас есть некоторые опции флага (которые не принимают аргументы) - это 'shift' вместо' shift 2' внутри 'case', а другой' shift' после 'esac' и до' done'. Параметры флага не потребуют сдвига вообще. Поскольку он сдвигал бы один аргумент за раз, он бы избавился от блуждающего '-b' без аргумента, поэтому цикл завершится. Тем не менее, ответ 'getopts' является лучшим долгосрочным выбором. Специальные решения приобретают специальные ошибки - свидетельствуйте о своей проблеме с бесконечным циклом. –