Я попытался проверить, PHONE_TYPE
содержит ли переменная одно из трех допустимых значений.
if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
[ "$PHONE_TYPE" != "CISCO" ]
then
echo "Phone type must be nortel,cisco or nec"
exit
fi
Приведенный выше код не работает для меня, поэтому я попробовал это вместо:
if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
[ "$PHONE_TYPE" == "CISCO" ]
then
: # do nothing
else
echo "Phone type must be nortel,cisco or nec"
exit
fi
Есть ли более чистые способы для этого типа задач?
shell-script
shell
Munish
источник
источник
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then
Хорошие ответы и бесценный урок;) Хочется только дополнить запиской.
Какой тип теста выбрать, зависит от кода, структуры, окружения и т. Д.
Альтернативой может быть использование переключателя или
case
оператора, как в:В качестве второго замечания вы должны быть осторожны, используя имена переменных в верхнем регистре. Это необходимо для предотвращения столкновения между переменными, введенными системой, которые почти всегда имеют верхний регистр. Таким образом,
$phone_type
вместо$PHONE_TYPE
.Хотя это безопасно, если у вас есть привычка использовать верхний регистр, вы можете сказать, что однажды
IFS="boo"
вы окажетесь в мире боли.Это также поможет определить, что к чему.
Не обязательно, но настоятельно рекомендуется.
Это также, по-видимому, хороший кандидат на функцию. В основном это облегчает чтение и обслуживание кода. Например:
источник
Вы должны использовать AND, а не OR.
или же
источник
Чтобы исправить ответ выше (я пока не могу комментировать):
Обратите внимание, что для этого использования вам необходим как минимум bash 4 = ~
В bash 3 это не работает.
Я тестировал на MS Windows 7, используя bash 4.3.46 (работает нормально) и bash 3.1.17 (не работал)
LHS = ~ должен быть в кавычках. Выше PHONE_TYPE = "SPACE TEL" тоже будет соответствовать.
источник
Используйте [[вместо
источник
[[
vs[
не помогает с отключенной логикой.Просто предложение по варианту на основе решения @ 0x80:
источник