Analisando um parâmetro com opções durante a execução do script de shell

-1

Eu tenho 5 opções em um script como Obter endereço IP, Memória livre, Uso da CPU, Nome do host e Nome de usuário.

Eu quero fazer um script para obter todas as saídas ou qualquer pessoa.

Por exemplo:

Se eu executar

system_info.sh -i ip -fm free -c cpu -h host -u user

ou

system_info.sh -all all

então deve dar todo o resultado.

Se eu quiser apenas uma saída, preciso executar o mesmo script como

system_info.sh -fm free
system_info.sh -fm free -i ip

Eu tenho a ideia, mas não sei como definir essas opções e validar em um script.

Por favor me sugira como definir essas opções

    
por Beginner 28.09.2017 / 07:31

1 resposta

5

Eu nunca fiz isso antes, mas vi isso e aprendi alguma coisa. Você precisará usar a função bash getopts dessa maneira. Isso deve apontar você na direção certa:

while getopts i:f:c:h:u: option
do
 case "${option}"
 in
 i) ip=${OPTARG};;
 f) state=${OPTARG};;
 c) cpu=${OPTARG};;
 h) host=$OPTARG;;
 u) user=$OPTARG;;
 esac
done

Esse é um loop while que usa a função getopts e o chamado optstring , neste caso i:f:c:h:u: , para iterar pelos argumentos. O loop while percorre o optstring , que contém os sinalizadores que podem ser usados para transmitir argumentos, e atribui o valor do argumento fornecido para esse sinalizador à variável option . A instrução case então atribui o valor da variável option a uma variável global que pode ser usada depois que todos os argumentos tiverem sido lidos.

Os dois pontos no optstring significam que os valores são necessários para os sinalizadores correspondentes. No exemplo acima, todos os sinalizadores são seguidos por dois pontos: i:f:c:h:u: .

Isso significa que todos os sinalizadores precisam de um valor. Se, por exemplo, não fosse esperado que os sinalizadores i e u tivessem um valor, o optstring seria i:f:c:h:u .

Um cólon no início da optstring, por exemplo, :i:f:c:h:u: , tem um significado completamente diferente. Ele permite que você manipule sinalizadores que não estão representados na optstring. Nesse caso, o valor da variável "option" é definido como "?" e o valor de "OPTARG" é definido para o sinalizador inesperado. O permite exibir uma mensagem de erro adequada informando o usuário sobre o erro.

Argumentos que não são precedidos por um sinalizador são ignorados por getopts. Se os sinalizadores especificados na optstring não forem fornecidos quando o script for chamado, nada acontece, a menos que você manipule especialmente este caso em seu código.

Quaisquer argumentos não manipulados por getops ainda podem ser capturados com as variáveis regulares $1 , $2 , etc.

Exemplo simples:

#!/bin/bash

while getopts "i:f:c:h:u:" opt
do
        case $opt in
                i)
                        echo "ip"
                        ;;
                f)
                        echo "free"
                        ;;
                c)
                        echo "cpu"
                        ;;
                h)
                        echo "host"
                        ;;
                u)
                        echo "user"
                        ;;
                *)
                        echo "Nothing to do"
                        ;;
        esac
done

Uso:

./h.sh -i ip -f free -c cpu -h host -u user

Resultado:

ip
free
cpu
host
user

Fonte:

link

link

link

link

    
por George Udosen 28.09.2017 / 07:56