Como criar um menu de seleção usando a instrução SELECT em Bash Shell

Como criar um menu de seleção usando a instrução SELECT em Bash Shell

Todos nós costumamos usar scripts de bash para automatizar tarefas chatas e repetitivas. Às vezes em nossos scripts, precisamos perguntar
O usuário para executar uma ou mais opções interativamente: neste tutorial, veremos como usar a instrução Bash Shell Select para executar essa operação em muito poucas linhas de código.

Neste tutorial, você aprenderá:

  • Como usar a declaração Bash Select
  • Como personalizar o prompt de menu Selecionar
Como criar um menu de seleção usando a instrução SELECT em Bash Shell

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição
Programas A casca de bash
Outro nenhum requesito especial
Convenções # - requer que os comandos Linux sejam executados com privilégios root 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

A instrução SELECT

O script é uma das habilidades mais comuns que um administrador do sistema deve possuir, a fim de automatizar repetitivo
tarefas e tornam -os menos propensos a erros. Em casos não muito complexos, o shell é a ferramenta perfeita a ser usada para o trabalho. Bash, o Bourne novamente Shell, é a concha mais usada no mundo GNU/Linux. Este shell fornece o muito útil Selecione declaração. Seu objetivo é descrito da seguinte maneira:

Selecione palavras de uma lista e execute comandos



A descrição é bastante auto-explicativa. A declaração nos permite receber interativamente uma entrada de um usuário, gerando uma lista numerada de opções e levando -o a selecionar uma. Vamos ver como é usado:

Selecione o nome [em palavras…;] dos comandos; feito

A sintaxe é muito semelhante à de um tradicional para loop em Bash, exceto pelo uso do Selecione palavra -chave. A instrução SELECT, no entanto, funciona de uma maneira diferente. Vamos ver um exemplo. Suponha que queremos pedir a um usuário que selecione um dos arquivos contidos em um diretório. Aqui está o que poderíamos escrever:

$ files = "$ (ls -a .) "$ SELECT FILENAME em $ files; do eco" $ file "; feito 1) file1 2) file2 3) file3 #?

Vamos explicar o que fizemos. Antes de tudo, obtivemos uma lista de todos os arquivos presentes no diretório (neste caso o diretório de trabalho atual) usando o ls comandar e especificar o -A opção (abreviação de --quase tudo), a fim de excluir o implícito . e .. da lista retornada, que atribuímos ao arquivos variável.

Em seguida, passamos a usar o Selecione declaração. O exposto acima é um exemplo muito básico: fornecemos o resultado da expansão do arquivo variável como a lista de opções a serem incluídas. Observe que evitamos citar a expansão $ arquivos de propósito, a fim de obter divisão de palavras: Quando uma expansão é citada com cotações duplas divisão de palavras é suprimido, portanto os espaços não são usados ​​como delimitadores de palavras e o resultado da expansão é considerado como um todo. Não é isso que queremos neste caso: precisamos de cada palavra ser usada como uma escolha no menu gerado.



As palavras obtidas da expansão da variável são impressas no stderr (erro padrão). Cada um é precedido e associado a um número, que é o que o usuário usará para fazer referência a ele. Depois que todos os elementos são exibidos, o usuário é solicitado a entrar em sua escolha. O que é exibido é o Ps3 Prompt, que, por padrão, está definido como #?.

O que acontece quando o usuário executa uma seleção? Vamos ver:

$ files = "$ (ls -a .) "$ select filename em $ files; faça echo" você selecionou $ filename "; feito 1) file1 2) file2 3) file3 #? 1 você selecionou o arquivo1 #?

A escolha que entramos, 1, é lido do stdin (entrada padrão) e se o número inserido estiver entre os disponíveis, a palavra correspondente ("file1" no exemplo) é atribuída ao,nome do arquivo variável. Em nosso exemplo, especificamos eco "$ filename" Como o comando a ser executado assim que a escolha é executada: como resultado: a palavra selecionada é impressa na tela. O número que entramos para especificar nossa escolha também é armazenado em uma variável: RESPONDER.

Você pode notar que uma coisa estranha aconteceu no exemplo acima: Depois de executar nossa escolha, após a execução do comando, fomos solicitados novamente para uma escolha, por que? Isso aconteceu porque não fornecemos um quebrar
comando. Podemos facilmente consertar isso:

$ files = "$ (ls -a .) "$ SELECT FILENAME em $ files; faça echo" Você selecionou $ FileName "; Break; feito 1) FILE1 2) FILE2 3) FILE3 #? 1 você selecionou arquivo1

E se não fornecermos nenhuma seleção? O prompt é simplesmente repetido até que façamos:

Selecione o nome do arquivo em $ files; ECHO "você selecionou $ FileName"; quebrar; feito 1) arquivo1 2) arquivo2 3) arquivo3 #? 1) FILE1 2) FILE2 3) FILE3 #? 

E se entrarmos em um número que não estiver na lista? Nesse caso, a variável que usamos, nome do arquivo em nosso caso, está definido como nulo.

Alterar o prompt de seleção

Como já vimos, o prompt usado pelo shell no contexto de uma declaração selecionada é o Ps3 Prompt, que por padrão, tem o #? string tem um valor. Isso não é muito amigável, então podemos querer alterá -lo e usar algo mais descritivo em vez disso. Como podemos fazer isso? Muito simples: devemos alterar o valor do Ps3 parâmetro:

$ Ps3 = "Por favor, insira sua escolha:"


Na próxima vez que usaremos o Selecione Declaração, notaremos a mudança:

Selecione o nome do arquivo em $ files; eco "você selecionou $ FileName $ Responder"; quebrar; Feito 1) Arquivo1 2) Arquivo2 3) File3 Digite sua escolha: 

A alteração feita para a variável será eficaz apenas para a seção atual da concha e, se nós exportar A variável, também em todos os seus filhos:

$ export ps3 = "Por favor, insira sua escolha:"

A mudança, no entanto, permanece temporária até definirmos o Ps3 variável dentro do .Bashrc arquivo. PS3 é apenas um dos avisos usados ​​no Bash: verifique nosso artigo de prompt de bash se quiser saber mais sobre o assunto.

Conclusões

Neste tutorial, aprendemos a usar a festa Selecione declaração. Vimos como funciona e como podemos usá -lo para criar um menu de seleção para pedir interativamente a um usuário para executar uma escolha. Finalmente vimos como personalizar o prompt exibido no menu de seleção modificando o shell Ps3 parâmetro.

Tutoriais do Linux relacionados:

  • Mastering Bash Script Loops
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Loops aninhados em scripts de basquete
  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Manipulando a entrada do usuário em scripts bash
  • Tutorial de depuração do GDB para iniciantes
  • Sistema Linux Hung? Como escapar para a linha de comando e…
  • Como configurar um servidor OpenVPN no Ubuntu 20.04