Baixe o app para aproveitar ainda mais
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
Compartilhar