Я новичок в написании скриптов 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 …