Upload
leonardo-dos-reis
View
222
Download
0
Embed Size (px)
DESCRIPTION
Shell
Citation preview
Comandos de controle
shift
O comando shift desloca a posio para a esquerda de todos os parmetros armazenados navarivel especial $* e diminui o total de parmetros armazenados na varivel especial $#,caso no seja especificado a posio a ser descolocada o padro deslocar uma posio.
Por exemplo, supondo que temos os parmetros 1 2 3 4 5 ($*) num total de 5 parmetros($#), usando o comando shift sem especificar a posio descolocado uma posio, restando4 parmetros 2 3 4 5, aps isso deslocando duas posies para a esquerda teremos apenasos parmetros 4 e 5 e um total de 2 parmetros.
Sintaxe:
shift posio
Exemplo 1:
O exemplo abaixo temos 5 parmetros onde deslocado uma posio e depois mais duasposies a esquerda, restando 2 parmetros apenas.
Executando o script passando os parmetros
$ ./script 1 2 3 4 5
#!/bin/bashecho "total de parmetros iniciais: $#"echo "os parmetros sao: $*"
1
shiftecho "total de parametros aps descolar uma posio: $#"echo "os parmetros restantes sao: $*"shift 2echo "total de parametros aps descolar duas posies: $#"echo "os parmetros restantes sao: $*"
Sada do script
total de parmetros iniciais: 5
os parmetros so: 1 2 3 4 5
total de parmetros aps descolar uma posio: 4
os parmetros restantes so: 2 3 4 5
total de parmetros aps descolar duas posies: 2
os parmetros restantes so: 4 5
Exemplo 2:
O exemplo abaixo passado trs parmetros onde sero armazenados na varivel especial$#, enquanto for maior que 0 o script executado, sendo que a medida que cada linha doloop while executado diminudo uma posio a esquerda dos parmetros como mostra atabela abaixo:
While 1posio
2posio
3 posio
1 linha 1 2 32 linha 2 33 linha 3
2
Executando o script passando os parmetros
$ ./script 1 2 3
#!/bin/bashwhile [ $# -gt 0 ]do
echo "posio do parmetro aps descolocar uma posio: $1"shift
done
Sada do script
posio do parmetro aps descolocar uma posio: 1
posio do parmetro aps descolocar uma posio: 2
posio do parmetro aps descolocar uma posio: 3
exit
Este comando para de executar comandos em um script onde informado um valor de statusde sada que pode ser 0 (status de comando com sucesso) ou um valor diferente de 0 (statusde erro). Caso no seja especificado um valor de status, utilizado o valor de status do ltimocomando executado.
Sintaxe:
3
shift status
Exemplo:
Executando o script passando os parmetros
$ ./script restart
#!/bin/bashif [ $* = "start" ]then
echo "comando $* executado com sucesso !"exit 0 # status de sucesso
elif [ $* = "stop" ]then
echo "comando $* executado com sucesso !"exit # status de sucesso
elseecho "Use: $0 (start|stop)"exit 1 # status de erro
fi
Sada do script
Use: (start|stop) em ./teste
trap
Executa um ou mais comandos aps receber um sinal de sada, que pode ser os principaisabaixo:
4
Sinal Significado0 Sada normal de um programa (sada do shell)1 Kill -HUP (mata processos)3 Quit (Sai)2 Interrupo (Control + C)9 Kill (mata processos)
15 Kill (mata processos)
Sintaxe:
trap `comando1; comando2;` sinal1 sinal2
Exemplo:
Crie o script abaixo
#!/bin/bashwhile truedo
trap `ls -R /; exit;` 0 1 2 9 15done
Execute o script e envie um sinal para o comando trap, pressione Control + C que equivaleao sinal 2 (Interrupo) ou abra um terminal e execute o comando ps e depois kill ou killallespecificando o nmero ou nome do processo e depois repare o script ser interrompido.
$ ./script
$ ps -aux | grep script
5
aluno1 6795 4.9 16.0 74424 71900 pts/0 R+ 17:53 0:09 /bin/bash ./script
aluno1 6864 0.0 0.1 3020 784 pts/1 S+ 17:56 0:00 grep script
$ kill 6795ou
$ killall script
break
Encerra um comando de repetio com loop (for, while, until ou select) aps uma ou maisrepeties.
Exemplo:
No exemplo abaixo a varivel x inicia com o valor inicial 0, aps isso feito um teste lgicoverificando se o valor da varivel x menor ou igual a 10, e depois feito outro teste lgicoverificando se a varivel x igual a 5, caso seja verdadeiro o comando break executado,caso contrrio o valor de sada da varivel x exibido na tela.
#!/bin/bashfor((x=0; x
01
2
3
4
continue
Este comando faz com que o comando de repetio em loop v direto para o testecondicional, caso seja verdadeiro, o comando executado novamente
Exemplo:
No exemplo abaixo feito um teste lgico verificando se a varivel x menor que 5, casoseja verdadeiro, o comando continue executado, caso contrrio, o loop continua suaexecuo e a varivel x incrementada de 1 depois que torna-se maior que 5 aps o testecondicional.
#!/bin/bashx=0while truedo
x=`expr $x + 1`
if [ $x -lt 5 ]then
echo "valor de x antes do teste condicional $x"continue
elseecho ""x=`expr $x + 1`echo "valor de x depois do teste condicional $x"
7
breakfi
done
Sada do script
valor de x antes do teste condicional 1
valor de x antes do teste condicional 2
valor de x antes do teste condicional 3
valor de x antes do teste condicional 4
valor de x depois do teste condicional 6
8
comandos_controle