Scripts Shell João Medeiros (joao.fatern@gmail.com) 1 / 20
2 / 20
Principais shell conhecidos Bourne Shell (sh) Korn Shell (ksh) C Shell (csh) Bash - Bourne Again Shell (bash) mais utilizada no linux O Bash é o shell desenvolvido para o projecto GNU, da Free Software Foundation, que se tornou padrão nas várias distribuições Linux. Pode ser usado também com outros sistemas operacionais, como o Unix. É compatível com o Bourne shell (sh), incorporando os melhores recursos do C shell (csh) e do Korn Shell (ksh). (Fonte http://pt.wikipedia.org/wiki/bash) vskip 1.0in Consulte http://aurelio.net/shell/canivete.html 3 / 20
Arquivo contendo uma série de comandos. Executando um script Como fonte: na linha de comandos digite$ bash hello, onde hello é o nome do arquivo que contém o script na linha de comandos digite um ponto seguido de espaço e do nome do script Como executável: $. hello Indicar qual o shell na primeira linha do script #!/bin/bash Atribuir a permissão de execução ao script $ chmod a+x hello Executar o script com $ hello (funciona apenas se o diretório. faz parte do PATH) ou $./hello 4 / 20
Primeiro script #!/bin/bash echo "Alo" echo "Qual o seu nome? " read nome echo "Alo $nome" Salve com o nome hello, altere a permissão com chmod +x hello e execute-o das três maneira mencionadas acima comando read criou uma variável (nome). Para usar o valor da variável acrescentamos o $. 5 / 20
#!/bin/bash echo "calculando x * y" echo "digite o valor de x" read x echo "digite o valor de y" read y echo "x*y = $x*$y = $[x*y]" Tudo que estiver entre [ e ] será avaliado como uma expressão numérica (+,-,*,/). podemos usar até mesmo na linha de comandos, tente $ echo $[12/3] ou $ echo $[3*5_2*4+1] podemos usar também o comando expr. 6 / 20
Podemos usar laços nos scripts, por exemplo o comando while executa uma sequência de comando várias vezes #!/bin/bash N=1 while test "$N" -le "10" do echo "Numero $N" N=$[N+1] done -le significa menor ou igual, acesse http://aurelio.net/shell/canivete.html#test para uma relação mais completa 7 / 20
#!/bin/bash for i in vaca ovelha galinha porco do echo "$i e um animal da fazenda" done O comando for pega cada string após o in e executa as linhas entre do e done. As strings podem ser qualquer coisa, mesmo números. Na maioria das vezes são nomes de arquivos. 8 / 20
if [ condicoes de teste ] then processa1 elif [ outra condicao de teste] then processa2 else processa3 fi Exemplo if [ -r arquivo ] then cat arquivo else echo "arquivo nao existe" fi 9 / 20
Scripts com argumentos #!/bin/bash if test "$1" = "" ; then echo "Usage: backup.sh <filename>" exit fi for i in 0 1 2 3 4 5 6 7 8 9 ; do NEW_FILE=$1.BAK-$i if test -e $NEW_FILE ; then echo "backup.sh: **aviso** $NEW_FILE, indo para proximo" else cp $1 $NEW_FILE fi done Crie um arquivo chamado dados_importantes com qualquer conteúdo, exe./backup.sh dados_importantes Voc^e obterá 10 cópias do arquivo 10 / 20
#!/bin/bash for i in 0 1 2 3 4 5 6 7 8 9 ; do NEW_FILE=$1.BAK-$i if test -e $NEW_FILE ; then echo "backup: **aviso** $NEW_FILE" echo " ja existe, saindo" else cp $1 $NEW_FILE fi done 11 / 20
#!/bin/bash for i in 0 1 2 3 4 5 6 7 8 9 ; do NEW_FILE=$1.BAK-$i if test -e $NEW_FILE ; then echo "backup: **aviso** $NEW_FILE" echo " ja existe" continue else cp $1 $NEW_FILE fi done 12 / 20
#!/bin/sh for i in /etc/*/*.conf do echo "encontrou arquivo:" $i done 13 / 20
Util para receber argumentos em programas case $variavel in valor1) acao1 ;; valor2 valor3) acao2 ;; *) acao default ;; esac Veja script 08. 14 / 20
#!/bin/sh function usage () { echo "Utilize:" echo " programa [--test --help --version]" } usage Veja script 09 15 / 20
Muitos programas t^em que lidar com vários argumentos #!/bin/bash echo "primeiro argumento $1 segundo argumento $2..." que pode ser executado como $programa terra marte com saida do tipo primeiro argumento terra segundo argumento marte..." Se tivermos muitos argumentos? utilize shift while test "$1"!= "" ; do echo $1 shift done Veja script 10 16 / 20
Enquanto $1, $2, são argumentos individuais, $@ expande para todos os argumentos. Útil para passar todos os argumentos restantes para um segundo programa if test "$1" = "--special" ; then shift programa2 "$@" fi $0 é o nome do programa em si e não um argumento da linha de comandos. $0 não é afetado pelo shift 17 / 20
Exemplo de subshell host= hostname echo $host 18 / 20
Resolva os exercícios da apostila obtida na referência [2] http://aurelio.net/shell/apostila-introducao-shell.pdf 19 / 20
[1] http://aurelio.net/canivete [2] http://aurelio.net/shell/apostila-introducao-shell.pdf 20 / 20