14/10/201 !ro"# $a%eria Mene&e' (a'to' 1 )*pico' +'peciai' em !ro,ramao !ro,ramao em -.e%% Comandos bsicos bash Programao em Shell pipe $er /D!0 manuai' U1I20 etc3 Redirecionamento de entrada e de sada Comandos Variveis, estruturas de controle e condicionais Criao de scripts 2 DCC-IM/UFRJ Prof Valeria M. Bastos 4poio 5i5%io,r6"ico Comandos: man, info e LDP Programao em Shell Matthew, N; Stones, R. "Beginning Linux Programming", Wrox press, 1999 (2th Edition) cap. 2 Ver programas e scripts em : http://www.wrox.com Ball, B. Usando Linux, Ed. Campus Cap. 22 Rpida introduo. 3 DCC-IM/UFRJ Prof Valeria M. Bastos -.e%% processador de comandos linguagem de programao (interpretador) adequada para prototipao programao rpida e simples reu'o de c*di,o ideal para pequenos utilitrios fcil manuteno, configurao grande portabilidade controle de tarefas 4 DCC-IM/UFRJ Prof Valeria M. Bastos Ma' o' pro,rama' no 'o muito e"iciente' $6ria' '.e%%' UNIX permite vrios programas shell O usurio escolhe um de sua preferncia Mais comuns sh (Bourne) shell original do UNIX csh, tcsh e zsc C shell (Bill Joy) ksh, pdksh Korn shell (David Korn) bash Bourne Again Shell muito popular em Linux 5 DCC-IM/UFRJ Prof Valeria M. Bastos +7i'te um ,rande n8mero de '.e%%' com caracter9'tica' mai' ou meno' comun' 5a'. POSIX-compatvel A shell deve ser instalada em /bin/sh Verificar com comando ls l /bin/sh comandos bash Antes de entrarmos em programao shell necessrio Antes de entrarmos em programao shell necessrio conhecer alguns comandos bsicos da shell 6 DCC-IM/UFRJ Prof Valeria M. Bastos Comando' /inu7 e M--D:- po''uem a%,uma 'eme%.ana3 !arte do M--D:- "oram in'pirada' no C!/M0 ;ue por 'ua <e& "oi in'pirado no U1I2 C:MM41D3C:M '.e%% 8nica do D:- Comando' U1I2 Se voc no possui domnio dos comandos bsicos UNIX, est na hora de: Explorar os comandos UNIX (Linux) Estabelecer uma relao entre os comandos bsicos e o MS-DOS 1o ten.a medo de e7perimentar= MS-DOS Familiarizar-se com os conceitos elementares de operao de ambientes UNIX Aprender a usar redirecionamento e pipes Exercite-se listando arquivos, diretrios, verificando o estado dos processos, etc. 7 DCC-IM/UFRJ Prof Valeria M. Bastos /em5re-'e de u'ar o a! Re'umo de a%,un' comando' cat> % e mo'tra ar;ui<o' em 'tout0 'e no aparece ar;ui<o ento 'tidn0 permite concatenao more> di'p%a? o conte8do do ar;ui<o0 uma te%a de cada <e& ,rep> pe';ui'a em um ou mai' ar;ui<o' por %in.a' ;ue ca'am com uma e7pre''o re,u%ar dada " DCC-IM/UFRJ Prof Valeria M. Bastos @ora do' e7erc9cio' ===== com uma e7pre''o re,u%ar dada A -%> %i'tarB c.mod> a%tera a' permi''Ce' de ace''o de um ar;ui<o touc. > <eri"ica 'e e7i'te ar;ui<o0 'eno cria rm > remo<e ar;ui<o D8<ida' ;uanto D 'inta7eE U'e o a! Redirecionamento entrada e sada padro stdin entrada padro stdout sada padro entrada e sada padro e descritores de arquivo )am5Fm stin e stout # DCC-IM/UFRJ Prof Valeria M. Bastos entrada e sada padro e descritores de arquivo stdin file descriptor 0 stdout file descriptor 1 stderr file descriptor 2 redirecionmento troca um arquivo padro por outro arquivo indicado Redirecionamento AGB de 'tdout Exemplo simples: $ls l > lssaida.txt Redireciona a 'a9da -a%<a a 'a9da do comando ls no ar;ui<o lssaida.txt $% DCC-IM/UFRJ Prof Valeria M. Bastos ls : lista o contedo de um diretrio dado; se nenhum diretrio informado, lista o diretrio atual CUIDADO!!! O redirecionamento escreve sobre o arquivo (se o arquivo j existe) , apagando o contedo anterior U'ando cat e G comando cat: $cat rel.txt > novorel.txt $cat rel1 rel2 rel3 >novorel.txt entrada rpida de texto $cat > novorel.txt cat % e mo'tra ar;ui<o' em 'tdoutH permite concatenao $$ DCC-IM/UFRJ Prof Valeria M. Bastos $cat > novorel.txt >isso uma linha de texto >isso mais uma linha de texto >[EOF] para mostrar o resultado $cat novorel.txt isso uma linha de texto isso mais uma linha de texto Di,ite Ctr%Id para marca de "im de ar;ui<o append GG >> (append) anexa a sada ao fim de um arquivo Evita apagar um arquivo que j existe como em > Tambm existe << (usado raramente) $2 DCC-IM/UFRJ Prof Valeria M. Bastos enviar a sada do comando ls para o arquivo lista.txt: $ ls > lista.txt Semelhante ao comando acima, mas preservando o contedo original do arquivo lista.txt: $ ls >> lista.txt Redirecionamento de 'tderr Usar > com o nmero do descritor de arquivo: operador 2> til para descartar informao de erro, evitando que aparea na tela $kill HUP 1234 > killout.txt 2>killerr.txt Redireciona 'tdout $3 DCC-IM/UFRJ Prof Valeria M. Bastos $kill HUP 1234 > killout.txt 2>killerr.txt Matando um processo: existe o risco do processo j estar morto. Redireciona as mensagens de erro, evitando que elas apaream na tela. Redireciona 'tderr A'a9da de erro'B operador 2G 2> exemplo: $cat rel.txt >novorel.txt cat: rel.txt: No such file or directory 4r;ui<o rel.txt no e7i'te Men'a,em de erro <ai para erro'3%o, $4 DCC-IM/UFRJ Prof Valeria M. Bastos $cat rel.txt >novorel.txt 2>erros.log $cat erros.log cat: rel.txt: No such file or directory $cat rel.txt >novorel.txt 2>/dev/null erro'3%o, (a%de 'em "undo uni<er'a%> /de</nu%% Redirecionamento AJB de 'tdin Arquivos de entrada tambm podem ser redirecionados: +7emp%o 'imp%e' $5 DCC-IM/UFRJ Prof Valeria M. Bastos $more < killout.txt more> mo'tra na te%a o conte8do do ar;ui<o0 uma te%a de cada <e& pipe processos rodam em pipeline Sada de um processo a entrada do outro - operador | Exemplo: ordenar sada de ps C414/ $6 DCC-IM/UFRJ Prof Valeria M. Bastos Exemplo: ordenar sada de ps $ps >psout.txt $sort psout.txt > pssort.out $ps | sort pssort.out $ps | sort | more Mai' e%e,ante em uma '* %in.a u'ando pipe ps> proce''or 'tatu' pipe com comando'> mo'tra 'tatu' de proce''o' ordenado' na te%a +7pan'o de Ki%dcard revisar: * - qualquer caractere (0 ou mais) ? um nico caractere [set] conjunto especfico de caracteres simples Curin,a A Shell expande wildcards $7 DCC-IM/UFRJ Prof Valeria M. Bastos [set] conjunto especfico de caracteres simples [^set] {string} agrupa strings que sero expandidos pela shell - Exemplo: ordenar sada de ps $ls my_{finger,toe}s $ls my_fingers $ls my_toes $" DCC-IM/UFRJ Prof Valeria M. Bastos -.e%% como %in,ua,em Escrevendo programas em Shell: Digitando os comandos e executando-os interativamente O prompt normal $ troca para > quando se inicia a digitao de comandos na shell A seguir o programa executado "orma 1 A seguir o programa executado Armazenando os comandos em um arquivo e invocando da mesma forma que um programa Usando um editor de textos comum $# DCC-IM/UFRJ Prof Valeria M. Bastos s&ri'ts "orma 2 +7emp%o de pro,rama interati<o Determinar todos os arquivos que contm o string POSIX $for arquivo in * >do primeira "orma arquivo F uma <ari6<e% e $arquivo 'eu conte8do 2% DCC-IM/UFRJ Prof Valeria M. Bastos >do >if grep l POSIX $arquivo >then >more $arquivo >fi >done grep e more 'o comando' grep: pe';ui'a em um ou mai' ar;ui<o' por %in.a' ;ue com5inam com uma e7pre''o re,u%ar dada Aopo -%> %i'tarB more: mo'tra o conte8do do ar;ui<o0 uma te%a de cada <e& pro,rama interati<o 7 'cript programa interativo Desvantagem Digitar o programa cada vez que for necessrio Inibe reuso primeira "orma shell script Armazenar programa em um arquivo Invocar arquivo Vantagem Scripts possibilitam reuso 2$ DCC-IM/UFRJ Prof Valeria M. Bastos 'e,unda "orma +7emp%o de '.e%% 'cript arquivo chamado primeiro.sh - .sh sem significado - # indica comentrio - #! comentrio especial #!/bin/sh # primeiro.sh # compilar apenas os arqs. # contendo string POSIX 22 DCC-IM/UFRJ Prof Valeria M. Bastos - #! comentrio especial . indica qual programa deve ser usado para executar o arquivo . /bin/sh = shell default - exit 0 . cdigo de retorno . 0 indica sucesso for file in * do if grep l POSIX $file then more $file fi done exit 0 +7ecutando 'cript' forma fcil Invocar a shell com o nome do arquivo $ /bin/sh primeiro.sh 23 DCC-IM/UFRJ Prof Valeria M. Bastos forma mais elegante Invocar diretamente $chmod +x primeiro.sh $primeiro.sh Pode no funcionar - O arquivo pode no ser localizado (se PATH no foi atualizada para procurar no diretrio atual) chmod> a%tera a' permi''Ce' de ace''o de um ar;ui<o +x> adiciona modo e7ecut6<e% $ari6<ei' No so usualmente declaradas antes de usar criadas quando usadas pela primeira vez maisculas e minsculas so diferenciadas Valor de uma varivel: $ antes do nome $ meuscumprimentos=Alo Como contm espaos shell sintax 24 DCC-IM/UFRJ Prof Valeria M. Bastos $ meuscumprimentos=Alo $ echo $meuscumprimentos Alo $meuscumprimentos= Tudo bem $ echo $meuscumprimentos Tudo bem $meuscumprimentos= 9+3 $ echo $meuscumprimentos 9+3 Como contm espaos precisa de aspas read Permite ler o valor de uma varivel a partir do teclado Termina pressionando tecla <Enter> #!/bin/sh 25 DCC-IM/UFRJ Prof Valeria M. Bastos #!/bin/sh echo Entre algum texto read texto echo $texto echo $texto agora contm $texto Mostra contedo da varivel $texto Mostra a string $texto 4p*'tro"e' na '.e%% Pequena pausa para falar sobre apstrofes simples e duplas #!/bin/sh myvar=Hi there echo $myvar echo $myvar echo $myvar Contm espaos Mostra o valor da varivel Mostra string $myvar 26 DCC-IM/UFRJ Prof Valeria M. Bastos \ anula qualquer significado especial de $ echo $myvar echo \$myvar echo Entre com um texto read myvar echo $myvar igual a $myvar exit 0 da varivel Ex: $echostuff=echo $?$*; ls * | wc $echo $echostuff $echo $?$*; ls * | wc $ari6<ei' de am5iente So variveis pr-definidas Seus valores so obtidos do sistema quando um script inicia execuo Dependem do ambiente de execuo 27 DCC-IM/UFRJ Prof Valeria M. Bastos Dependem do ambiente de execuo Normalmente maisculas (para distinguir das variveis do usurio - em geral minsculas) Dependem da configurao particular do ambiente Exemplos: $HOME, $PATH, $#, $$ $ari6<ei' de am5iente $HOME diretrio pessoal (home) do usurio atual $PATH lista de diretrios onde procurar por comandos Separado por : (dois pontos) Ex.: 2" DCC-IM/UFRJ Prof Valeria M. Bastos Ex.: /usr/local/bin:/bin:/usr/bin:.:/home/neil/bin $# - nmero de parmetros passados $$ - o process ID da shell script Mai' <ari6<ei' de am5iente $PS1 command prompt ( usualmente $) $PS2 command prompt secundrio (usualmente >) $IFS separador de campos de entrada 2# DCC-IM/UFRJ Prof Valeria M. Bastos $IFS separador de campos de entrada Usualmente espao tab Nova linha !arLmetro' Variveis adicionais so criadas quando a shell invocada com parmetros Se a shell for invocada sem parmetros, ento $# possui 3% DCC-IM/UFRJ Prof Valeria M. Bastos valor 0 (zero) $1, $2, ... Parmetros dados ao script $* lista de todos os parmetros separados pelo 1 caractere em IFS (separador de campos de entrada) $@ variao de $*, que no usa IFS +7emp%o Salvar o arquivo com o nome tentar_var No esquecer de: chmod +x tentar_var #!/bin/sh saudacao=Hello echo $saudacao echo programa $0 em execucao echo O primeiro parmetro eh $1 3$ DCC-IM/UFRJ Prof Valeria M. Bastos O que ir acontecer? echo O primeiro parmetro eh $1 echo O segundo parmetro eh $2 echo O terceiro parametro eh $3 echo A lista de parmetros eh $* echo Diretorio home do usuario eh $HOME echo Por favor entre com uma frase read saudacao echo $saudacao echo O script sera finalizado exit 0 executar $ ./tentar_var foo bar baz )e'te de condiCe' Comando de teste Duas formas equivalentes [ ] No esquecer os espaos teste 32 DCC-IM/UFRJ Prof Valeria M. Bastos teste Condies de teste 3 categorias - comparao de strings - comparao aritmtica - caractersticas de arquivos Comparao de 'trin,' Comparao Verdadeiro se string1 = string2 So iguais string1 != string2 No so iguais 33 DCC-IM/UFRJ Prof Valeria M. Bastos -n string String no nula -z string String null (string vazia) Comparao aritmFtica Comparao Verdadeiro se expr1 -eq expr2 So iguais expr1 -ne expr2 No so iguais 34 DCC-IM/UFRJ Prof Valeria M. Bastos expr1 -gt expr2 expr1 > expr2 expr1 -ge expr2 expr1 >= expr2 expr1 -lt expr2 expr1 < expr2 expr1 -le expr2 expr1 <= expr2 ! expr Not expr Caracter9'tica' de ar;ui<o' $erdadeiro 'e $erdadeiro 'e -d file M diret*rio -s file )aman.o no F &ero -e file +7i'te -u file 'et-u'er-id e't6 %i,ado 35 DCC-IM/UFRJ Prof Valeria M. Bastos %i,ado -f file M ar;ui<o re,u%ar -w file !ode 'er e'crito -g file 'et-,roup-id e't6 %i,ado -x file M e7ecut6<e% -r file M %e,9<e% -e e f 'o 'imi%are' -f F mai' u'ada +'trutura' de contro%e if elif for if condition then comandos else comandos fi teste de condio para else for variable in values do comandos 36 DCC-IM/UFRJ Prof Valeria M. Bastos for while until case comandos done while condition; do comandos done until condition; do comandos done case variable in pattern [ | pattern] ... ) comandos;; pattern [ | pattern] ... ) comandos;; esac i" Exemplo: $ vi isnump_n #!/bin/sh # # Script to see whether argument is positive or negative # ()ser*e os es'a+os ,,, 37 DCC-IM/UFRJ Prof Valeria M. Bastos if [ $# -eq 0 ] then echo "$0 : You must give/supply one integers" exit 1 fi if test $1 -gt 0 then echo "$1 number is positive" else echo "$1 number is negative" fi i" Exemplo de uso: - &.o/ 755 is!0'1! - is!0'1! 5 N num5er i' po'iti<e 3" DCC-IM/UFRJ Prof Valeria M. Bastos - is!0'1! -45 -4N num5er i' ne,ati<e - is!0'1! 3/i'po'On > Pou mu't ,i<e/'upp%? one inte,er' - is!0'1! % 0 num5er i' ne,ati<e e%i" Exemplo: #!/bin/sh echo "Is it morning? Please answer yes or no" read timeofday 3# DCC-IM/UFRJ Prof Valeria M. Bastos if [ $timeofday = "yes" ] then echo "Good morning" elif [ $timeofday = "no" ]; then echo "Good afternoon" else echo "Sorry, $timeofday not recognized. " echo "Enter yes or no" exit 1 fi exit 0 pro5%emaEEE Problema com o if timeofday 'er6 con'iderado como> if [ = "yes" ] 2!tra!/o &o ret0r! if [ $timeofday = "yes" ] Co!/i+3o i!*4li/a 5era s5 /e erro 4% DCC-IM/UFRJ Prof Valeria M. Bastos if [ = "yes" ] !ara e<itar e''e pro5%ema U'ar ap*'tro"e' timeofday 'er6 con'iderado como> if [ "" = "yes" ] Co!/i+3o i!*4li/a 5era s5 /e erro if [ "$timeofday" = "yes" ] Co!/i+3o *4li/a e%i" Q i" Q te'te com ap*'tro"e' Exemplo: #!/bin/sh echo "Is it morning? Please answer yes or no" read timeofday 4$ DCC-IM/UFRJ Prof Valeria M. Bastos if [ "$timeofday" = "yes" ] then echo "Good morning" elif [ "$timeofday" = "no" ]; then echo "Good afternoon" else echo "Sorry, $timeofday not recognized. echo "Enter yes or no exit 1 fi exit 0 "or Exemplo: #!/bin/sh for foo in bar fud 43 do for variable in values do comandos done Lista de valores: bar, fud, 43 42 DCC-IM/UFRJ Prof Valeria M. Bastos echo $foo done exit 0 #!/bin/sh for file in $(ls f*.sh); do echo $file done exit 0 values = $(command) Fornece a lista para o for K.i%e Exemplo: #!/bin/sh echo "Enter password" read trythis while [ "$trythis" != "secret" ]; do while condition; do comandos done 43 DCC-IM/UFRJ Prof Valeria M. Bastos echo "Sorry, try again" read trythis done exit 0 Apstrofes desnecessrias #!/bin/sh foo=1 while [ "$foo" le 20 ] do echo "Here we go again" foo=$(($foo+1)) done exit 0 $(( )) unti% Exemplo: #!/bin/sh until who | grep w "$1" > /dev/null do sleep 60 Loop at usurio com login dado pelo parmetro $1 logar-se na mquina until condition; do comandos done 44 DCC-IM/UFRJ Prof Valeria M. Bastos done # Now ring the bell # and announce the expected user echo e \\a echo "*** $1 has just logged in" exit 0 Ra - Caracter de a%erta 'onoro A5eepB3 ca'e Exemplo: #!/bin/sh echo "Is it morning? Please answer yes or no" read timeofday Executa o primeiro comando que combina e finaliza case variable in pattern [ | pattern] ... ) comandos;; pattern [ | pattern] ... ) comandos;; esac 45 DCC-IM/UFRJ Prof Valeria M. Bastos case "$timeofday" in "yes") echo "Good morning";; "n" ) echo "Good afternoon";; "y" ) echo "Good morning";; "n" ) echo "Good afternoon";; * ) echo "Sorry, answer not recognized";; esac exit 0 M me%.or 'empre aparecer no "im ca'e Exemplo: #!/bin/sh echo "Is it morning? Please answer yes or no" read timeofday Forma mais curta agrupando alguns padres 46 DCC-IM/UFRJ Prof Valeria M. Bastos case "$timeofday" in yes | y | Yes | YES) echo "Good morning";; n* | N* ) echo "Good afternoon";; * ) echo "Answer not recognized";; esac exit 0 +7emp%o de u'o de S em ca'e +7pan'o do Ki%dcard S em N* e n* !ode com5inar com um ,rande n8mero de pa%a<ra'0 e no apena' 1o e no ca'e Exemplo: #!/bin/sh echo "Is it morning? Please answer yes or no" read timeofday case "$timeofday" in yes | y | Yes | YES) Outra variao 47 DCC-IM/UFRJ Prof Valeria M. Bastos yes | y | Yes | YES) echo "Good morning" echo "Up bright and early this morning" ;; [nN]* ) echo "Good afternoon" ;; * ) echo "Answer not recognized" echo "Please answer yes or no" exit 1 ;; esac exit 0 Set /i'ta de comando' Permite executar uma srie de comandos Lista E (AND List) +7ecuta o pr*7imo comando apena' 'e todo' o' anteriore' e7ecutam &o 'uce''o 4" DCC-IM/UFRJ Prof Valeria M. Bastos e7ecutam &o 'uce''o +7ecuta en;uanto comando retorna )RU+ Lista OU (OR List) +7ecuta o pr*7imo comando apena' 'e todo' o' anteriore' e7ecutam se 'uce''o +7ecuta en;uanto comando retorna F4/-+ /i'ta + Exemplo: #!/bin/sh touch f_one rm f f_two statement 1 && statement2 && statement 3 && ... Teste retorna FALSE Verifica se arquivo existe, seno cria Remove arquivo sem confirmao 4# DCC-IM/UFRJ Prof Valeria M. Bastos if [ -f f_one ] && echo "hello" && [ -f f_two ] && echo "there" then echo e "in if" else echo e "in else" fi exit 0 Ramo else executado porque condition FALSE (terceiro comando da lista AND) No executa /i'ta :U Exemplo: #!/bin/sh rm f f_one if [ -f f_one ] || echo "hello" || echo "there" statement 1 || statement2 || statement 3 || ... Remove arquivo sem confirmao 5% DCC-IM/UFRJ Prof Valeria M. Bastos if [ -f f_one ] || echo "hello" || echo "there" then echo e "in if" else echo e "in else" fi exit 0 Ramo then executado porque condition TRUE (terceiro comando da lista OR) No executa executa /i'ta' + e :U Listas E e OU retornam valor do ltimo comando avaliado /i'ta + ,era%mente "a%'o Aa meno' ;ue todo' o' comando' da %i'ta retornem <erdadeiroB 5$ DCC-IM/UFRJ Prof Valeria M. Bastos comando' da %i'ta retornem <erdadeiroB /i'ta :U ,era%mente <erdadeiro Aa meno' ;ue todo' o' comando' da %i'ta retornem "a%'oB Listas E e OU podem ser combinadas +7> [ -f .profile ] && exit 0 || exit 1 (%oco' de comando' Usar { } !ermitem con'truir um 5%oco de comando' (%oco' 'o u'ado' para co%ocar m8%tip%o' comando' onde apena' um comando F permitido 52 DCC-IM/UFRJ Prof Valeria M. Bastos onde apena' um comando F permitido +7> { statement statement statement } FunCe' Facilitam a escrita de programas grandes Me'ma ar,umentao u'ada para %in,ua,en' de pro,ramao 4%ternati<a 'eria c.amar pro,rama' dentro de pro,rama' 53 DCC-IM/UFRJ Prof Valeria M. Bastos 4%ternati<a 'eria c.amar pro,rama' dentro de pro,rama' FunCe' 'o mai' r6pida' e a pa''a,em de parLmetro' F mai' 'imp%e' De"inio> function_name (){ statements } Funo> e7emp%o #!/bin/sh funcao () { echo "Hello World" } Declarar antes de usar ! 54 DCC-IM/UFRJ Prof Valeria M. Bastos } echo "inicio do script" funcao echo "fim do script" exit 0 Chamada da funo !arLmetro' Passagem de parmetros Tuando uma "uno F in<ocada0 o' parLmetro' po'icionai' 'o 'u5'titu9do' pe%o' parLmetro' da "uno $1,$2, ... Parmetros dados ao script $* Lista de todos os parmetros 55 DCC-IM/UFRJ Prof Valeria M. Bastos 'o 'u5'titu9do' pe%o' parLmetro' da "uno Tuando a "uno termina0 o' parLmetro' po'icionai' 'o re'taurado' ao <a%or inicia% comando return Forma da "uno retornar <a%ore' Retorna <a%ore' !06ri&os Funo> I 1 e7emp%o #!/bin/sh sim_ou_nao () { echo "Seu nome $* ? " while true do echo n "Entre sim ou no: " Definio da funo Crie o fonte meu_nome.sh 56 DCC-IM/UFRJ Prof Valeria M. Bastos echo n "Entre sim ou no: " read x case "$x in" s | sim ) return 0;; n | no ) return 1;; * ) echo "Responda sim ou no" esac done } Retorna valor numrico: 0 - equivale a verdadeiro 1 - equivale a falso Funo> I 1 e7emp%o Acont3B # Programa principal com a invocao da funo echo "Parmetros originais so: $*" if sim_ou_nao "$1" then Lista de todos os parmetros Chamada da funo 57 DCC-IM/UFRJ Prof Valeria M. Bastos echo "Ol $1, belo nome: " else echo "Esquea" fi exit 0 Teste de valor numrico: 0 - verdadeiro 1 - falso +7ecutar com> $./meu_nome.sh <seu nome> Comando' normais Comando' ;ue podem 'er e7ecutado' a partir do prompt da '.e%%0 no apena' dentro de um 'cript Qualquer comando UNIX vlido 5" DCC-IM/UFRJ Prof Valeria M. Bastos internos (built-in) Comando' ;ue '* podem 'er e7ecutado' dentro de um 'cript 1o podem 'er in<ocado' e7ternamente !ara a%,un' de%e' e7i'tem pro,rama' e7terno' corre'pondente' :' interno' 'o mai' e"iciente' 4%,un' comando' Gera uma sada formatada 5reaU > continue 3 e7port e7pr print" return 'et Mo'tra uma 'trin, Ver $(( )) 5# DCC-IM/UFRJ Prof Valeria M. Bastos 3 ec.o e<a% e7ec e7it n 'et '.i"t trap un'et +7ecuo de comando' $(command) Captura o re'u%tado da e7ecuo de um comando e permite co%oc6-%o em uma <ari6<e% Re'u%tado 6 uma 'trin, A'a9da do comandoB 6% DCC-IM/UFRJ Prof Valeria M. Bastos Re'u%tado 6 uma 'trin, A'a9da do comandoB Re'u%tado !3o 6 e'tado de retorno #!/bin/sh echo diretorio atual eh $PSW echo usuario atual eh $(who) exit 0 PSW varivel de ambiente (no comando) who comando e por isso vem entre ( ) +7ecuo de comando'> e7pan'o aritmFtica $((...)) 4%ternati<a ao comando e7pr : e7pr F %ento poi' in<oca uma no<a '.e%% para e7ecuo da e7pre''o 6$ DCC-IM/UFRJ Prof Valeria M. Bastos e7pre''o #!/bin/sh x=0 while [ "$x" ne 10 ]; do echo $x x=$(($x+1)) done exit 0 7VWe7pr X7 I 1W +7ecuo de comando'> e7pan'o aritmFtica 27'ress3o Des&ri+3o e7pr1 Y e7pr2 e7pr1 Q e7pr2 e7pr1 V e7pr2 expr1 'e expr1 no F &ero0 'eno expr2 zero se qualquer expr for zero, seno expr1 igual U'ada' em expr e em XAA 333 BB 62 DCC-IM/UFRJ Prof Valeria M. Bastos e7pr1 V e7pr2 e7pr1 G e7pr2 e7pr1 GV e7pr2 e7pr1 J e7pr2 e7pr1 JV e7pr2 e7pr1 =V e7pr2 igual maior que maior que ou igual menor que menor que ou igual diferente e7pr1 I e7pr2 e7pr1 - e7pr2 e7pr1 S e7pr2 e7pr1 / e7pr2 e7pr1 Z e7pr2 'oma 'u5trao mu%tip%icao 4RI)MM)IC4- di<i'o inteira m*du%o 4%,uma' re"erncia' Introduo ao /I1U2 e !ro,ramao em -cript -.e%% .ttp>//KKK3te%ecom3u""35r/pet/petK'/doKn%oad'/apo'ti%a'//I1U23pd" /inu7 -.e%% -criptin, )utoria% - 4 (e,inner[' .and5ooU .ttp>//KKK3"reeo'3com/,uide'/%''t/ 63 DCC-IM/UFRJ Prof Valeria M. Bastos .ttp>//KKK3"reeo'3com/,uide'/%''t/