Como usar o GETOPTS para analisar uma opção de script

Como usar o GETOPTS para analisar uma opção de script

Objetivo

Aprenda a usar a festa getopts Construído para analisar uma opção de script

Sistema operacional e versões de software

  • Sistema operacional: - Todas as distribuições Linux

Requisitos

  • Sem requisitos especiais, apenas acesso a uma casca de festa

Dificuldade

MÉDIO

Convenções

  • # - requer que os comandos Linux sejam executados com privilégios de raiz também
    diretamente como usuário root ou por uso de sudo comando
  • $ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Introdução

Modificar um comportamento de script de bash por meio de opções de tempo de execução, assim como normalmente fazemos com programas de linha de comando, pode ser muito útil. O shell bash fornece o getopts Comando construído, uma maneira padrão de conseguir isso. Como usá -lo é o que aprenderemos neste tutorial.

Criando nosso script de testes

Para os fins deste tutorial, vamos criar um script de teste e, com muita fantasia, vamos chamá -lo teste.sh. O objetivo deste script será produzir algo dependendo da opção que forneceremos (não será o script mais útil do mundo, mas será suficiente para explicar como as coisas funcionam).

Vamos abrir nosso editor de texto e começar:

#!/BIN/BASH SET -E Set -U Set -o Pipefail 

As opções de shell fornecidas no início dos scripts não são obrigatórias, mas é um bom hábito usá -los em todos os scripts que escrevemos. Em resumo, -e, abreviatura de Errexitmodifica o comportamento do shell que sairá sempre que um comando sair com um status não zero (com algumas exceções). -você é outra opção muito importante: isso faz com que o shell trate variáveis ​​indefinidas como erros.

Finalmente, o PipeFail muda a maneira como os comandos dentro de um tubo são avaliados. O status de saída de um tubo será o do comando mais à direita para sair com um status não zero, ou zero se todos os programas no tubo forem executados com sucesso. Em outras palavras, o tubo será considerado bem -sucedido se todos os comandos envolvidos forem executados sem erros.



O construto getopts

Após esta breve digressão, vamos voltar ao ponto principal deste tutorial e vamos ver como getopts funciona:

#!/Bin/Bash Set -e Set -U Set -o PipeFail enquanto a opção GOTOPTS 'LHA:'; DO CASE "$ opção" em l) echo "linuxconfig" ;; h) eco "h significa h" ;; a) Avalue = "$ optarg" eco "O valor fornecido é $ optarg" ;; ?) eco "Uso do script: $ (nome da base \ $ 0) [-l] [-h] [-a algum valor]"> & 2 saída 1 ;; ESAC DO MUITO DESAB "$ (($ optind -1))" 

Vamos analisar o que temos acima. Primeiro de tudo getopts Os comandos devem ser usados ​​dentro de um enquanto loop para que todas as opções sejam analisadas. Então imediatamente após o getopts palavra -chave, definimos as possíveis opções que nosso script aceitará. Eles são eu, h e finalmente a.

O que significa o cólon após esta última opção? É a maneira como dizemos aos getopts que a opção requer um argumento. Cada opção analisada será armazenada dentro do $ Opção variável, enquanto um argumento, quando presente, se tornará o valor do$ Optarg um.

Cada opção é gerenciada dentro de uma declaração de caso, com uma final ? Caso que será correspondido sempre que uma opção que não existir for fornecida. Nesse caso, ecoaremos o usuário o uso correto de script e a saída com um código de erro.

Testando nosso script

Primeiro, vamos ligar para o nosso script, oferecendo uma opção não existente, apenas para testar o caso mencionado acima. Vamos dar permissões executáveis ​​ao script e depois chamá -lo:

teste CHMOD +X.sh && ./tesh.sh -c 

Como esperado, receberemos uma mensagem dizendo que a opção fornecida é ilegal e, em seguida, instruções sobre como usar o script:

./teste.SH: Opção ilegal - C Script Uso: Teste.sh [-l] [-h] [-a algum valor] 

Enquanto o Uso do script String é a que definimos para ser impressa em erro de uso, o acima, é uma mensagem gerada automaticamente por getopts e pode ser desativado prefixando as opções com um :. Agora vamos ver o que acontece quando usamos o script da maneira que ele deveria:



./teste.sh -l linuxConfig 

Usamos o eu opção, e o script impresso na tela da sequência que definimos no caso correspondente, também é isso que acontece se fornecermos o -h opção:

./teste.sh -h h significa h 

Vamos agora tentar chamar o script com o a opção. Como dito acima, esta opção requer um argumento e falhará se o último não for fornecido:

./teste.sh -a ./teste.SH: Opção requer um argumento - um uso de script: teste.sh [-l] [-h] [-a algum valor] 

Como esperado, o script respondeu com uma mensagem de erro, lembrando -nos que a opção que fornecemos requer um argumento:

./teste.sh -a smok o valor fornecido é smoking 

Desta vez, o script respondeu sem erro. Observe como o argumento que fornecemos, Tux está impresso porque se torna o valor do $ Optarg variável.

Usando getopts, Você também pode fornecer mais de uma opção no momento do seu script, combinando as bandeiras quando você o inicia. Por exemplo, vamos ver o que acontece quando tentamos chamar nossos scripts com os dois eu e h Opções:

./teste.sh -lh linuxconfig h significa h 

Como podemos observar, as duas opções foram processadas, na ordem em que lhes fornecemos. De maldição, as opções podem ser dadas separadamente, e também podemos adicionar o a opção, mas sempre lembrando de adicionar o argumento necessário:

./teste.sh -l -h -a tux_rulez linuxconfig h significa h o valor fornecido é tux_rulez 

A variável $ optind

Se dermos outra olhada no script muito trivial que escrevemos acima, vemos outra instrução no final do While Loop: turno $ (($ optind -1)). Qual é seu propósito? Digamos que chamamos o script desta maneira:

./teste.sh -l -h -a hello world 

Quando o script é invocado, o $ Optind A variável é definida como 1 e é incrementada cada vez que uma opção é analisada, até que atinja a última. Portanto, neste caso, terá um valor de 5 quando chegará ao último elemento, que é olá, o argumento obrigatório exigido pelo -a opção.

mudança é uma concha que move os parâmetros posicionais do script para baixo um número especificado de posições fornecidas como um número positivo, descartando os argumentos relacionados.

A maneira como lançamos o script acima, o último argumento fornecido, "mundo", não é analisado por getopts, que nesse ponto já terminou seu trabalho.

Agora, se fizermos uma mudança do valor de $ Optind - 1 (Esse é o número efetivo das opções analisadas, 4 neste caso) nos parâmetros posicionais, o que resta são apenas os argumentos que não são opções, neste caso "mundo", que podemos acessar usando o $* variável posterior neste script.

Tutoriais do Linux relacionados:

  • Bash Script: sinaliza o uso com exemplos de argumentos
  • Coisas para instalar no Ubuntu 20.04
  • Como executar operações de administração com Ansible…
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Comandos Linux: os 20 comandos mais importantes que você precisa para…
  • Comandos básicos do Linux
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Download do Linux
  • Como imprimir a árvore do diretório usando o Linux
  • Linux pode obter vírus? Explorando a vulnerabilidade do Linux…