Programacao Bash
Programacao Bash
Programacao Bash
3
Programao em Bash Shell
(Bash Shell)
Os objectivos deste mdulo so os seguintes: Programao do Bash Shell Estruturas de Controlo if e case Repetio
Referncias
A quick guide to writing scripts using the bash shell : localcopy Advanced Bash Scripting Guide : the Linux Documentation Project : localcopy Vrios documentos sobre Unix
Pgina 1 de 15
SISTEMAS OPERATIVOS
1 Introduo
O bash shell antes de mais um interpretador de comandos. Efectua a leitura de comandos introduzidos na linha de comando e interpreta-os. A interpretao significa uma ou mais aces do sistema operativo, por exemplo executar o comando que foi escrito! Resumindo, os interpretadores de comandos de linha, tipo Bash Shell, so uma maneira de efectuar a interface entre o utilizador e o sistema operativo. No caso dos sistemas Linux/Unix, o interpretador de comandos afecto a cada utilizador por defeito encontra-se no ficheiro /etc/passwd. Execute, por exemplo, o comando finger para ver a sua informao. Um Shell Script um conjunto de comandos escritos numa linguagem de script. Uma linguagem script permite uma interpretao mais complexa dos nossos comandos. Portanto um shell script poder ser apenas uma sequncia de comandos existentes ou atravs de uma linguagem prpria podemos usar variveis, ciclos de repetio e outras estruturas de controlo tpicos de qualquer linguagem imperativa, at h linguagens criptas baseados em outras paradigmas de programao utilizando por exemplo objectos. Normalmente os shell scripts so utilizados na construo de pequenas aplicaes de auxlio administrao de sistemas e aos programadores experientes. So utilizados para automatizar tarefas dirias tais como realizao de cpias de segurana, gesto de contas, remoo automtica de determinado tipo de recursos, pesquisa de informao, etc. Tambm podem ser utilizados para prototipagem rpida de aplicaes mais complexas, gerir projectos de programao e como partes pequenas de sistemas sofisticados.
Pgina 2 de 15
SISTEMAS OPERATIVOS
1.3 Execuo.
Neste momento o ficheiro ola.sh pode ser executado, ou melhor dito interpretado, escrevendo simplesmente o seu nome. Ver o exemplo completo em baixo: ________________________________________ alunos:~/scripts crocker$ vi ola.sh alunos:~/scripts crocker$ ls -l ola.sh -rw-r--r-- 1 crocker staff 68 24 Feb11:30 ola.sh alunos:~/scriptscrocker$ ola.sh -bash: ola.sh: command not found //Problema com o path. //No est includo o directrio actual o ponto alunos:~/scripts crocker$ ./ola.sh -bash:./ola.sh: Permission denied alunos:~/scripts crocker$ chmod 744 ola.sh alunos:~/scripts crocker$./ola.sh ola crocker /Network/Servers/alunos/Volumes/alunos/Alunos/crocker/scripts ola.sh exemplo.sh alunos.txt ThuFeb 24 11:31:33 WET 2005 ________________________________________ Finalmente vemos o resultado do nosso primeiro shell script. //problema com a permisso //mudar permisso //criaro ficheiro //ver detalhes do ficheiro
Pgina 3 de 15
SISTEMAS OPERATIVOS
2 Variveis.
A sintaxe de declarao duma varivel: <nome_varivel>=<valor>
No so permitidos espaos antes nem depois do carcter = Apenas caracteres alfanumricos podem ser utilizados como identificadores vlidos de variveis. Os valores do tipo string que contenham espaos devem ser especificados entre aspas como no exemplo em baixo
Exerccio 1: Faa um bash shell script para experimentar com variveis como no exemplo em baixo.
#!/bin/bash # variveis de ambiente echo $USER $HOME echo $PATH # ver todas as variveis do ambiente com o comando env #variaveis locais ola="bom dia" echo "$ola Paulo" echo "$olaPaulo" echo "${ola}Paulo" mesg="$ola $USER" echo $mesg # input usando read echo "Introduza qualquer Coisa" read var echo "Introduziu $var" #variaveis especiais echo echo echo echo echo echo "Numero de Arguments para este script $#" "Todos os argumentos para este script $*" "O primeiro $1 e segundo $2 argumentos para este script" "O nome deste ficheiro $0" "O Processo ID deste script $$" "Exit status do comando anterior $?"
Pgina 4 de 15
SISTEMAS OPERATIVOS
#um exemplo misturando vrios comandos e variveis. info=`echo $HOME ; echo " estamos no directorio "; pwd` echo $info
Para avaliar uma expresso aritmtica utiliza-se a funo let como no exemplo em baixo #!/bin/bash x=1 let x=x*2+3 echo "x=$x" let x-echo "x=$x" y=2 let x=x + 3**y echo x=$x
#output5 #output4
#output 13
Pgina 5 de 15
SISTEMAS OPERATIVOS
3.2 Lgicos
&& || E Ou
3.5 Ficheiros
-e -f -d Devolve verdade caso o ficheiro exista Devolve verdade se o ficheiro regular e no uma directoria Devolve verdade caso se trate de uma directoria
da condio1 ser verdadeira ] da condio2 ser verdadeira de nenhuma das condies ser verdadeira
Pgina 6 de 15
SISTEMAS OPERATIVOS
Exerccio 5: mywho
Implemente e Experimente o script mywho. A seguir modifique-o para aceitar um string como parmetro em vez de ser lido. Se o username (string) for encontrado ento o script dever adicionalmente executar o comando finger filtrando o output pelo valor do string. Soluo: Em vez de ler o nome com o comando read utilizar-se- a varivel $1.
Pgina 7 de 15
SISTEMAS OPERATIVOS
5 Estruturas de Repetio
Existem os seguinte ciclos de repetio: ciclos for ciclos while ciclos until
Exemplo : imprimir cores e nmeros numa lista simples #!/bin/bash for i in *.c do cp $i ~/backup/ done Exemplo: Copiar todos os ficheiro de C para um directrio de backup #!/bin/bash y="ola bom dia" for i in $y do echo $y done Exemplo: Copiar todos os ficheiro de C para um directrio de backup #!/bin/bash y="ola bom dia" for i in $y do echo $y done A lista neste caso a varivel y que contenha 3 strings Exemplo: Calcular a soma duma coluna de nmeros inteiros contido no ficheiro valores.txt (um valor por LINHA ) passando primeiro os valores para um vector para ilustrar o uso dum vector ao mesmo tempo. vec=( `cat valores.txt` ) sum=0 for elemento in "${vec[@]}" do echo $elemento let sum=sum+elemento done echo soma = $sum A lista neste caso os valores do vector convertidos numa lista usando as aspas.
Pgina 8 de 15
SISTEMAS OPERATIVOS
Exerccio 7: mywho
Generalizar o script anterior mywho para aceitar N parmetros. Precisar da estrutura de repetio for
Exerccio 8:fichas
Faa um bash shell script, fichas, que faa uma listagem dos ficheiros no directrio actual na seguinte forma [crocker@penhas p2]$ fichas Ficheiro 1 ex1.c Ficheiro 2 fichas Ficheiro 3 g1.c Ficheiro 4 tmp Ficheiro 5 stack.c
Soluo : Utilizar uma varivel para guardar os nomes dos ficheiro f=`ls` ... seguido por um ciclo for variavel in $f do.. done
Exerccio 9: Enquanto
Implemente o script enquanto em baixo que ilustre o sintaxe do comando while. #!/bin/bash #script contar ou not-quite-enquanto cnt=1 while [ $cnt le 10 ] do echo "cnt $cnt" let cnt++ done
Pgina 9 de 15
SISTEMAS OPERATIVOS
Modifique o shell script, enquanto, que faa uma contagem apartir do valor do seu primeiro argumento at o valor do segundo. Dever estudar e modificar o script em baixo [bash]$ cnt 2 cnt 3 cnt 4 cnt 5 enquanto 2 5
Pgina 10 de 15
SISTEMAS OPERATIVOS
8 Funes
Funes so blocos de comandos que podem ser executados em qualquer parte do cdigo. Ver o exemplo em baixo: #!/bin/bash #script backup Listar() { echo Opcao 1 :listar ficheiros .c echo Opcao 2 :listar ficheiros .txt readop cd ~/backup if [ op eq 1 ] ls l *.c else ls l *.txt fi } Main_Menu() { opcao=1 while [ $opcao -ne 0 ] do echo "1. Backup dos ficheiros" echo "2. Listagem da pasta ~/backup" echo "0. Sair" echo echo -n "Introduza a sua escolha " read opcao case $opcao in 1) Backup ;; 2) Listar ;; 0) exit ;; *) Opcao desconhecida esac done } date Main_Menu
9 Finalizar
Os seus scripts devem ser acessveis a partir de qualquer directrio do seu login shell. Por isso coloca os seus scripts no seu directrio ~/bin e altere o seu path para incluir este directrio. Nota No seu ambiente de trabalho, devem configurar a varivel Path paraincluir o directrio actual ( o smbolo .) e o seu directrio $HOME/bin.Tambm devem conformar que tem um ficheiro .alias, onde devem colocarcomandos tipos aliases, e que este ficheiro lido durante o processo de logon.
Pgina 11 de 15
SISTEMAS OPERATIVOS
10.2 Ordenaao
O comando sort (ordenar) muito til para ordenar usando critriosalfabticos ou numricos Exemplo : Usando o ficheiro test.txt para experimentar que tem quatro campos alunos:~/scripts$ cat test.txt a:1:3.2 c:9:1.2 d:1:0.2 b:2:0.3 Ordenar alfabeticamente o primeiro campo (key k 1) -t para indicaro separador dos campos, neste caso o : alunos:~/scripts$ sort -t ":" -k 1 test.txt a:1:3.2 b:2:0.3 c:9:1.2 d:1:0.2 Ordenar numericamente (-n) usando o campo 2 alunos:~/scripts$ sort -n -t ":" -k 2 test.txt a:1:3.2 d:1:0.2 b:2:0.3 c:9:1.2 Ordenar numericamente (-n) usando o campo 3 alunos:~/scripts $ sort -n -t ":" -k 3 test.txt d:1:0.2 b:2:0.3 c:9:1.2 a:1:3.2
Pgina 12 de 15
SISTEMAS OPERATIVOS
Pgina 13 de 15
SISTEMAS OPERATIVOS
11 Exerccios Suplementares
NOTA: no utilizem chamadas ao sistema system apenas os comandos e linguagem do shell.
EXERCCIO N1 (SCRIPT) (a) Implementeum comando Unix, designado por wh,que envia para o cran o pathcompleto do comando passado como parmetro; por exemplo, wh ls devolver /bin/ls. (b) Generalizeo comando para n parmetros.
dica which
EXERCCIO N2 (SCRIPT) Implemente um comando Unix, designado por cpy, quecopie a primeira metade dum ficheiro para outro ficheiro. O ficheiro destino um ficheiro criado pelo prprio comando e passado como parameter
dica chmod
EXERCCIO N4 (SCRIPT) Implemente um comando Unix, designado por us, quefaa uma listagem de todos os utilizadores autorizados do sistema, incluindo osusernames, nomes completos, e estado de utilizao (IN ou OUT).
Pgina 14 de 15
SISTEMAS OPERATIVOS
Referncias ............................................................................................................................... 1 1 Introduo.............................................................................................................................. 2 1.1 O Primeiro Script ............................................................................................................... 2 1.2 Atribuio de permisses de execuo............................................................................... 3 1.3 Execuo. .......................................................................................................................... 3 2 Variveis................................................................................................................................ 4 Exerccio 1: Faa ................................................................................................................. 4 2.1 Substituio de Comandos ................................................................................................. 5 2.2 Vectores (Arrays) ............................................................................................................... 5 3 Os Operadores ....................................................................................................................... 5 3.1 Operadores Aritmticos ..................................................................................................... 5 Exercicio 2: let Experimente com o comando let 3.2 Lgicos ....................................... 5 3.2 Lgicos ............................................................................................................................... 6 3.3 Comparao inteira ( it helps to know a little English .. ) .................................................. 6 3.4 Comparao de strings ....................................................................................................... 6 3.5 Ficheiros ............................................................................................................................. 6 4. As Estruturas de Controlo de deciso if e case ............................................................. 6 4.1 A sintaxe do comando if.................................................................................................... 6 4.2 A sintaxe do comando case ................................................................................................ 7 Exercicio 3: Menus de Calendarios.......................................................................................... 7 Exemplo 4: O script mywho..................................................................................................... 7 Exerccio 5: mywho ............................................................................................................. 7 5 Estruturas de Repetio ......................................................................................................... 8 Exercico 6: Argumentos Implemente ................................................................................ 9 Exerccio 7: .......................................................................................................................... 9 Exerccio 8:fichas ..................................................................................................................... 9 Exerccio 9: Enquanto .............................................................................................................. 9 Exercico 10: wcnovo .......................................................................................................... 10 8 Funes ............................................................................................................................... 11 9 Finalizar.............................................................................................................................. 11 10 Utilidades ......................................................................................................................... 12 10.1 Formataao .................................................................................................................... 12 10.2 Ordenaao...................................................................................................................... 12 10.3 Calculos Numericos ....................................................................................................... 13 11 Exerccios Suplementares ................................................................................................. 14
Pgina 15 de 15