Buscar

Aula08 SOS 2015 Shell script

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Shell scripts (1ª parte)
 SOS (ADS) – Prof. Alberto
1
Shell e Shell scripts
 Shell scripts são conjuntos de comandos armazenados em um arquivo texto que são executados seqüencialmente, como um programa.
 Shell, ou interpretador de comandos, é o programa executado após o login, responsável por "pegar" os comandos digitados pelo usuário, interpretá-los e executar uma determinada ação. 
Quando você digite no console "ls" e pressiona <enter>, o shell lê essa string e verifica se existe algum comando interno (embutido no próprio shell) com esse nome: se houver, ele executa esse comando interno, caso contrário, ele vai procurar no PATH por algum programa que tenha esse nome; se encontrar, ele executa esse programa, caso contrário, ele retorna uma mensagem de erro. Para cada terminal ou console aberto, existe um shell sendo executado.
Existem diversos tipos de shell: bash, csh, ksh, ash, etc. O mais utilizado atualmente é o bash (GNU Bourne-Again SHell). 
 SOS (ADS) – Prof. Alberto
2
Shell e Shell scripts - variáveis
Uma variável é onde o shell armazena determinados valores para utilização posterior.
Toda variável deve possuir um nome e um valor associado a ela, podendo ser este último vazio. Para listar as variáveis atualmente definidas no shell digite o comando set .
Para se definir uma variável, basta utilizar a síntaxe: nome_da_variável=valor. 
Por exemplo, queremos definir uma variável chamada "cor_fundo" com o valor de "azul":
cor_fundo=“azul” 
Para utilizar o valor de uma variável, é só colocar um sinal de "$" seguido do nome da variável:
echo cor_fundo 
cor_fundo
echo $cor_fundo 
azul 
Em alguns casos, é aconselhável colocar o nome da variável entre chaves ({}). Por exemplo, para imprimir "azul-escuro“:
echo ${cor}-escuro 
azul-escuro 
 SOS (ADS) – Prof. Alberto
3
Shell e Shell scripts - variáveis
Algumas variáveis já são predefinidas no shell, como o PATH, que armazena o caminho dos programas que podem ser executados sem estar no diretório onde os mesmos se encontram. 
Exemplo:
echo $PATH 
/usr/local/bin:/usr/bin: /bin: /usr/X11R6/bin: /usr/openwin/bin: /usr/games: /opt/kde/bin: /usr/share/texmf/bin: /etc/script 
Ou seja, ao se digitar um comando, como "ls", o shell vai começar a procurá-lo em /usr/local/bin, se não encontrá-lo, vai procurar em /usr/bin e assim por diante. 
Note que os diretórios são separados por um sinal de dois pontos (:).
 SOS (ADS) – Prof. Alberto
4
Shell e Shell scripts - exemplo
A primeira linha de todo shell script deve começar com algo do tipo: #!/bin/bash :
Esta linha indica com qual shell deverá ser executado o script. 
Nesse exemplo, estamos falando para o shell atual executar o script com o shell /bin/bash.
Se quisermos que o nosso script seja executado com o shell csh, devemos colocar nessa primeira linha: #!/bin/csh .
O shell script pode ser criado a partir de qualquer editor de programas:
Exemplo:
#!/bin/bash
echo ‘Olá, mundo!’
date
O script criado deverá ter a permissão para ser executado. Isso poderá ser feito através de chmod: chmod 755 nome-do-script
Para executar o script: ./nome-do-script
 SOS (ADS) – Prof. Alberto
5
Shell e Shell scripts - parâmetros
Suponha que em determinado shell script você necessite passar um parâmetro, como um nome de arquivo para um comando find, por exemplo:
find –name / nome-arquivo –print
Se digitarmos no script dessa forma, teremos o nome-do-arquivo “travado” sempre em um nome. Devemos então trocar o nome-do-arquivo por uma variável que é percebida pelo shell script como parâmetro(s) passado junto ao nome do script, quando este é executado.
Assim, teremos:
#!/bin/bash
echo $1 ‘ procura pelo arquivo ‘ $2
find –name / $2 –print
Onde $1 e $2 serão as variáveis que armazenarão o 1º e 2º parâmetro, respectivamente. 
Ao chamarmos o script – supondo o nome dele ser procura – digitamos
 procura nome-usuario nome-do-arquivo
 SOS (ADS) – Prof. Alberto
6
Shell e Shell scripts - interação
Se você quiser criar um script em que o usuário deve interagir com ele, é possível que você queira que o próprio usuário defina uma variável, e para isso usamos o comando read, que dará uma pausa no script e ficará esperando o usuário digitar algum valor e teclar enter.
 Exemplo:
echo ‘Digite um nome de arquivo: ‘; read nomearq
Ao rodar:
Digite um nome de arquivo: teste.txt
Resultado de echo $nomearq
teste.txt
 SOS (ADS) – Prof. Alberto
7
Shell e Shell scripts - Escape
Toda vez que executamos um programa em Unix, ele retorna um código de escape ao finalizar, que reflete a condição em que o programa finalizou. Se terminou OK, ele retorna 0. Se ocorreu algum problema, o programa retorna um código diferente de 0, geralmente variando com o problema ocorrido.
Esse código de retorno é extremamente importante em shell script, pois é assim que testamos se uma certa ação ocorreu bem ou teve problemas.Esse código é armazenado pelo bash numa variável chamada "?“.
Por exemplo:
ls /boot 
 resultado…
echo $? 0 
Ou seja, o "ls" foi executado normalmente, retornando 0. Agora vamos executá-lo num diretório que não existe:
ls /diretorio_invalido 
/bin/ls: /diretorio_invalido: Arquivo ou diretório não encontrado 
echo $? 1 
 SOS (ADS) – Prof. Alberto
8
Shell e Shell scripts - if
O bash nos oferece, entre outros, o comando IF (ele é um comando embutido no bash e não um programa como o "ls", o "cp" etc.). Ele representa a estrutura condicional composta, junto com o else.
Sintaxe:
if [condição]; 
then comandos1; 
else comandos2; 
fi; 
Se [condição] for verdadeira, os comandos1 são executados. Se for falsa, os comandos2 são. Geralmente o código "0" (zero) significa que o comando foi executado perfeitamente e terminou bem. Códigos maiores que zero significam que alguma coisa de errado ocorreu.
É assim que o IF verifica uma condição. Se o seu código de retorno for zero, então ela é considerada verdadeira. Caso contrario, ela é falsa.
A condição deverá ser um comando então. 
 SOS (ADS) – Prof. Alberto
9
Shell e Shell scripts – if e teste
Exemplo:
if ls /boot; then echo "O diretório existe."; else echo "Diretório inválido."; fi; 
O comando test
Quando queremos avaliar "expressões", ou seja, verificar se uma variável é igual a outra, se ela esta vazia etc, utilizamos o test
Ele funciona da seguinte maneira: test [expressão].
O test pode testar operações de três tipos: strings, arquivos e aritméticas.
Expressões usando strings:
 
O test pode apenas comparar strings, ou seja, verificar se uma é igual a outra, e verificar se uma string é vazia ou não. Exemplo:
test "a" = "a" 
echo $? 
 SOS (ADS) – Prof. Alberto
10
Shell e Shell scripts – test
Exemplo:
test -z "neo" 
echo $? 
1 
test -z "" 
echo $? 
0 
test -n "neo" 
echo $? 
0 
test -n "" 
echo $? 
1 
A opção "-z" verifica se é vazio, e "-n" se não é vazio. No primeiro caso, ele testa se "neo" é uma string vazia, retornando falso. Já no segundo caso, como "" é vazia, retorna verdadeiro. O terceiro e quarto são semelhantes aos primeiros, mas com "-n".
 SOS (ADS) – Prof. Alberto
11
Shell e Shell scripts – test
Expressões com arquivos: 
Os testes que podem ser feitos com arquivos são para verificar determinadas características, como se ele existe, se é executavel, se é um link simbólico, se é um diretório etc. Alguns exemplos:
A opção "-e" verifica apenas se um arquivo existe e a opção "-d" verifica se o arquivo é um diretório. A opção "-nt" verifica se o primeiro arquivo é mais novo que o segundo (nt = newer than) e "-ot" verifica se o primeiro é mais velho que o segundo (od = older
than):
test -e /vmlinuz 
echo $? 
0 
test -d /vmlinuz 
echo $? 
1 
test -e /usr 
echo $? 
0 
test -d /usr 
echo $? 
0 
test /usr -nt /vmlinuz 
echo $? 
0 
test /usr -ot /vmlinuz 
echo $? 
1
 SOS (ADS) – Prof. Alberto
12
Shell e Shell scripts – test
Expressões com arquivos: 
A seguir, temos uma lista de várias opções disponíveis:
 -b arquivo 	Verdadeiro se arquivo é um arquivo de bloco, como /dev/hda. 
 -c arquivo 	Verdadeiro se arquivo é um arquivo de caracter, como /dev/tty1. 
 -d arquivo 	Verdadeiro se arquivo é um diretório. 
 -e arquivo 	Verdadeiro se arquivo existe. 
 -f arquivo 	Verdadeiro se arquivo existe e é um arquivo comum. 
 -s arquivo 	Verdadeiro se arquivo existe e não é vazio. 
 -h arquivo 	Verdadeiro se arquivo é um link simbólico. 
 -p arquivo 	Verdadeiro se arquivo é um "named pipe" (fifo, lifo, etc). 
 -S arquivo 	Verdadeiro se arquivo é um "socket". 
 -k arquivo 	Verdadeiro se arquivo tem seu "sticky bit" ligado. 
 -r arquivo 	Verdadeiro se arquivo pode ser lido pelo usuário atual. 
 -w arquivo	Verdadeiro se arquivo pode ser escrito pelo usuário atual. 
 -x arquivo 	Verdadeiro se arquivo pode ser executado pelo usuário atual. 
 -O arquivo 	Verdadeiro se arquivo pertence ao usuário atual. 
 -G arquivo 	Verdadeiro se arquivo pertence ao grupo do usuário atual. 
 -N arquivo 	Verdadeiro se arquivo foi modificado desde a última vez que foi lido.
 SOS (ADS) – Prof. Alberto
13
Shell e Shell scripts – test
Expressões aritméticas
Expressões aritméticas consistem com comparar dois números, verificando se são iguais, ou se o primeiro é maior que o segundo, etc.
Infelizmente não podemos apenas utilizar os símbolos conhecidos para igual (=), maior que (>), menor que (<) etc. Temos que usar operadores reconhecidos pelo "test".
 Assim, não podemos fazer: "test 1 = 1“ : devemos utilizar o operador "-eq" (equal): "test 1 -eq 1". 
A seguir, temos uma lista dos operadores:
-eq (equal): Igual; 
-ne (not-equal): Não Igual (diferente); 
-lt (less than): Menor que (<); 
-le (less than or equal): Menor ou igual ( <= ); 
-gt (greater than): Maior que (>); 
-ge (greater than or equal): Maior ou igual (>=); 
 SOS (ADS) – Prof. Alberto
14
Shell e Shell scripts – test
Expressões aritméticas
Alguns exemplos:
test 1 -lt 2 
echo $? 
0 
test 1 -gt 2 
echo $? 
1 
test 2 -gt 1 
echo $? 
0 
test 2 -ge 2 
echo $? 
0 
 SOS (ADS) – Prof. Alberto
15
Shell e Shell scripts – Consierações
 o comando "test" pode ser substituido por um par de colchetes [ ]. Assim, o comando test "a" = "b" pode ser escrito como [ "a" = "b" ] .
Essa segunda nomenclatura fica mais fácil e simples, principalmente quando estamos utilizando IF:
if [ -e /vmlinuz ]; é mais intuitivo e simples que if test -e /vmlinuz; .
 Podemos utilizar variáveis no lugar dos argumentos (caso contrário, ficaria difícil utilizar comandos de condicionais em shell script). Assim, se tivermos duas variáveis, valor1=5 e valor2=8:
[ "$valor1" = "$valor2" ] , [ "$valor1" -lt "$valor2" ] etc.
É importante colocarmos os valores entre aspas duplas ("), pois assim o bash pode substituir o que se encontra dentro dessas aspas. Se colocarmos entre aspas simples ('), impedimos o bash de alterar o que se encontra dentro delas. Se não utilizarmos as aspas duplas, vamos ter problemas, principalmente ao trabalharmos com string.
 SOS (ADS) – Prof. Alberto
16
Shell e Shell scripts – Considerações
Exemplo:
a=10
b=20
if test “$a” –lt “$b”; then echo “primeira menor”; else echo “segunda maior”;fi
Por exemplo, queremos comparar dois nomes, que se encontram em duas variaveis:nome1="fulano de tal" e nome2="ciclano".Montando nossa expressão condicional: [ "$nome1" = "$nome2" ].O bash irá expandir isso para: [ "fulano de tal" = "ciclano" ], ficando claramente definidos o primeiro e o segundo argumento.
Agora, se não usarmos aspas: [ $nome1 = $nome2 ]. O bash irá expandir isso para: [ fulano de tal = ciclano ]. Perceba que os argumentos se misturam e o bash não vai saber o que comparar.Por isso é importante colocarmos os argumentos entre aspas duplas.
Pode-se inserir comentários por linhas nos shell scripts: a linha deverá começa por # .
 SOS (ADS) – Prof. Alberto
17
Shell e Shell scripts – Considerações
Outro exemplo:
#!/bin/bash
# exemplo de if e test
clear
echo “digite o primeiro valor”
read val1
echo “digite o segundo valor”
read val2
if [ “$val1” –eq “$val2” ]
then
 echo “São iguais”
else
 echo “São diferentes”
fi
echo “fim.” 
 SOS (ADS) – Prof. Alberto
18

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais