Как убедиться, что пользователь вводит правильную опцию регистра переключателя? - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь выяснить, как исправить этот код ...

echo -n "Enter you complaint : ";
read complaint;


if [[ -z $complaint ]] || [[ $complaint != 'FIRE' ]] || [[ $complaint != 'INTOXICATION' ]] || [[ $complaint != "INJURY" ]] || [[ $complaint != "BREAKAGE" ]] ;then
    echo "Not a good option";
    exit 1;
fi


case $complaint in
    FIRE)  = $complaint=$(echo "FIRE");;
    INTOXICATION) = $complaint=$(echo "INTOXICATION");;
    INJURY) = $complaint=$(echo "INJURY");;
    BREAKAGE) = $complaint=$(echo "BREAKAGE");;
esac

Можно ли узнать: Почему он всегда вводится в if, даже если я набираю правильную вещь?

1 Ответ

0 голосов
/ 06 мая 2018

Условие в if неверное, оно должно быть:

if [[ -z $complaint ]] || [[ ( $complaint != 'FIRE' && $complaint != 'INTOXICATION' && $complaint != "BRIS" && $complaint != "BOBO" ) ]] ;then

То есть вы хотите войти внутрь этого if, если $complaint равно null (-z $complaint) или если оно не соответствует ни одному из допустимых параметров, поэтому оно должно отличаться для всех их в то же время, таким образом, && вместо ||.

В качестве альтернативы вы также можете использовать условие по умолчанию в блоке case...esac:

case $complaint in
    FIRE)  = $complaint=$(echo "FIRE");;
    INTOXICATION) = $complaint=$(echo "INTOXICATION");;
    INJURY) = $complaint=$(echo "INJURY");;
    BREAKAGE) = $complaint=$(echo "BREAKAGE");;
    *) echo "Not a good option"; exit 1;;
esac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...