Quem já fez alguma matéria de programação na faculdade ou algum curso técnico ou até mesmo algum curso ou vídeo-aulas esta se identificando bastante com os tópicos de shell script e é a mesma ideia, porém para quem não conhece irei explicar.
A estrutura Switch/case é como se fosse uma estrutura if porém não aceita operações logicas como utilizamos, e ela já possui todas as opções(cases) definidos.
Estrutura de um Switch/Case:
case OPCAO in 1) echo "Um" ;; #Se foi informado a opção 1 então realiza o echo, no caso o parâmetro é numero dois) echo "2" ;; # Podendo ser texto *) echo "Opcao Invalida!" ;; # Algo que não se enquadre acima esac
Vamos a um exemplo acho que irá ajudar esclarecer, switchcaseEx1.sh:
#!/bin/bash case $1 in 1) echo "Um" ;; 2) echo "dois" ;; 3) echo "tres" ;; 4) echo "quatro" ;; 5) echo "cinco" ;; 6) echo "seis" ;; 7) echo "sete" ;; 8) echo "oito" ;; 9) echo "nove" ;; 10) echo "dez" ;; *) echo "Opcao Invalida!" ;; esac
Saída:
cleiton@linuxVM:~/projetos/shell script$ cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx1.sh Opcao Invalida! cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx1.sh 5 cinco cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx1.sh 9 nove cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx1.sh 0 Opcao Invalida! cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx1.sh 1 Um cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx1.sh 3 tres cleiton@linuxVM:~/projetos/shell script$
Agora vamos com um exemplo usando texto como opção, switchcaseEx2.sh:
#!/bin/bash case $1 in um) echo "1" ;; dois) echo "2" ;; tres) echo "3" ;; quatro) echo "4" ;; cinco) echo "5" ;; seis) echo "6" ;; sete) echo "7" ;; oito) echo "8" ;; nove) echo "9" ;; dez) echo "10" ;; *) echo "Opcao Invalida!" ;; esac
Saída:
cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx2.sh um 1 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx2.sh tres 3 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx2.sh dez 10 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx2.sh nove 9 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx2.sh Nove Opcao Invalida! cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx2.sh Dois Opcao Invalida! cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx2.sh dois 2
Agora a sacada, usando texto, numero e/ou ambas combinações no switchcaseEx3.sh:
#!/bin/bash case $1 in 1) echo "um" ;; dois) echo "2" ;; tres) echo "3" ;; quatro) echo "4" ;; 5) echo "cinco" ;; 6|SEIS|Seis|seis) echo "6" ;; sete) echo "7" ;; oito) echo "8" ;; nove) echo "9" ;; dez) echo "10" ;; *) echo "Opcao Invalida!" ;; esac
Saída:
cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh cinco Opcao Invalida! cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh 5 cinco cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh quatro 4 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh seis 6 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh Seis 6 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh SEIS 6 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh seis 6 cleiton@linuxVM:~/projetos/shell script$ ./switchcaseEx3.sh 6 6
Com o case 6 foi possível 4 tipos de entradas, muito útil este tipo de uso.
Estrutura de um Select:
Esse é legal, imagine um menu pronto para o operador, eis o comando. Segue a estrutura abaixo:
#!/bin/bash #select NOME_VAR in lista_de_opcoes select VAR_CONTROLE in opcao1 opca2 opcao3 ... nada do echo "Opcao escolhida $VAR_CONTROLE" break; done
Agora vamos ao exemplo selectEx1.sh:
#!/bin/bash select SUCO in laranja abacaxi caju uva limao do echo "Voce escolheu o suco de $SUCO" done
Saída:
cleiton@linuxVM:~/projetos/shell script$ ./selectEx1.sh 1) laranja 2) abacaxi 3) caju 4) uva 5) limao #? 3 Voce escolheu o suco de caju #?
Como podemos ver no exemplo acima, apenas colocamos uma lista de opções e ele gera o “menu”, mas tem um inconveniente, eu escolho uma opção ele mostra ela porém aguarde informar outra opção, as vezes isso não é desejado, resolvendo isso facilmente no selectEx2.sh:
#!/bin/bash select SUCO in laranja abacaxi caju uva limao do echo "Voce escolheu o suco de $SUCO" break; done
Saída:
cleiton@linuxVM:~/projetos/shell script$ ./selectEx2.sh 1) laranja 2) abacaxi 3) caju 4) uva 5) limao #? 4 Voce escolheu o suco de uva cleiton@linuxVM:~/projetos/shell script$
Hum, legal heim. Porém nosso script inicia, mas nenhuma mensagem é exibida sobre as opções como “Escolha um suco” para isso teria que usar um echo antes, mas não vamos usar porque conseguimos isso com o select também, vamos ao exemplo selectEx3.sh:
#!/bin/bash PS3="Selecione o suco desejado: " select SUCO in laranja abacaxi caju uva limao do echo "Voce escolheu o suco de $SUCO" break; done
Saída:
cleiton@linuxVM:~/projetos/shell script$ ./selectEx3.sh 1) laranja 2) abacaxi 3) caju 4) uva 5) limao Selecione o suco desejado: 2 Voce escolheu o suco de abacaxi cleiton@linuxVM:~/projetos/shell script$
Enquanto PS1 e PS2 são para interações com o prompt o PS3 é para o select, essa foi a grande sacada deste exemplo.
E dentro do select você pode usar vários outros comandos e estruturas que vimos aqui como if e else e o próprio switch/case, vamos ao exemplo selectEx4.sh:
#!/bin/bash PS3="Informe a linguagem que deseja estudar: " select LINGUAGEM in c c++ php javascript python perl shell c# vb java nenhuma do echo "Escolheu $LINGUAGEM " case $LINGUAGEM in php | javascript) echo "Voce ira programar para web";; c | c++) echo "Voce ira programar embarcado ou device driver";; python | perl | shell | c# | vb | java) echo "Voce ira programar para servidor, desktop, web ou mobile.";; nenhuma) echo "Quem sabe futuramente $LINGUAGEM nao sera suportada" break;; *)echo "ERRO: Linguagem nao suportada nesta etapa";; esac break; done
Saída:
cleiton@linuxVM:~/projetos/shell script$ ./selectEx4.sh 1) c 4) javascript 7) shell 10) java 2) c++ 5) python 8) c# 11) nenhuma 3) php 6) perl 9) vb Informe a linguagem que deseja estudar: 5 Escolheu python Voce ira programar para servidor, desktop, web ou mobile. cleiton@linuxVM:~/projetos/shell script$ ./selectEx4.sh 1) c 4) javascript 7) shell 10) java 2) c++ 5) python 8) c# 11) nenhuma 3) php 6) perl 9) vb Informe a linguagem que deseja estudar: 10 Escolheu java Voce ira programar para servidor, desktop, web ou mobile. cleiton@linuxVM:~/projetos/shell script$ ./selectEx4.sh 1) c 4) javascript 7) shell 10) java 2) c++ 5) python 8) c# 11) nenhuma 3) php 6) perl 9) vb Informe a linguagem que deseja estudar: 11 Escolheu nenhuma Quem sabe futuramente nenhuma nao sera suportada cleiton@linuxVM:~/projetos/shell script$ ./selectEx4.sh 1) c 4) javascript 7) shell 10) java 2) c++ 5) python 8) c# 11) nenhuma 3) php 6) perl 9) vb Informe a linguagem que deseja estudar: 1 Escolheu c Voce ira programar embarcado ou device driver cleiton@linuxVM:~/projetos/shell script$
Acho que deu para compreender a ideia do switch/case e o select, o tipo de saída e resultado que cada um possui e os recursos que podemos combinar, entendendo este post você pode fazer diversos scripts com if, else, switch/case, for, while, uso de break e sem break e seu efeito, crie scripts para ir treinamento e testando os recursos até aqui passado.
Até a próxima!
Shell Script – Switch/case e select by Cleiton Bueno is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.