как выбрать множественный выход

как выбрать множественный выход

Я новичок в написании скриптов bash и не понимаю, что не так с этой частью моего скрипта. Я пытаюсь выбрать все выходы, которые есть в моем скрипте. И пытаюсь задать условие, что если все эти условия не выполняются, то скрипт недействителен, а в противном случае — действителен.

if [[ `echo $?` -ne {0..4} ]]
then
         echo "Its a Valid Date."
 else
         echo " Not valid date."
fi

При запуске я получаю:

kpatel138@matrix:~/Lab2> ./cal2 1994 5 4
./cal2: line 40: unexpected argument `(' to conditional binary operator
./cal2: line 40: syntax error near `(0'
./cal2: line 40: `if [[ `echo $?` -ne (0..4) ]]'

решение1

`echo $?`это запутанный способ письма $?. Не делайте вещи сложным способом, когда есть очевидный более простой способ.

Я думаю, вы хотите проверить, $?является ли одно из значений 0, 1, 2, 3 или 4. Синтаксис, который вы используете, не имеет смысла. Вы можете проверить все пять случаев равенства:

if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …

Но это слишком многословно. Поскольку вы хотите разрешить диапазон 0–4, проверьте, что $?значение больше минимального и меньше максимального.

if [[ $? -ge 0 && $? -le 4 ]]; then …

$?никогда не бывает отрицательным, поэтому тест $? -ge 0излишен. Таким образом:

if [[ $? -le 4 ]]; then …

Это также можно записать с помощью арифметического выражения. Обратите внимание, что оператор отличается: условные конструкции в скобках используют -eq, -ne, -le, -ge, -ltи -gtдля сравнения целых чисел, в то время как арифметические выражения имеют синтаксис, похожий на C.

if (($? <= 4)); then …

Связанный контент