oficina de shell script

Post on 30-Jun-2015

1.141 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Shell Script

TRANSCRIPT

   

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

   

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 { }

   

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'

   

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

   

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

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;

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;

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!!!"

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);

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

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)

   

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→

   

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

   

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

   

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

   

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

   

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­­

   

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

   

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

test $var1 ­lt $var2

Obs.: resultado em $?

   

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

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

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

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

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...

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

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

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!!$

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

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

top related