Comparação de Sequências no Shell

4

Estou tentando comparar o mês atual que recebi do utilitário date com a entrada do usuário. Mesmo quando eu estou dando Oct como entrada está dando resultado incorreto.

read -r month
current='date +”%b”'
echo $current
if [ "$month" = "$current" ];
then
    echo "match"
else
    echo "no "
fi

Eu não consigo entender por que ele está sempre dando saída. Qualquer ajuda é apreciada.

    
por Prashast 16.10.2017 / 07:25

2 respostas

2

Ao executar seu código e inserir Oct no prompt, você verá:

Oct         # this is what you input at the prompt
”Oct”       # this is what your input is compared against
no          # this is the result of the comparison: not true

Evidentemente, se você inseriu ”Oct” , a comparação seria verdadeira:

”Oct”
”Oct”
match

Se você não quiser digitar as duas aspas duplas de fechamento , basta removê-las da lista sequência de comparação:

read -r month
current='date +%b'
echo $current
if [ "$month" = "$current" ];
then
    echo "match"
else
    echo "no "
fi

Dessa forma, você pode digitar Oct e corresponderá a Oct :

Oct
Oct
match

Se você quiser desenvolver ainda mais o seu programa, a próxima etapa pode ser tornar a comparação insensível a maiúsculas e minúsculas: dessa forma, os usuários podem digitar oct , Oct ou OCT sem se importar com o caso adequado. / p>     

por 16.10.2017 / 11:35
2

Existe um erro muito óbvio no seu código.

Eles são as aspas em torno do formato de data

current='date +”%b”'

vs

current='date +"%b"' # this is the one you should be using
    
por 16.10.2017 / 07:32

Tags