Sou novo em scripts bash e não entendo o que há de errado com essa parte específica do meu script. estou tentando selecionar todas as saídas que tenho no meu script. e tentando colocar em condições que se todas essas condições não forem atendidas, então não é válido e então é válido.
if [[ `echo $?` -ne {0..4} ]]
then
echo "Its a Valid Date."
else
echo " Not valid date."
fi
Quando eu executo, recebo:
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) ]]'
Responder1
`echo $?`
é uma maneira complicada de escrever $?
. Não faça as coisas de maneira complicada quando existe uma maneira mais simples e óbvia.
Acho que você deseja testar se $?
um dos valores é 0, 1, 2, 3 ou 4. A sintaxe que você está usando não faz sentido. Você pode testar todos os cinco casos de igualdade:
if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …
Mas isso é excessivamente detalhado. Como você deseja permitir o intervalo de 0 a 4, teste se $?
é maior que o valor mínimo e menor que o valor máximo.
if [[ $? -ge 0 && $? -le 4 ]]; then …
$?
nunca é negativo, então o teste $? -ge 0
é supérfluo. Por isso:
if [[ $? -le 4 ]]; then …
Isso também pode ser escrito usando uma expressão aritmética. Observe que o operador é diferente: construções condicionais entre colchetes usam -eq
, -ne
, -le
, -ge
e para comparar números inteiros, enquanto -lt
expressões -gt
aritméticas têm uma sintaxe semelhante a C.
if (($? <= 4)); then …