Escolar Documentos
Profissional Documentos
Cultura Documentos
Shell Script
Shell Script
In computing, a shell is a piece of software that provides an interface for users. - Wikipedia
Traduo Livre: Na computao, um shell um pedao de programa que prov uma interface com o usurio.
1. 2. 3. 4. 5.
Exame da linha de comando recebida Resoluo de Redirecionamentos Substituio de variveis Substituio de meta caracteres Passa o comando para o kernel
1. Exame da linha de comando recebida Comando: Separado por espao em branco, sendo o primeiro o comando e o restante os parmetros OBS: Remove todos os espaos em brancos repetidos! Atribuio: Separado por = sem espaos em branco
2. Resoluo de Redirecionamentos > e >>: Redireciona sada padro para um arquivo 2> e 2>>: Redireciona sada de erro para um arquivo |: Redireciona a sada padro para a entrada de outro programa tee: Redireciona o pipe (|) para a sada padro < e <<: Redireciona a entrada padro
3. Substituio de variveis substitui todos os $Variavel pelo contedo da varivel. ex: echo $PATH echo \$PATH echo '$PATH' echo $PATH
Uma paradinha para explicar \, ' e : \ : Ignora o prximo caracter ': ignora o contedo entre dois ' : considera tudo como apenas um parametro
4. Substituio de meta caracteres Para arquivos: *: nmero qualquer de letras, e qualquer letra ?: apenas uma letra qualquer . : Pasta atual .. : Pasta anterior ~: Home do usurio `: Abre um shell filho, e executa o comando que est entre `.
5. Passa o comando para o kernel !!!ATENO:!!! !!!Prximas informaes apenas para geeks!!! O Shell envia o comando para o kernel, que por sua vez executa um fork, criando um processo filho na memria, e ento executa o programa determinado. Para os no (muito) geeks: O Shell manda o SO executar o comando OBS: Caso o comando seja um script, todas as modificaes a variveis feitas dentro dele no alteram o shell principal.
1.cat, more e less 2.wc 3.sort 4.head e tail 5.find 6.grep 7.sed 8.cut e paste 9.tr 10.dialog
1. cat,more,less Serve para mostrar o contedo de arquivos cat: Joga todo o conteudo do arquivo para a sada padro more: Joga o conteudo do arquivo at preencher 1 tela, e espera a tecla enter para ir para a prxima linha. Possui recursos de busca e outros estilo vi. less: O mesmo do more s que pode voltar...
2. wc Mostra o nmero de linhas, palavras e bytes de um arquivo. -l: mostra apenas o nmero de linhas -c: mostra apenas o nmero de bytes -m: mostra apenas o nmero de letra -w: mostra apenas o nmero de palavras
head -x: mostra as x primeiras linhas do arquivo tail -x: mostra as x ultimas linhas do arquivo
Os trs prximos comandos (find, grep e sed), so EXTREMAMENTE poderosos, e vale o aprofundamento do estudo deles.
5. find Procura arquivos por caractersticas find caminho expresso ao expresses: -name nome-do-arquivo -user nome-do-usurio -groupnome-do-grupo -type tipo-do-arquivo (d: diretrio, f: arquivo, l: link, p: pipe)
5. find Procura arquivos por caractersticas find caminho expresso ao aes: -print (ao padro) -exec comando {} \; -okcomando {} \;
6. grep Mostra as linhas dos arquivos que casam com uma expresso regular -i ignora maisculas e minsculas -v inverte o resultado -R procura recursivamente
7. sed Editor de arquivos completo Muito usado para substituir cadeias de caracteres ex: sed 's/original/final/g' arquivo Troca todas as cadeias de caracteres iguais a original por final
8. cut e paste cut: separa o arquivos em partes paste: junta arquivos -d: qual o caractere que separa as partes -f: qual das partes deve ser mostrada
9. tr substitui caracteres [:upper:] letras em maiusculo [:lower:] letras em minusculo [:digit:] digitos
10. dialog Mostra uma janela, com mensagens, entradas e outros dialog tipo texto X Y onde tipo pode ser: msgbox, inputbox e outros X e Y o tamanho da janela tem tambm o Xdialog (100% compatvel e grfico), gdialog (usa gtk) e kdialog (usa qt, e possui diversos recursos diferentes)
1.Hello World em Shell Script 2.Cabealho 3.Comentrios 4.Condicional 5.Pegando informao do teclado 6.Estruturas de repetio
2. Cabealho
O cabealho serve para escolher o interpretador de comandos que ser utilizado. Tem que estar na primeira linha e ser iniciado com #!
1 2
3. Comentrios
Comentrio toda texto contido no script (ou cdigo fonte) que no faz parte do cdigo. Os comentrios em shell so iniciados com #
1 2 3 4
4. Condicional
A condicional serve para ver se uma sentena verdadeira ou falsa Em shell, a condicional o if, e retorna verdadeiro se o comando terminar com sucesso, e falso se der erro no comando 1 2 3 4 5 6 7 8 #!/bin/sh if ls then echo o comando deu certo else echo o comando deu errado fi Experimente mudar o ls para um comando inexistente ou usar parmetros errados no ls.
Desafio!
Faa um script, que mostre o contedo do arquivo informado pelo usurio! Ateno: se o arquivo no existir mostre a seguinte mensagem: Que pena, o arquivo (nome do arquivo) infelizmente no foi encontrado...
Soluo simples
1 2 3 4 5 6 7 8 9 10 11 #!/bin/sh echo Informe o nome do arquivo: read ARQUIVO if [ -f $ARQUIVO ] then cat $ARQUIVO else echo Que pena, o arquivo $ARQUIVO infelizmente no foi encontrado... fi
Soluo elegante
1 2 3 4 5 6 7 8 #!/bin/sh echo Informe o nome do arquivo: read $ARQUIVO if ! cat $ARQUIVO 2> /dev/null then echo Que pena, o arquivo $ARQUIVO infelizmente no foi encontrado... fi
Soluo grfica
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #!/bin/sh DIALOG=dialog #voc pode escolher o Xdialog ou o dialog ARQTEMP=/tmp/script.$$ # $$ trocado pelo nmero do processo do script #pega o nome do arquivo e guarda em arqtemp $DIALOG --fselect "$HOME/" 10 60 2>$ARQTEMP #pega o contedo do arquivo ARQTEMP e bota em ARQUIVO ARQUIVO=`cat $ARQTEMP` rm -fr $ARQTEMP #remove o ARQTEMP
if [ -f $ARQUIVO ] then $DIALOG --textbox "$ARQUIVO" 0 0 else $DIALOG --msgbox "Que pena, o arquivo $ARQUIVO infelizmente no foi encontrado..." 0 0 18 fi
6. Estruturas de repetio
As estruturas de repetio servem para repetir uma srie de comandos at que uma condio especial seja alcanada. WHILE Enquanto a condio do while for verdadeira, as instrues entre do e done executada. 1 2 3 4 5 6 7 8 #!/bin/sh X=0 while (( X < 10 )) do echo $X X=$((X+1)) done
Desafio!
Reescreva o programa anterior, para que toda vez que o usurio informar um nome de arquivo invlido, ele tenha que digitar o nome do arquivo novamente.
6. Estruturas de repetio
FOR O for no shell se comporta diferente do que o for nas linguagens tradicionais. Em shell, o for percorre uma lista qualquer, e atribui a uma varivel, cada valor dessa lista. O comando seq X Y Z, conta de X at Z indo de Y em Y
1 2 3 4 5 6 7
Desafio Final!
Faa um programa que redimensione todos as imagens png da pasta informada pela linha de comando para 50% do seu tamanho, e salve no formato jpg Para modificar imagens pela linha de comando, use o comando convert, do image magick para pegar os argumentos da linha de comando, use: $1 para o primeiro arguento, $2 para o segundo e assim por diante $* retorna todos os argumentos da linha de comando $# retorna a quantidade de argumentos shift 1 remove o primeiro parametro e o segundo passa a ser o primeiro, o terceiro o segundo e assim por diante