Como fazer ifs aninhados [fechados]

0

Estou tentando fazer meu próprio comando usando um script, mas estou tendo um pouco de dúvida sobre a maneira correta de criar um if dentro de outro. O código abaixo mostra como estou tentando fazer isso, mas acho que não está certo.

#!/bin/bash

if test -z $1
then
    echo "Wrong usage of command, to check proper wars user -h for help."
    exit
else
    if test "$1"="-h"
    then
        echo "OPTIONS:  -h (help), -a (access point MAC), -c (current target[s] MAC[s])
"
        exit
    fi

    if test "$1"="-c"
    then
        echo "Usage error, access point MAC comes first."
        exit
    fi
fi
    
por D Venzi 14.02.2018 / 01:30

1 resposta

1

Suas declarações if aninhadas parecem muito boas, seus testes provavelmente indicam que o script "não funciona".

Eu alterei seu comando test s para o comando bash [[ extended test.

Além disso, em vez de usar dois condicionais if aninhados, acho que deve funcionar bem como um único if elif .

#!/bin/bash

if [[ -z "$1" ]]
then
    echo "Wrong usage of command, to check proper wars user -h for help."
    exit
else
    if [[ "$1" == "-h" ]]
    then
        echo -e "OPTIONS:  -h (help), -a (access point MAC), -c (current target[s] MAC[s])\n"
        exit
    elif [[ "$1" == "-c" ]]
    then
        echo "Usage error, access point MAC comes first."
        exit
    fi
fi

Seus testes devem ter um espaço entre $1 e sua string de teste, mas eu acho que é melhor usar o bash [[ test se você estiver escrevendo seu script no bash. Aqui estão alguns exemplos de como o test builtin funciona:

$ test true && echo yes || echo no
yes
$ test false && echo yes || echo no
yes
$ test true=false && echo yes || echo no
yes
$ test true = false && echo yes || echo no
no

Além disso, neste exemplo, não acho que sua condição if aninhada seja obrigatória. Você poderia simplificá-lo para:

#!/bin/bash

if [[ "$1" == "-h" ]]; then
    echo -e "OPTIONS:  -h (help), -a (access point MAC), -c (current target[s] MAC[s])\n"
    exit
elif [[ "$1" == "-c" ]]; then
    echo "Usage error, access point MAC comes first."
    exit
else
    echo "Wrong usage of command, to check proper wars user -h for help."
    exit
fi
    
por 14.02.2018 / 01:48