oficina de shell script

29
 Oficina de ShellScript Segunda Parte Wildcards Variáveis de Ambiente Comandos em Shell Script Parâmetros para o programa Mais comandos /dev/null Bruno L. Albrecht Felipe A. Chies PET Computação UFRGS

Upload: brunobione

Post on 30-Jun-2015

1.141 views

Category:

Technology


1 download

DESCRIPTION

Shell Script

TRANSCRIPT

Page 1: Oficina de shell script

   

Oficina de ShellScriptSegunda Parte

Wildcards

Variáveis de Ambiente

Comandos em Shell Script

Parâmetros para o programa

Mais comandos

/dev/null

Bruno L. Albrecht

Felipe A. ChiesPET Computação UFRGS

Page 2: Oficina de shell script

   

Wildcards

Recurso utilizado para especificar um ou mais arquivos/diretório de uma vez só.

Permite a filtragem do que será listado/copiado/apagado/etc

É uma feature que deixa a shell “mais poderosa” que a GUI no trato de arquivos.

Quatro tipos: *, ?, [ ] e { }

Page 3: Oficina de shell script

   

Wildcards

*: qualquer coisa! (zero ou mais caracteres) rm *.txt   apaga todos os arquivos que terminem →

com .txt

?: um único caractere qualquer! rm log?.txt   log1.txt, loga.txt, lob[.txt, etc→ rm *?.*   todos os arquivos não ocultos→ Obs.: para nos referirmos a um arquivo que um 

wildcard no nome, utilizamos '\wildcard'

Page 4: Oficina de shell script

   

Wildcards

[ ] : um dos caracteres listados (ou não) [abcd] : a ou b ou c ou d [a­d] : qualquer um no intervalo de 'a' a 'd' [!abcd] : qualquer um, menos a,b,c,d [!a­d] : qualquer um, menos os que estão no 

intervalo de 'a' a 'd' Exemplo:

sudo umount /dev/[hs]d[a­d][1­9] desmonta todos os dispositivos

Page 5: Oficina de shell script

   

Wildcards

{ } : cada opção separada por vírgulas é considerada apenas uma vez echo t{r,igr,rist}es

tres tigres tristes echo alun{o,a}{,s}

aluno alunos aluno alunos

Page 6: Oficina de shell script

ShellScript: Introdução

Shell Interpretador de comandos;

Script É uma descrição geral de qualquer programa 

escrito em linguagem interpretada, ou seja, não compilada;

Temos script em PHP, Ruby, script em PERL e também Shell Script;

Page 7: Oficina de shell script

Objetivos

Facilitar as tarefas repetidas do adminstrador: evita a redigitação de comandos; podem ser agendados para execução através da 

tabela crontab (man cron);

Scripts podem fazer tarefas complexas podemos combinar diversos comandos, com 

controladores de fluxo e variáveis;

São “rápidos” de serem criados e não precisam ser compilados;

Page 8: Oficina de shell script

Hello World

Muito simples:

Para executá­lo: chmod +x hello.sh ./hello.sh

Muito simples!!! Crie o arquivo: gedit hello.sh &

#!/bin/bash

echo "Hello World!!!"

Page 9: Oficina de shell script

Variáveis

O bash reconhece uma variável quando ela começa com $;

Declaração: var=“valor” valor pode ser número, frase, outras variáveis ou 

comando.  Pode ser expressado entre “ ”(aspas duplas), ' ' 

(apóstrofes) ou ` `(crases);

Page 10: Oficina de shell script

Variáveis

Aspas duplas: valor da variável será interpretado; variavel="Meu login é: $USER" echo $variavel

Meu login é: Bruno

Apóstrofes: declaração literal variavel='Meu login é: $USER' echo $variavel

Meu login é: $USER

Page 11: Oficina de shell script

Entre crases

Crases: vão interpretar os comandos declarados. Se forem combinados com texto numa expressão, deve­se usar as aspas juntamente!!! variavel=“Meu diretório atual é: `pwd`” echo $variavel

Meu diretório atual é: /home/bruno Obs.: É o mesmo que $(comando)

var=$(pwd)

Page 12: Oficina de shell script

   

PARÂMETROS

É um array de parâmetros! De $1 a $9 $0   nome do programa→ $#   quantidade de parâmetros→ $*   conjunto de todos os parâmetros→ Shift n   utilizado para deslocar n parâmetros→

Page 13: Oficina de shell script

   

Variáveis de Ambiente

São variáveis LOCAIS ou GLOBAIS já definidas pelo sistema operacioal

Podem ser redefinidas

Exemplo: O nome do usuário é determinado a partir de uma 

variável de ambiente: $USER

Page 14: Oficina de shell script

   

Variáveis de Ambiente

Principais variáveis globais: PATH diretório onde podem ser encontrados os 

executáveis USER nome (login) do usuário HOME diretório home do usuário HOST nome do host (máquina) SHELL shell ativo PS1 mensagem no terminal IFS separador de parâmetros (default: ” ”)

A lista completa pode ser obtida através do comando env

Page 15: Oficina de shell script

   

Variáveis de Ambiente

Para definir uma variável de ambiente GLOBAL: export VARIAVEL=conteúdo

Para definir uma variável de ambiente LOCAL: VARIAVEL=conteudo

Exemplo:  export PATH=$PATH:/meu_dir

Obs.: esta forma de definir variáveis é TEMPORÁRIA, ou seja, apenas enquanto o shell estiver ativo

Page 16: Oficina de shell script

   

Variáveis de Ambiente

Para definir variáveis globais e locais PERMANENTEMENTE, devemos alterar os seguintes arquivos:  ~./bashrc   somente para o usuário atual→ /etc/bash.bashrc   para todos os usuários→

Imprimir o conteúdo de uma variável: echo $VARIAVEL

Deletar uma variável: unset VARIÁVEL

Page 17: Oficina de shell script

   

Expressões aritméticas

Para o Shell executar operações aritméticas, devemos utilizar $((expressão)) echo $((2+2)) var1=$((var2+var1))

Ou então, o comando let: let var1++ let var2­­

Page 18: Oficina de shell script

   

Expressões aritméticas

x++, ++x, x­­, ­­x: [pós,pré]­[in,de]cremento x**y: potenciação (xy) x*y, x/y, x%y: multiplicação, divisão, resto <, <=, >, >=, ==, !=: comparações &&, ||: AND e OR lógicos

Page 19: Oficina de shell script

   

Comandos: test Descrição: testar qualquer coisa!

test $var1 ­lt $var2

Obs.: resultado em $?

Page 20: Oficina de shell script

   

if

O comando if testa o STDERR (variável de ambiente $?), mas, para ficar semelhante à sintaxe do C, utilizamos o comando test

Atalho do comando test no if: [ expressão ]   não do espaço antes e depois da →

expressão

If test $variavel ­gt 10then

echo ”é maior que 10”else

echo ”é menor que 10”fi

If [ $variavel ­gt 10 ]then

echo ”é maior que 10”else

echo ”é menor que 10”fi

Page 21: Oficina de shell script

case

Para não precisarmos concatenar milhares de ifs, utilizamos o case:

if [ $var ­eq 1 ]then 

<comandos>elif [ $var ­eq 2 ]then

<comandos>elif [ $var ­eq 3 ]then

<comandos>elif [ $var ­eq 4 ]then

<comandos>else

<comandos>fi

case $var in1) <comandos> ;;2) <comandos> ;;3) <comandos> ;;4) <comandos> ;;*) <comandos>

esac

● Não há ;; no último grupo● Para fechar o case, usamos “esac”● Podemos usar wildcards nos padrões de grupos. ex.: [1­4], ?, ??, 3|4, ?0|?5, [1234] etc

Page 22: Oficina de shell script

For

Um comando muito útil para utilizar o for é o seq, que gera sequências de números:

for numero in um dois três quatro cincodo      echo "Contando: $numero"done

for num in $(seq 10)do

<...> done

for num in $(seq 6 10)do

<...> donefor num in $(seq 0 2 10)

do<...>

done

Page 23: Oficina de shell script

For

Neste caso, não colocamos o “in” depois da variável. Isto serve para a variável (no caso “par”) receber cada parâmetro passado para o programa a cada laço do for.

for pardo      echo "Parâmetro: $par"done

Page 24: Oficina de shell script

For

Podemos ainda usar uma sintaxe parecida com a do C.

Outra forma de for

for ((i=0 ; i<=9 ; i++))do      echo ­n “$i “done

for (( ; i<=9 ; ))do

let i++;echo ­n “$i “

done

for arq in *do

let i++;echo “$i ­> $arq”

done

1 ­> arquivo1.txt2 ­> arquivo2.sh3 ­> arquivo3.bla4 ­> arquivo4.docetc...

Page 25: Oficina de shell script

Break e Continue

break: pára o laço continue: ignora o que tem embaixo e volta 

para o início do laço

for ((i=0 ; ; i++))do

echo ­n “$i “if [ i ­eq 9 ]then

break;done

for ((i=0 ; ; i++))do

echo ­n “$i “if [ i ­lt 9 ]then

continueelse

breakdone

$ ./testefor0 1 2 3 4 5 6 7 8 9

$ ./testefor20 1 2 3 4 5 6 7 8 9

Page 26: Oficina de shell script

While

Utilizando um contador com o while:

i=0while test i ­le 10do      i=$((i+1))      echo "Contando: $i"done

Para um loop infinito (saindo com break):

while :do      if test ­f /tmp/lock      then              echo "Aguardando lock..."              sleep 1      else              break      fidone

Page 27: Oficina de shell script

Until

Igual ao while, mas o teste é feito após os comandos serem executados

i=0until [ $i ­eq 9 ]do

echo ­n “$i ”let i++

done

$./testeuntil0 1 2 3 4 5 6 7 8$

until ! who | grep petdo

sleep 60doneecho ­n “usuário pet foi embora!!”echo “às $(date “%H:%Mh”)”

$ ./testeuntil2pet pts/0Jan 4 16:47 (143.54.12.140)pet pts/0Jan 4 16:48 (143.54.12.140)...pet pts/0Jan 4 17:39 (143.54.12.140)usuário pet foi embora às 17:39h!!$

Page 28: Oficina de shell script

Interação com o usuário read: recebe uma lista de parâmetros e salva nas 

variáveis

Se houver mais parâmetros do que variáveis, a última recebe o resto

echo: imprime uma mensagem no STDOUT

$ read var1 var2 var3Curso de ShellScript$ echo $var1Curso$ echo $var2de$ echo $var3ShellScript

$ read var1 var2Curso de ShellScript$ echo $var1Curso$ echo $var2de ShellScript

Page 29: Oficina de shell script

Leitura de Arquivos

Duas formas:

O while termina quando o read encontra um EOF (leitura mal sucedida)

while read LINHAdo

echo $LINHAdone < arquivo.txt

Cat arquivo.txt |while read LINHAdo

echo $LINHAdone