Como criar um menu de seleção usando a instrução SELECT em Bash Shell
- 5031
- 737
- Randal Kuhlman
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
Requisitos de software e convenções usadas
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