A declaração do caso é geralmente usada no Bash quando você tem várias opções para selecionar. Usá-lo em vez de declarações if-else aninhadas ajuda a manter seus scripts de basquete mais fáceis de ler e manter.
A declaração de caso BASH foi projetada semelhante à declaração de caso de JavaScript e C. Ao contrário da instrução Switch de C, a declaração do caso Bash para de procurar outras partidas assim que encontrar uma e completa as declarações que são escritas para o padrão.
Neste guia, explicaremos como você pode usar a declaração de caso Bash usando dois exemplos e alguns cenários no Ubuntu 22.04.
Sintaxe da declaração do caso
Se você quiser entender como usar a declaração do caso, você precisa entender a sintaxe. Se parece com isso:
case $ variável em
padrão1)
comandos
;;
Pattern2)
comandos
;;
Patternn)
comandos
;;
*)
comandos
;;
ESAC
Vamos quebrá -lo:
case $ variável em
Pattern1 | Pattern2)
comandos
;;
Pattern3 | padrão4)
comandos
;;
Agora, vamos dar uma olhada em alguns exemplos para entender melhor esta sintaxe.
Feriados em um mês
Para nosso primeiro exemplo, vamos escrever um script que leva um mês como entrada do usuário e responde com um feriado internacional que cai no mês. O "SHOPT -S NOCASEMATCH”O comando permite que seu script ignore o caso da entrada e combine com os casos, independentemente disso.
#!/BIN/BASH
#Code para ignorar restrições de casos
SHOPT -S NOCASEMATCH
#declaração
eco "Por favor, digite o nome de um mês"
Leia o mês
Caso $ mês em
Janeiro)
eco "18 de janeiro é o Dia Nacional do Thesaurus"
;;
Fevereiro)
eco "20 de fevereiro é o Dia Mundial da Justiça Social"
;;
Marchar)
eco "29 de março é Little Red Wagon Day."
;;
Abril)
eco "1º de abril é o Dia Internacional da luta de travesseiros"
;;
*)
Echo "não conseguiu encontrar nenhum feriado no seu mês especificado"
ESAC
Neste script, retiramos o nome de um mês do usuário e o armazenamos em uma variável chamada "mês". Em seguida, usando a instrução CASE, comparamos a entrada com alguns meses pré-selecionados e depois exibimos o respectivo feriado. Você pode ver que, se o código não encontrar nenhuma correspondência nos casos definidos, ele terá um eco fora dos casos para exibir outra mensagem. E depois disso, fechamos a estrutura do código do caso com a palavra -chave "ESAC".
Salve o arquivo de script e saia do editor Nano. Execute o script usando o seguinte comando:
Mês de $ Bash.shVocê pode ver que o código respondeu com o feriado relevante para a contribuição que foi atendida nos casos e respondeu com desconhecido quando a entrada estava fora do alcance dos casos programados.
O idioma oficial de um país
Vamos escrever um script que utilize os casos compostos. Para este exemplo, vamos escrever um script que pega um país e imprime o idioma oficial daquele país.
#!/BIN/BASH
#Code para ignorar restrições de casos
SHOPT -S NOCASEMATCH
#declaração
eco "Entre em um país:"
Leia o país
eco "o idioma oficial de $ country é"
Caso $ país em
América | Londres)
eco "inglês"
;;
Brasil | Portugal | México)
eco "espanhol"
;;
China | Cingapura | Taiwan)
eco "mandarim"
;;
*)
eco "desconhecido"
;;
ESAC
Declaração de casos com números inteiros
Você também pode criar os casos em que você deve combinar com a entrada com números inteiros também. Vamos criar um script que retire a entrada dos usuários na faixa de 1-10 e depois exibe se o número for par ou ímpar.
#!/BIN/BASH
#declaração
eco "Digite um número de 1 a 10:"
Leia num
caso $ num em
"1" | "3" | "5" | "7" | "9")
eco “sua opinião é um número ímpar”
;;
"2" | "4" | "6" | "8" | "10")
eco “sua entrada é um número uniforme”
;;
*)
eco "sua entrada está fora do intervalo necessário"
;;
ESAC
A execução deste script fornece a seguinte saída:
Você pode testar com os outros números também.
Declaração de caso com loop
Você pode usar a instrução CASE dentro dos loops para verificar se quiser verificar vários valores de entrada em relação aos seus casos definidos. Vamos ilustrar este caso escrevendo um script que passa por todos os arquivos no diretório atual e exibir seu tipo de arquivo.
#!/BIN/BASH
#para cada arquivo no diretório atual
para arquivo em $ (ls)
fazer
#extrair a extensão do arquivo
Extensão = $ arquivo ##*.
Caso "$ extensão" em
sh)
eco “Arquivo de script Bash: $ arquivo”
;;
png)
eco “arquivo de imagem png: $ arquivo”
;;
TXT)
eco “arquivo de texto: $ arquivo”
;;
*)
eco “arquivo desconhecido”
;;
ESAC
feito
A execução deste script passa por todos os arquivos no Active Directory atual e o exibe junto com seu tipo de arquivo (apenas os casos que especificamos). Como você pode ver, ao executar este script que temos apenas um arquivo no diretório atual, ele exibe isso junto com a extensão.
Conclusão
Voltando ao seu código mais antigo e descobrir o que a linha faz pode ser uma tarefa muito pesada, especialmente se foi escrita por outra pessoa. Adicionar a ele é ainda mais difícil. Usando a instrução CASE em seus scripts de bash, pode facilitar muito a sua leitura através da sintaxe fácil.
Como demonstrado com os exemplos, você pode usá -lo com cordas, múltiplas cordas, números inteiros e loops, entre muitos outros. Você pode até lidar com os códigos de saída do seu programa com declarações de caso. É muito versátil.
Se você enfrentar algum problema usando a declaração do caso, fique à vontade para nos envolver e teremos prazer em ajudá -lo.