Вы находитесь на странице: 1из 37

Shell a parte do S.O.

que faz interface com o usurio Linux tem vrios tipos de shell:
Kosh Shell C Shell Bourne Again shell (bash)

O que um script?
Apenas um arquivo texto com permisso de execuo e

uma lista de comandos

Vantagens de usar scripts:


Evitar repeties: Automatizar tarefas complicadas:
2

Lista de comandos, executada em ordem A linha shebang:


#! Diz ao S.O. qual shell usar para executar o

script
Ex.: #!/bin/bash

comando which
$ which bash /bin/bash

Se nenhum shell especificado, escolhido o shell padro do sistema


3

Inicie um editor de texto; por exemplo:


Digite o seguinte:

$ mkdir ~/scripts $ cd scripts $ vim hello.sh

#!/bin/bash # Este um comentrio, no ser executado # Este meu primeiro script "Hello World" echo "Hello World"

A 1 linha diz ao Linux para usar o interpretador bash parea executar o script Torne o script executvel:

Para executar o script:

$chmod u+x hello.sh $ls l -rwxr--r-- hello.sh $ ./hello.sh

Existem dois tipos de variveis:


Variveis de Ambiente Variveis Locais

Contm valores especiais e so setadas pelo sistema no login


/etc/profile, /etc/profile.d/ e ~/.bash_profile ou ~/.profile.

Para saber o contedo da varivel:


$ echo SHELL SHELL $ echo $SHELL /bin/bash $ echo $HOME /home/gunasantos $ echo $PATH /usr/X11R6/bin:/usr/local/bin:/bin:/usr/bin

O comando env
Imprime todas as variveis de ambiente

PATH: Caminho de busca por comandos Setando PATH=$PATH:~/scripts o diretrio includo na busca por comandos, para isso usamos o comando export:
$ export PATH=$PATH:~/scripts $ hello.sh

LOGNAME: nome do usurio HOSTNAME: nome do computador. MACHTYPE: tipo de hardware PWD: caminho atual

Definidas pelo usurio quando executam o script So armazenadas como strings Declarando uma varivel:
$> STR='Hello World!' $> echo $STR Hello World!

A varivel referenciada colocando o '$' antes do seu nome


9

Quando for definir dados que contenham espaos ou caracteres especiais, o dado deve estar entre aspas simples ou duplas. Aspas duplas permite que qualquer varivel referenciada entre as aspas seja resolvida
$ var=string de teste" $ newvar=O Valor de var $var" $ echo $newvar

O Valor de var string de teste


10

Variveis referenciadas no so resolvidas


$ newvar= O Valor de var $var ' $ echo $newvar

O Valor de var $var

11

A aspa reversa "`" diferente da aspa simples"". usada para substituio de comandos: `comando`
$ ls hello.sh $ LISTA=`ls` $ echo $LISTA hello.sh
12

Crie um script em bash que quando executado imprima:


$ hello_user.sh Hello guna! Sua pasta : /home/guna Hoje : Fri Mar 16 19:19:42 CDT 2012

Dica: voc pode pegar a data usando o comando date


13

$ vim hello_user.sh

#!/bin/bash echo "Hello $LOGNAME!" echo Sua pasta : $HOME" data=`date` echo Hoje : $data"

$ chmod u+x hello_user.sh $ ./hello_user.sh


14

A expresso expr
Operadores: aritmticos: +, -, *, /, % Comparaes: <, <=, ==, !=, >=, > booleanos/lgicos: &, | parenteses: (, )

Calcula o valor de uma expresso matemtica


$ resultado=`expr 1 + 2` $ echo $resultado 3 $ resultado=1+2 $ echo $resultado 1+2
15

E se no usssemos o comando expr?

Controlam o fluxo de execuo Tipos mais comuns:


Condicionais:

Limpeza de pasta

`ls dir`

Existe arq.?

No

Sim
move arq.

Sim

if/then/else, case, ... Laos: while, for, until, do, ... Saltos: Chamadas de subrotina

*.stdou t

No
Apaga arq.

Sim

*.tmp

No
Pronto

16

Permitem decidir quando executar uma ao ou no, atravs da avaliao de uma expresso
if [ expression ]; then ## deve ter espaos entre os colchetes

comandos elif [ expression ]; ## os colchetes testam uma expresso then comandos else comandos fi

As sees elif (else if) e else so opcionais


17

$ vim if1.sh #!/bin/bash

grep retorna 0 se acha algo e retorna non-zero se contrrio

if grep Hello" hello_user.sh>/dev/null then echo Est aqui" fi


$ ./if1.sh Est aqui Redirecionar para /dev/null faz que o resultado no seja impresso
18

Example:
$ cat if2.sh #!/bin/bash if grep Ola" hello_user.sh>/dev/null then echo Est aqui" else echo "Nao!" echo Ola nao esta no arquivo" fi

$ ./if2.sh Nao! Ola nao esta no arquivo


19

$ cat if3.sh #!/bin/bash if grep "UNIX" meuarquivo3 >/dev/null then echo "UNIX aparece em meuarquivo3 " elif grep "DOS" meuarquivo3 > /dev/null then echo "DOS aparece em meuarquivo3, nao UNIX" else echo Ninguem est aqui em meuarquivo3 " fi

$ ./if3.sh DOS aparece em meuarquivo3, nao UNIX


20

Podem ser:
Comparaes de String Comparaes Numricas Operaes de arquivo Operaes Lgicas

21

Comparaes de String:

= != -n -z

compara se duas strings so iguais compara se duas strings no so iguais avalia se o tam da string maior que zero avalia se tam da string igual zero

Exemplos:

[ s1 = s2 ] [ s1 != s2 ] [ s1 ] [ -n s1 ] [ -z s2 ]
22

$ vim if4.sh #!/bin/bash echo -n Entre o seu login: " # pergunta ao usuario read nome # guarda a entrada em nome if [ "$nome" = "$USER" ]; then echo Ola, $nome. Como vai voc?" else echo Voc no $USER, quem voc?" fi

$ ./if4.sh Entre o seu login: gunsant Voc no guna.santos, quem voc?

23

Comparaes Numricas:

-eq -ge -le -ne -gt -lt

compara se dois nmeros so iguais compara se um nmero maior ou igual a um nmero compara se um nmero menor ou igual a um nmero compara se dois nmeros no so iguais compara se um nmero maior que um nmero compara se um nmero menor que um nmero

Exemplos:

[ n1 -eq n2 ] [ n1 -ge n2 ] [ n1 -le n2 ] [ n1 -ne n2 ] [ n1 -gt n2 ] [ n1 -lt n2 ]


24

$ vim if5.sh #!/bin/bash echo -n "Entre um nmero 1 < x < 10: " read num if [ "$num" -lt 10 ]; then if [ "$num" -gt 1 ]; then echo "$num*$num=$(($num*$num))" else echo Entrada incorreta!" fi else echo " Entrada incorreta!" fi $ ./if5.sh Entre um nmero 1 < x < 10: 5 5*5=25
25

Operadores lgicos: Alterando o exemplo anterior:


&& ||

E lgico entre duas expresses lgicas OU lgico entre duas expresses lgicas

$ vim if7.sh #!/bin/bash echo -n "Entre um nmero 1 < x < 10: " read num if [ "$ num " -gt 1 ] && [ "$ num " -lt 10 ]; echo "$num*$num=$(($num*$num))" else echo Entrada incorreta!" fi $ ./if7.sh Entre um nmero 1 < x < 10: 5 5*5=$25
26

Operadores de arquivo:

-d -f -s -e -s -r -w -x

verifica se o caminho dado uma pasta verifica se o caminho dado um arquivo verifica se o caminho dado um link simblico verifica se o nome do arquivo passado existe verifica se um arquivo tem o tamanhao maior que zero verifica se o arquivo ou pasta tem permisso de leitura verifica se o arquivo ou pasta tem permisso de escrita verifica se o arquivo ou pasta tem permisso de execuo

Exemplos:

[ -d fname ] [ -f fname ] [ -e fname ] [ -s fname ] [ -r fname ] [ -w fname ] [ -x fname ]

(verdadeiro se fname uma pasta, seno falso) (verdadeiro se fname uma arquivo, seno falso true) (verdadeiro se fname existe, seno falso) (verdadeiro se o tamanho de fname maior que zero, seno falso) (verdadeiro se fname tem permisso de leitura, seno falso) (verdadeiro se fname tem permisso de escrita, seno falso) (verdadeiro se fname tem permisso de execuo, seno falso)

27

Verifica se um arquivo existe $ cat if6.sh #!/bin/bash if [ -f /etc/fstab ]; then cp /etc/fstab . echo Feito." else echo O arquivo no existe." exit 1 fi $ ./if6.sh Feito.
28

Laos for permitem a repetio de um comando para um conjunto especfico de valores. Sintaxe:
for var in valor1 valor2 ... do conjunto_de_comandos done

conjunto_de_comandos executado com cada

valor de var (valor1, valor2, ...) em sequencia


29

Calcular o menor valor de um conjunto de nmeros


$ cat for3.sh #!/bin/bash menor=10000 for num in 5 8 19 8 7 3 do echo avaliando $num" if [ $num -lt $menor ] then menor=$num fi done echo $menor

$ ./for3.sh 3
30

Contar o nmero de arquivos que so executveis numa pasta


$ cat for2.sh #!/bin/bash NOTA: expr $count + 1 # inicializa varivel adiciona um varivel contador=0 for filename in `ls`; do if [ x $filename ] then contador=`expr $count + 1` fi done echo "Total de $count arquivos executveis"

$ ./for2.sh Total de 5 arquivos executveis

31

Laos while repetem as declaraes enquanto a expresso verdadeira Syntax:


while [ expression ] do command_set done

32

Somar todos os nmeros de 1 a 100


$cat while1.sh #! /bin/bash i=1 # declarao de varivel soma=0 # declarao de varivel while [ $i -le 100 ] do soma=`expr $soma + $i` i=`expr $i + 1` done echo A soma $soma.

$ ./while1.sh A soma 5050.


33

Lets calculate the number of fasta files in a sequence file



Fasta um formato de arquivo texto usado para representar sequencias de nucleotdeos ou peptdeos. Ex.:
>MCHU - Calmodulin - Human, rabbit, bovine, rat, and chicken ADQLTEEQIAE FKEAFSLFDKDGDGTITTKELGTVMRS LGQNPTEAELQDMINEVDADGNGTID FPEFLTMMARKMKDTDSEEEIREAFRV FDKDGNGYISAAELRHVMTNLGEKLT DEEVDEMIREA DIDGDGQVNYEEFV QMMTAK*

#!/bin/bash # while2.sh counts the number of fasta sequences found in a fasta file
count=0 # initialize a variable that holds # the count of sequences

# in each iteration we are going to read the next line in file while read line do if echo $line | grep ">" > /dev/null # determine if the current line # is a sequence header ">" then count=`expr $count + 1` # perform an addition to the count fi done < "sequences.fasta" # define the filename you wish to use # tell me the total count of fasta sequences echo "Your fasta file contains $count sequences"

34

Parmetros posicionais so defindidos por argumentos do shell quando ele chamado (ex. ls l dir1 dir2) Um parmetro da posio N pode ser referenciado como ${N}, ou como $N quando consiste de apenas um nico dgito Parmetros especiais:

$# o nmero de parmetros passado $0 retorna o nome do script em execuo, bem como sua localizao

no sistema de arquivos $* retorna de uma s vez todos os parmetros passados para o script $@ d um array de palavras contendo todos os parmetros passados para o script
$ cat sparametros.sh #!/bin/bash echo "$#; $0; $1; $2; $*; $@" $ sparametros.sh alba chiara 2; ./sparametros.sh; alba; chiara; alba chiara; alba chiara
35

Lets calculate the number of fasta sequences in a sequence file



#!/bin/bash # while3.sh counts the number of fasta sequences found in a fasta file
filename=$1 # assign the input parameter filename to a variable count=0 # initialize a variable that holds the count of sequences # in each iteration we are going to read the next line in file while read line do if echo $line | grep ">" > /dev/null # determine if the current line # is a sequence header ">" then count=`expr $count + 1` # perform an addition to the count fi done < $filename # define the filename you wish to use # tell me the total count of fasta sequences echo "Your fasta file contains $count sequences"

36

http://aurelio.net/shell/ http://www.freewebs.com/viniciusfre/exempl os.html http://blog.bluesoft.com.br/simplesexemplos-de-shell-script/

37

Вам также может понравиться