if -else no shell script, argumento correspondente com string

0

Para o seguinte script de shell -

#!/bin/sh
main_version=0
feature_version=0
patch_version=0
if [[ $1 -eq "m" ]]; then
    main_version=$((main_version+1))
fi

if [[ $1 -eq "f" ]]; then
    feature_version=$((feature_version+1))
fi

if [[ $1 -eq "p" ]]; then
    patch_version=$((patch_version+1))
fi

echo $main_version
echo $feature_version
echo $patch_version

Está incrementando todas as variáveis mesmo que eu passe m como argumento usando ./<script-name>.sh m

Qual é a razão para isso?

    
por monster 01.08.2018 / 21:22

1 resposta

4

-eq usa comparação aritmética. Sh operações aritméticas tratam operandos não numéricos como 0, então você está apenas verificando [[ 0 -eq 0 ]] nos três casos.

Para comparação de strings, você deseja [ "x" = "y" ] . (Essa é a sintaxe do shell POSIX.)

A sintaxe do Bash é [[ x == y ]] com o dobro =, mas não é uma boa ideia usar bashisms / kshisms quando o cabeçalho do seu script declara / bin / sh. Altere o cabeçalho para exigir o Bash ou mantenha-se na sintaxe do shell POSIX.

    
por 01.08.2018 / 21:33