Vous êtes sur la page 1sur 63

UFRJ IM - DCC

Departamento de Cincia da Computao


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/

Vous aimerez peut-être aussi