Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação para Servidores Aula 13 Sumário • Revisão para AV1 2 Shell Script • O que é o Shell? – É uma aplicação do SO que consiste em um interpretador de comandos e tem como objeEvo estabelecer uma interface entre o usuário e o kernel; • E Shell Script? – É um arquivo de texto simples que contém um conjunto de instruções que podem ser interpretadas pelo Shell e resultam na realização de alguma tarefa, por exemplo, ralizar um back-‐up do sistema u configurar vários servidores distribuídos geográficamente. 3 Shell Script • Principais razões para uElização: – Simplicidade – é possível expressar operações complexas de forma simples. – Portabilidade – por ser universal entre sistemas Unix, existe uma grande chance de um shell script escrito para um sistema ser transferido para outro sem necessidade de alterações. – Facilidade de desenvolvimento – pode-‐se desenvolver um shell script poderoso e úEl em pouco tempo. 4 Shell Script • Procedimento para criação e uElização de um shell script: – Abrir um editor de textos simples; – Digitar os comandos e salvar o arquivo com o nome que desejar (preferencialmente com extensão .sh); – Alterar a permissão do arquivo para que ele possa ser executado: chmod +x meu_script.sh – Executar o script passando os argumentos necessários: ./meu_script.sh param1 param2 param3... 5 Variáveis • UElizadas para armazenar informações; • São compostas por um nome e um valor; • Exemplos: x=123; y=abacate; nome=“José Pereira da Silva” • Os nomes das variáveis devem sempre começar por uma letra ou sublinhado. Os demais caracteres do nome podem ser letras, dígitos ou sublinhado; – Exemplos válidos: tel _y b1 A_2 n_alunos IDADE___2 – Exemplos inválidos: 1x _y.6 a1+ num-alunos sal/hora 6 Variáveis • Para atribuir um valor a uma variável, fazemos referência apenas ao seu nome e o operador que fará a atribuição. Exemplos: x=20; bairro="Vila Cruzeiro" read nome • Para acessar o valor armazenado em uma variável, usamos o operador de subsEtuição $ antes do nome da variável. Exemplos: echo $nome; x=$y 7 Comandos de E/S • Para imprimir algo na saída padrão: – echo • Para ler um valor da entrada padrão: – read • Exemplos: echo "Por favor, digite o seu nome" read nome echo "Seja bem-vindo, $nome." 8 Caracteres Especiais • # -‐ usado para inserir comentários que não serão interpretados pelo Shell; • ; -‐ separador de comandos. Usado quando queremos escrever mais de um comando na mesma linha; • $ -‐ subsEtuição de variável. Troca o nome da variável pelo seu valor; 9 Caracteres Especiais • Caracteres de escape: usados para informar ao Shell que um caractere especial deve ser interpretado literalmente: • \ -‐ uElizado para um único caractere; • " -‐ uElizado para cadeias de caracteres. Preserva o significado literal da maioria dos caracteres; • ' -‐ uElizado para cadeias de caracteres. Preserva o significado literal de todos os caracteres. 10 Caracteres Especiais • ` -‐ acento grave. Faz a subsEtuição de um comando pelo seu resultado. Exemplo: lista=`ls -l`, armazena a lista de arquivos na variável lista; • | -‐ pipe. Transforma a saída de um comando na entrada do próximo. Exemplo: echo "Existem `who | wc –l` usuarios conectados" 11 Caracteres Especiais • > -‐ redirecionamento de saída para um arquivo. Se o arquivo exisEr, apaga o conteúdo anterior; • >> -‐ redirecionamento de saída para um arquivo. Se o arquivo exisEr, acrescenta o novo conteúdo ao final e mantém o anterior; • < -‐ redirecionamento de entrada para um arquivo; 12 Argumentos • Argumentos são passados para os comandos ou scripts a parEr da linha de comando; • Exemplos de comandos e seus argumentos: cd $HOME; mkdir bin; mv nuser bin • Para acessar os argumentos passados para um script, devemos usar as variáveis especiais $0, $1, $2, $3, ... , etc; – Onde $0 é o nome do próprio script, $1 é o primeiro argumento, $2 o segundo argumento, e assim por diante; 13 Expansão aritméEca • Para realizarmos operações matemáEcas com números INTEIROS em shell script, usamos: – Comando let: let n=100+100 echo "n = $n" – Operadores (( )) e $(( )): n=0 ((n=n+1)) echo "n = $n" echo 20 * 30 = $((20*30)) 14 Testes ou condicionais • O comando if faz a verificação do status de saída de um comando. Em caso de sucesso, executa uma sequência de comandos. Caso contrário, executa outra sequência de comandos. Exemplo: if grep $1 agenda.txt > null; then echo "Tenho o telefone do(a) $1" else echo "NÃO tenho o telefone do(a) $1" fi 15 • Comando test: usado para testar condições em shell scripts, retornando através do seu estado de saída; • Serve para comparar números, strings ou testar atributos e estados de arquivos; • Dada a sua uElidade, é normalmente usado em conjunto com o comando if; • Exemplo: if test "abacate" = "banana"; thenecho "São iguais"; else echo "São diferentes"; fi Testes ou Condicionais 16 Testes ou Condicionais • O comando test possui uma forma variante, até mais uElizada que a anterior: [ ... ]. Exemplo: if test "abacate" = "banana"; then echo "São iguais"; else echo "São diferentes"; fi • Equivalente a: if [ "abacate" = "banana" ]; then echo "São iguais"; else echo "São diferentes"; fi 17 Operadores de comparação • Comparação de inteiros: -eq -‐ igual (equal) -ne -‐ diferente (not equal) -gt -‐ maior que (greater than) -ge -‐ maior ou igual (greater than or equal) -lt -‐ menor que (less than) -le -‐ menor ou igual (less than or equal) • Exemplo: if [ 2 -ne 3 ]; then echo "São diferentes!" fi 18 Operadores de comparação • Comparação de strings: = -‐ igual == -‐ igual (mesmo que =) != -‐ diferente < -‐ menor que (em ordem alfabéEca ASCII) > -‐ maior que (em ordem alfabéEca ASCII) -z -‐ string é nula (tem tamanho zero) -n -‐ string não é nula OBS: para usar os operadores < e >, com o comando test devemos usar uma \ precedendo-‐os. Ex. [ "abacate" \< "batata" ] retorna V. 19 • Comparação composta: – E lógico: associa duas expressões e retorna verdadeiro se AMBAS são verdadeiras. Qualquer outro caso, retorna falso; && - operador do shell; -a - operador do comando test; – OU lógico: associa duas expressões e retorna verdadeiro se PELO MENOS UMA das expressões é verdadeira. Caso contrário, retorna falso; || - operador do shell; -o - operador do comando test; Operadores lógicos 20 Testes em arquivos • Alguns operadores para teste em arquivos: -e : arquivo existe; -d : é um diretório; -f : é um arquivo comum (nem diretório nem disposiEvo); -s : não tem tamanho zero; -r : tem permissão de leitura; -w : tem permissão de escrita; -x : tem permissão de execução ou é um diretório onde se pode realizar uma pesquisa; 21 Testes em arquivos • Exemplo 1: if [ -f $arq ]; then echo "$arq é um arquivo comum" else echo "$arq não existe ou não é comum" fi • Exemplo 2: if [ ! -f $arq ]; then echo "$arq não existe ou não é comum" exit 1; fi 22 Comando case • O Shell possui o comando case que oferece a funcionalidade de casamento de padrões. Sua sintaxe é: case "$variavel" in "$condicao1") comando... ;; "$condicao2") comando... ;; esac 23 Comando case • Exemplo: case "$aquitetura" in i386) echo "máquina 80386" ;; i486) echo "máquina 80486" ;; i586) echo "máquina Pentium" ;; i686) echo "máquina Pentium2+" ;; *) echo "outro tipo de maquina" ;; esac 24 Variáveis $# $* $@ • $# fornece o número total de argumentos passados para o shell script; • $* representa todos os argumentos passados em uma única string; • $@ representa todos os argumentos passados strings separadas; • A principal diferença entre $* e $@ é que a segunda preserva eventuais espaços em branco embuEdos dentro dos argumentos (exemplo adiante); 25 Comando for • Interage sobre uma lista de objetos, executando o bloco de comandos para cada objeto; – Objetos podem ser qualquer coisa em forma de lista; • Exemplos: – a b c d (objetos: letras a, b, c, d); – $1 $2 $3 (objetos: valores dos três primeiros argumentos); – "$var1" "$var2" "$var3" "$var4" (objetos: os valores das variáveis var1, var2, var3, e var4); – *.txt (objetos: todos os arquivos com extensão txt); – $@ (objetos: todos os argumentos passados para o script); 26 Comando for • Exemplos: for j in "$@"; do echo $j done for i in *.txt; do cat < $i done z=`ls` for k in $z; do echo $k done 27 Comando while • O while testa uma condição no início do laço e fica em loop enquanto essa condição for verdadeira – Ao contrário do laço for, o while é uElizado em situações onde o número de repeEções do laço não é conhecido de antemão. • Sintaxe: while condição; do comando_1 comando_2... comando_n done 28 Comando while • Exemplo: script que fica solicitando ao usuário que digite vários números até que ele entre com o valor 0. Neste momento, imprime a soma dos números. read -p "Numero (0 para sair): " num soma=0 while [ $num -ne 0 ]; do let "soma+=num" read -p "Numero (0 para sair): " num done echo "Soma = $soma" 29 Comando until • O until testa por uma condição no início de um laço e fica em loop enquanto esta condição for falsa: – Funcionamento oposto ao while; • Sua sintaxe é: until condição; do comando_1 comando_2 ... comando_n done 30 Comando until • Exemplo: LIMIT=$1 var=0 until [ "$var" -ge $LIMIT ]; do echo -n "$var " let "var+=1" done 31 Comando shift • O comando shift serve para acessarmos os parâmetros passados a um script de uma outra maneira; – Inicialmente, usamos o $1 para acessar o primeiro argumento; – Em seguida, executamos o comando shift, que faz com que o primeiro argumento seja eliminado e o segundo argumento se transforme no primeiro; – Agora, se acessarmos novamente o argumento $1, receberemos o valor do segundo parâmetro; – Pode-‐se repeEr este processo por tantas vezes quantos forem os argumentos. 32 Comando shift • Exemplo 1: imprime todos os argumentos passadoswhile [ "$#" -gt 0 ]; do echo "$1" shift done • Exemplo 2: imprime metade dos argumentos passados while [ "$#" -gt 0 ]; do echo "$1" shift 2 done 33 Redirecionamento • Redirecionamento da entrada do comando read: while IFS=" " read nome fone; do echo "nome = $nome" echo "fone = $fone" echo "----------------" done < agenda.txt – Este script redireciona a entrada do comando read para o arquivo agenda.txt; – A cada passo, faz-‐se a leitura das variáveis nome e fone, até que o arquivo chegue ao fim; – IFS=" " indica que o separador dos campos é um espaço. 34 Manipulação de Strings • Tamanho de uma string: – ${#string}; • Extração de substring: – ${string:pos:tam}; • Remoção de trecho no inicio da string (menor/maior): – ${string#substring} e ${string##substring}; • Remoção de trecho no fim da string (menor/maior): – ${string%substring} e ${string%%substring}; • Troca de substring – ${string/substring/substituta}: troca a primeira ocorrência; – ${string//substring/substituta}: troca todas; 35 Dúvidas? 36
Compartilhar