Como usar casos de casos em scripts bash

Las declaraciones de Case Bash son poderosas pero fciles de escribir. Ao visitar um script antigo do Linux, se alegrar de ter usado um case declaracin no lugar de uma larga declaração if-then-else .

índice de conteúdo

  1. El caso de la declaracin
  2. El caso genérico
  3. Um exemplo simples
  4. Usar mltiples patrones en una clusula
  5. Uso de cifras en el caso de Declaraciones
  6. Usar declaraciones de casos en bucles for
  7. Gestin de cdigos de salida com declarações adecuadas
  8. La legibilidad ayuda a la mantenibilidad

El caso de la declaracin

A maioria dos idiomas de programação tienen su propia versin de un switch ou case declaracin. Eles dirigem o fluxo de execução do programa em função do valor de uma variável. Em geral, hay um rama de ejecucin definido para cada um dos valores possíveis esperados da variável e um rama catch-all ou defeito para todos os valores dems.

A funcionalidade lógica é semelhante a uma grande segurança de declarações if-then com else declaração que captura cualquier cosa que não foi manuseada previamente por uma de los if declarações.

A implementação do Bash de case intenta fazer coincidir uma expressão com uma das clusulas . Lo hace mirando cada clusula, a su vez, tratando de encontrar una coincidencia plantilla . Los patrones en las clusulas son cadenas, pero, contrariamente a la intuicin, não significa que não podemos usar valores numéricos como expresin.

El caso genérico

La forma generica de case la declaracin es esta:

 expressão case no comando pattern-1) ;; padrão-2) declaração ;; . . . padrão-N) declaração ;; *) declaração ;; esac
  • A case la educacin debe comenzar con case palabra clave y termina con esac palabra clave.
  • La expresin se evala y compara con los patrones en cada clusula hasta que se encuentre una coincidencia.
  • Veja a declaração ou as declarações na clusula de coincidência.
  • Un punto y coma doble " ;; "se utiliza para terminar una clusula.
  • Si se encuentra un patrn y se ejecutan las declaraciones de esa clusula, todos los dems patrones se ignoran.
  • No hay lmite para o nmero de clusulas.
  • Un asterisco " * Denota la plantilla predeterminada. Se uma expressão não coincide com o ninguno de los outros patrones en el case instrucin ejecuta la clusula predeterminada.

Um exemplo simples

Este guin nos cuenta el horario de apertura de una tienda ficticia. use o comando de date com a sequência de formato +"%a" para obter o nome do abreviado. Este é o valor da variável DayName .

 #!/bin/bash DayName=$(date +"%a") echo "Horário de funcionamento para $DayName" case $DayName in Mon) echo "09:00 - 17:30" ;; ter) echo "09:00 - 17:30" ;; qua) echo "09:00 - 12:30" ;; Qui) echo "09:00 - 17:30" ;; sex) echo "09:00 - 16:00" ;; Sáb) echo "09:30 - 16:00" ;; Dom) echo "Fechado o dia todo" ;; *) ;; esac

Copie este texto em un editor y gurdelo como un archivo llamado "open.sh".

Tendemos a usar o comando chmod para ativar o ejecutable. Deber hacer esto para todos los scripts que cree mientras trabaja en este artculo.

 chmod +x open.sh

Agora podemos executar o roteiro nuestro.

 ./open.sh

El da en que se tom la captura de pantalla es el viernes. Isso significa que DayName A variável contém a sequência "Vie". Está combinado com o modelo "Vie" da clusula "Vie)".

Tenga en cuenta que los patrones en las clusulas no tienen que estar entre comillas, pero no est de ms si lo estn. Sem embargo, você deve usar comillas si el padrn contiene espacios.

La clusula predeterminada se ha dejado em branco. Todo o que não corresponde a uma das clusulas anteriores se ignoradas.

Ese guin funciona y es fcil de leer, pero es detallado y repetitivo. Podemos cortar este tipo de case com bastante facilidade.

Usar mltiples patrones en una clusula

Uma característica realmente agradável de case afirma que você pode usar várias plantas em cada clusula. Se a expressão coincidir com uno de estos patrones, veja ejecutan las declaraciones de esa clusula.

Aqu hay un guin que le dice cuntos das hay en un mes. Solo puede haber tres respuestas: 30 das, 31 das o 28 o 29 das para febrero. Entonces, inclusive si hay 12 meses, solo necesitamos tres clusulas.

Neste script, solicite ao usuário o nome de un mes. Para fazer com que a coincidência sensible a maysculas y minsculas no sea sensible, use o comando shopt com el -s nocasematch opcin. Não importa se a entrada contém maysculas, minsculas ou una combinacin de las dos.

 #!/bin/bash shopt -s nocasematch echo "Digite o nome de um mês" leia o mês case $mês em fevereiro) echo "28/29 dias em $mês" ;; Abril | Junho | Setembro | novembro) echo "30 dias em $mês" ;; Janeiro | março | Maio | Julho | Agosto | Outubro | Dezembro) echo "31 dias em $mês" ;; *) echo "Mês desconhecido: $mês" ;; esac

Febrero recebe una clusula propia y todos los dems meses comparten dos clusulas segn tengan 30 o 31 das. Las clusulas de varios patrones utilizam o smbolo de barra vertical "|" como separador. El caso predeterminado captura meses mal escritos.

Lo guardamos em um arquivo chamado "month.sh" e lo hicimos ejecutable.

 chmod +x mês.sh

Ejecutaremos o script varias veces e demostraremos que não importa se usamos maysculas ou minculas.

 ./mês.sh

Como os dijimos al script que ignoram las maysculas y minsculas, cualquier o nome de mes escrito corretamente se maneja mediante uma das três clusulas principais. Los meses mal escritos se toman de la clusula predeterminada.

Uso de cifras en el caso de Declaraciones

Também podemos usar dgitos ou variáveis ​​numéricas como expresin. Este script le pide al usuario que ingrese un nmero en el rango 1..3. Para deixar claro que os patrones de cada clusula son cadenas, se han encerrado entre comillas. Depois de estar, o script coincidirá com a entrada do usuário com a cláusula apropriada.

 #!/bin/bash echo "Digite 1, 2 ou 3: " read Number case $Number in "1") echo "Clause 1 matched" ;; "2") echo "Cláusula 2 correspondente" ;; "3") echo "Cláusula 3 correspondente" ;; *) echo "Cláusula padrão correspondida" ;; esac

Guarde está em um arquivo chamado "number.sh", hgalo ejecutable, luego ejectelo:

 ./number.sh

Usar declaraciones de casos en bucles for

A case la declaracin intenta hacer coincider el patrn con una sola expresin. Se tiver muitas expressões para processar, pode-se fazer a declaração do case dentro de um for o crculo.

Este script executa o comando ls para obter uma lista de arquivos. Em loop, el archivo globbing, similar pero diferente for las expresiones regulares, se aplica a cada archivo a su vez para extraer la extensin del archivo. Esto se almacena en el Extension variable de cadena.

los case la educacin usa el Extension variable como la expresin que intenta coincidir con una clusula.

 #!/bin/bash for File in $(ls) do # extraia a extensão do arquivo Extension=${File##*.} case "$Extension" em sh) echo " Shell script: $File" ;; md) echo "Arquivo Markdown: $File" ;; png) echo "Arquivo de imagem PNG: $File" ;; *) echo "Desconhecido: $Arquivo" ;; esac feito

Guarde este texto em um arquivo chamado "filetype.sh", hgalo ejecutable, luego ejectelo usando:

 ./filetype.sh

Nosso script de identificação de tipo de arquivo minimalista funciona.

Gestin de cdigos de salida com declarações adecuadas

Um programa com bom comportamento envia um cdigo de salida ao shell quando finalizado. O esquema convencional usa um valor de cdigo de salida de cero para indicar una ejecucin sin problemas e valores de uno ou ms para indicar diferentes tipos de erros.

Muitos programas solo usam ceros y unos. Agrupar todas as condições de erro em um único cdigo de saída dificultando a identificação de problemas, mas é uma prática comn.

Creamos un pequeo programa llamado "go-geek" que retornam aleatoriamente cero ou un cdigo de salida. Esta prxima sequncia de comandos llama go-geek . Obter o cdigo de salida usando o $? variável de shell y la usa como una expresin para el case declaracin.

Um script do mundo real realiza o processo apropriado segn el xito ou o fracasso do comando que gera o cdigo de salida.

 #!/bin/bash caso go-geek $? em "0") echo "A resposta foi: Sucesso" echo "Faça o processamento apropriado aqui" ;; "1") echo "A resposta foi: Erro" echo "Faça o tratamento de erros apropriado aqui" ;; *) echo "Resposta não reconhecida: $?" ;; esac

Gurdelo em um script chamado "return-code.sh" e hgalo ejecutable. Deber substituir o novo por outro comando go-geek mando. Podras intentar cd em um diretório que não existe para obter um cdigo de salida de um, luego cambie o script um cd em um diretório acessível para obter um cdigo de salida de cero.

Ejecutar script varias veces mostra os diferentes cdigos de salida identificados por el case declaracin.

 ./return-code.sh

La legibilidad ayuda a la mantenibilidad

Voltar para os scripts antigos de Bash e descobrir o que aconteceu, especialmente se for escrito por outra pessoa, é um destino. Trocar a funcionalidade dos scripts antigos é um ms difcil.

los case La instrucin le brinda una lgica de ramificacin com uma sintaxe clara e simples. Esta é uma vitória para todos.

  • Windows 11 tem um novo bloco de notas, aqu estn las novedades
  • Lanzamiento de la vacuna STOP ransomware para bloquear el cifrado

Descobre ms contenido

Que é um amplificador integrado?

Google Pixel Watch também tem detecção de cadas, pero no hasta el prximo ao

Las melhores tazas de caf calentadas de 2022

Cmo automatize seu iPhone segn el tiempo, la actividad ou la ubicacin

"Eso debe haber sido antes de mi tiempo"

Por qu la NASA enva a Snoopy a la Luna? – Revisando geek

¿Qué es case em Bash?

A instrução case Bash tem um conceito similar com a instrução switch Javascript ou C. A principal diferença é que, uma diferença da instrução switch C, a instrução Case Bash não continua buscando uma coincidência de padrão uma vez que se encontra e executa.

¿Como funciona o caso de comando?

A sentença CASE seleciona um entre um conjunto de sentenças para execução. A função CASE seleciona um entre um conjunto de expressões para avaliar e desenvolver o valor de retorno da expressão selecionada como seu valor.

¿Qué es Bash y para qué sirve?

Bash é um processador de comandos que geralmente executa em uma janela de texto donde o usuário escreva os comandos que causam as ações. Bash também pode ler e executar comandos de um arquivo, chamar script de shell.

¿Qué es case no Linux?

O comando case no Linux é a melhor alternativa cuando tuvimos que usar múltiplos if / elif em uma única variável. Se utilizar para executar os comandos baseados na coincidência de patrones.

Ir arriba