Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação para Servidores Aula 12 Sumário • Subs8tuição de comandos; • Redirecionamento; • Pipe; • Manipulação de strings. 2 Subs8tuição de Comandos • Permite obter a saída de um ou mais comandos; • Esta saída pode ser u8lizada para, por exemplo: – Usar como argumento para outro comando; – Ser atribuída a uma variável; – Gerar uma lista de argumentos para um loop for; • A forma geral é executar o(s) comando(s) entre crases (`...`). Por exemplo: lista=`ls /etc` – Armazena na variável lista o resultado do comando ls, que representa a lista de arquivos do diretório “/etc”. 3 Subs8tuição de Comandos • A subs8tuição de comandos gera uma lista de elementos com qualquer tamanho. Por exemplo: `echo a b` # 2 elementos: a e b "`echo a b`" # 1 elemento: "a b" `echo` # sem elementos "`echo`" # 1 elemento vazio • U8lizando a subs8tuição de comandos também é possível transferir o conteúdo de um arquivo para uma variável: arq=`cat /etc/passwd` 4 Redirecionamento • Para todo processo existem sempre 3 arquivos abertos por padrão: – stdin entrada padrão (teclado) – stdout saída padrão (monitor) – stderr saída padrão de erros (monitor) • Todo arquivo aberto pode ser redirecionado; • Redirecionamento significa capturar a saída de um arquivo, comando, programa ou script e o enviar como entrada para outro arquivo, comando, programa ou script; 5 Redirecionamento • Operadores de redirecionamento: > redireciona a saída padrão (stdout) para um arquivo. Se o arquivo não exis8r ele será criado, caso contrário será sobrescrito e seu conteúdo anterior será perdido; >> também redireciona a saída padrão (stdout) para um arquivo. Se o arquivo não exis8r ele será criado. Porém, caso o arquivo exista, a saída do comando irá ser acrescentada ao final do arquivo. < redireciona um arquivo para a entrada padrão (stdin); 6 Redirecionamento • Exemplo: ARQ_LOG=script.log echo "1a linha enviada ao log" > $ARQ_LOG echo "2a linha enviada ao log" >> $ARQ_LOG echo "3a linha enviada ao log" >> $ARQ_LOG echo "4a linha enviada ao log" >> $ARQ_LOG echo "5a linha enviada ao log" >> $ARQ_LOG 7 Redirecionamento • O comando a seguir u8liza o programa sort para ordenar um arquivo. A entrada padrão do sort recebe como redirecionamento o arquivo a ser ordenado (nomes.txt) e a saída padrão é redirecionada para o arquivo que conterá as linhas ordenadas pelo sort (nomes_ordenados.txt): sort < nomes.txt > nomes_ordenados.txt 8 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. 9 Pipe • O pipe ( | ) é um mecanismo especial de redirecionamento u8lizado para conectar a saída padrão de um processo à entrada padrão de outro processo; • O processo que se encontra à esquerda do pipe tem sua saída padrão redirecionada automa8camente para a entrada padrão do processo que se encontra à direita do pipe; • Exemplo: cat *.txt | sort | uniq > resultado.txt – Concatena todos os arquivos com extensão .txt (cat *.txt), ordena suas linhas (sort), re8ra as duplicadas (uniq) e salva no arquivo resultado.txt (> resultado.txt); 10 Manipulação de Strings • Obtenção do tamanho de uma string: – ${#string}: retorna o número de caracteres da string; – Exemplo: str="Isto é apenas um teste" echo "A string str possui ${#str} caracteres." – Imprime: A string str possui 22 caracteres. 11 Manipulação de Strings • Extração de substring: – ${string:pos:tam}: extrai de string uma substring de tamanho tam a par8r da posição pos. Caso tam seja omi8do, será extraída a substring que se inicia em pos até o final. O primeiro caractere está na posição 0. Exemplo: str="Talita levou Maria para passear" echo "${str:13:5}" echo "${str:24}" – Exibirá: Maria passear 12 Manipulação de Strings • Remoção de trecho no inicio ou no fim da string: – No inicio: • ${string#substring} remove a menor porção de string que combinar com o padrão de substring; • ${string##substring} remove a maior porção de string que combinar com o padrão de substring; – No fim: • ${string%substring} remove a menor porção de string que combinar com o padrão de substring; • ${string%%substring} remove a maior porção de string que combinar com o padrão de substring; 13 Manipulação de Strings • Exemplo 1: – Padrão = a*C, ou seja, qualquer sequência de caracteres que começa com a e termina com C; stringZ=abcABC123ABCabc menor porção (do inicio) maior porção (do inicio) echo "${stringZ#a*C}" # imprime: "123ABCabc" echo "${stringZ##a*C}" # imprime: "abc" 14 Manipulação de Strings • Exemplo 2: – Padrão = b*c, ou seja, qualquer sequência de caracteres que começa com b e termina com c; stringZ=abcABC123ABCabc menor porção (do fim) maior porção(do fim) echo "${stringZ%b*c}" # imprime: "abcABC123ABCa" echo "${stringZ%%b*c}" # imprime: "a" 15 Manipulação de Strings • Troca de substring – ${string/substring/substituta}: troca a primeira ocorrência de substring por subs8tuta; • Exemplo: str="Talita queria passear com Maria. Maria não aceitou." s2="João" echo ${str/$substr/$s2} – Imprime: "Talita queria passear com João. Maria não aceitou." 16 Manipulação de Strings • Troca de substring – ${string//substring/substituta}: troca todas as ocorrências de substring por subs8tuta; • Exemplo: str="Talita queria passear com Maria. Maria não aceitou." s2="João" echo ${str//$substr/$s2} – Imprime: "Talita queria passear com João. João não aceitou." 17 Exercícios • Fazer scripts que: 1. Receba uma data no formato DD/MM/AAAA e forneça separadamente o dia, o mês e o ano. Se o argumento passado não possuir 10 caracteres, exibir uma mensagem de erro; 2. Receba como parâmetro uma nome e imprima uma série de linhas, onde na primeira linha apareça apenas a primeira letra do nome, na segunda linha as duas primeiras letras, e assim por diante. Por exemplo, para o nome “Rita”, imprimir: R Ri Rit Rita 18 Exercícios • Fazer scripts que: 3. Receba como parâmetro 2 strings e retorne em que posição a segunda string aparece dentro da primeira string. O primeiro caractere deverá ser contado como 0 e o valor -‐1 deverá ser retornado caso a segunda string não apareça dentro da primeira. Exemplos: ./t.sh abcxpto pto - imprime 4 ./t.sh abcxpto axp - imprime -1 ./t.sh abcxpto ab - imprime 0 ./t.sh abcxpto abcxpto - imprime 0 ./t.sh abcxpto bcxpt - imprime 1 19 Leitura adicional • Capítulos 5 e 7 do livro: “Classic Shell Scrip8ng” • Item 10.1 do livro: “Advanced Bash-‐Scrip8ng Guide” 20 Próxima aula... • Revisão para AV1; 21
Compartilhar