Programando em shell script (conceitos básicos)

Estou montando este artigo para ajudar as pessoas que tem interesse em começar a programar em shell script. Não achei nenhuma uma introdução rápida e de fácil entendimento aqui no VOL.

[ Hits: 39.685 ]

Por: Marcello Bontempo Salgueiro em 21/12/2006 | Blog: http://marcello.tranqueira.net


Mão na massa!



Todo o programa deve começar com um interpretador de script. O programa inicia da seguinte maneira:

#!/bin/bash

Ou:

#!/bin/sh

OBS: O programa sempre começa com os caracteres '#!' na frente.

Vamos ver um exemplo então:

# nano bomdia.sh

Dentro do nano:

#!/bin/bash
clear
echo "Olá $USER"

Salve o programa e execute-o:

# sh bom.sh

Algumas condicionais possíveis:

= Igual
-eq Igual
!= Diferente
-gt Maior
-lt Menor
-o Ou
-d Se o arquivo for diretório
-e Se existir o arquivo
-z Se o arquivo estiver vazio
-f Se o arquivo conter algum texto
-o Se o usuário for o dono do arquivo
-r Se o arquivo pode ser lido
-w Se o arquivo pode ser alterado
-x Se o arquivo pode ser executado


Se Senão

O 'se' 'senão' do bash é parecido com o das outras linguagens de programação:

if=se
fi=fim se
else=senão

Porém o "if" no shell script não faz um teste com uma condição e sim com um comando. O atalho para o teste pode ser utilizado com o símbolo [ ], veja o exemplo:

if [ $? = 0 ]; then
   echo 'Olá'
else
   echo 'Alô'
fi

OBS: Observe que deve haver espaços entre o comando e as chaves.

Condicional case

O "case" também serve para o controle de fluxo, mas permite que uma série de valores e expressões regulares seja testada e os comandos executados. A sintaxe:

case variável in
    expressão1) comando1 ; comando2 ; ;
    expressão2) comando3 ; comando4 ; ;  
    *) comando5 ; ;
esac

OBS: O "*)" é um padrão do case, se a variável testada não for igual a nenhuma das expressões 1 e 2, ele vai executar o comando5.

O loop for

A sintaxe do "for" é um pouco complicada de se entender, por isso aconselho fazer esses dois exemplos para poder distinguir.

Crie um arquivo txt, vamos escrever algo nele:

$ ls -1 > lista.txt
$ for i in 'cat lista.txt' ; do cp $i.backup; mv $i.backup /usr/backup; done;


A $i é atribuída para cada linha do arquivo.

Outro exemplo:

for numero in um dois tres quatro cinco
do
   echo "Contando: $numero"
done

O while

É usada como nas outras linguagens, enquanto verdadeiro ou falso continua a executar a condição (no nosso caso o comando). Ex.:

variavel='valor'
while [ $variavel = "valor" ]; do
  comando1
  comando2
done

veja um exemplo de uma grande programação shell:

# cat /etc/profile

E fim.

Página anterior    

Páginas do artigo
   1. Variáveis
   2. Aliases
   3. Mão na massa!
Outros artigos deste autor

Escreva poemas com a sua linguagem de programação

Instalação e configuração do Hylafax (servidor de FAX)

Criando um Ubuntu (6.10/7.04) personalizado

Aircrack-ng e sua família para quebrar WEP e WPA1

Leitura recomendada

Sed - Introdução

Introdução ao Shell Script - Baseado no livro de Ken O. Burtch

Bitwise - Escovando os bits

Monitoramento automático de logs e alertas por e-mail - Fácil e explicado

Trabalhar com array no Bash

  
Comentários
[1] Comentário enviado por tuxSoares em 21/12/2006 - 09:37h

Muito fraco, ja existem inumeros artigos desse tipo, acho que foi feito somente para ganhar pontos no rancking.
Mas ta valendo a iniciativa

[2] Comentário enviado por pacman em 21/12/2006 - 09:41h

Bom, é bem resumido, uma coisa interessante de se falar na parte de aliases é que vc pode criar um alias com o mesmo nome de um comando.

alias ls='ls -la'

nesse caso, se vc quiser chamar o comando original e não o alias, vc usa uma contra barra na frente do alias ;-)

[3] Comentário enviado por thelinux em 21/12/2006 - 13:33h

Parabéns pelo artigo. Para quem está inciando no mundo Linux, um artigo como este ajuda bastante. Existem, milhares de documentações sobre Linux e está aqui é mais uma e que ajuda.

Que venha o próximo artigo.

[4] Comentário enviado por tenchi em 22/12/2006 - 00:17h

Também é possível utilizar aritmética nas condicionais:
if ((a>0)) && ((a<=10))
then
echo "A é maior que zero e menor ou igual que 10"
fi
# e também tem o elif...

E no for:
for ((var=1;var<10;var++))
do
echo $var
done

Olha kra, eu comecei a mexer em shell esses tempos, e acho que para um iniciante, ler esse artigo confunde um pouco...
Não estou criticando o seu trabalho, deixo claro aqui, blz?

Falow

[5] Comentário enviado por removido em 22/12/2006 - 08:24h

a linha #!/bin/bash não é necessáriamente obrigatoria, ela somente indica o caminho do interpretador, sem esta linha no seu script, você poderia executalo, chamando o bash com o caminho do script.

O for seta a variavel com cada valor dado separado por espaços, caso o programador queira toda a frase, deve usar ex:

ls -la | while read x;do
echo $x
done

Bom são essas minha observação, no demais esta de bom tamanho para iniciantes.

[6] Comentário enviado por mbsalgueiro em 22/12/2006 - 15:05h

obrigado pela criticas e comentarios aqui! pois somente elogios não se cresce!!!!
tenchi é um pouco complicado para iniciante tb concordo mas tentei fazer de uma forma mais resumida para os iniciante, paraque eles tenham um ponta pé para a inspiração para comecar a programar em shell!! E quem sabe ate ajudar a crescer o SL!!
E continuem postando aqui comentarios crescentes!!!! Sempre são bem vindos...!!! Como sempre digo...: "Quanto mais penso que sei, mais eu percebo que não sei nda!!"

[7] Comentário enviado por yetlinux em 23/12/2006 - 06:21h

Acho que faltou dizer prá que serve o "pipe", vulgo barra vertical "|". Mas isso é para informar quem não sabe. Há outras coisas assim também.

Para primeiro artigo está ótimo, há aqui muitas boas idéias.
O próximo artigo que você escrever sairá ainda melhor, não se preocupe.

[8] Comentário enviado por celsopimentel em 24/12/2006 - 16:28h

Ola! Amigos, gostaria de uma mão para realizar o seguinte script.

tenho um arquivo chamado download.php, no interior dele têm uma data por ex. 24-12-06. quero fazer um script que edite o arquivo download.php e altere a data para um dia após o atual. por ex. se hoje for dia 20-12-06 ele tem que editar o arquivo e colocar a data de dia 21-12-06. Isso é possível????

[9] Comentário enviado por tenchi em 24/12/2006 - 20:03h

celsopimentel, acho que se você pesquisar alguma coisa sobre os comandos sed e tr, vc vai achar a solução deste problema.
Foi mal por não ser mais específico, pois eu também não sei como fazer.
Mas posta aqui se conseguir.

[10] Comentário enviado por celsopimentel em 25/12/2006 - 09:14h

Obrigado Tenchi, valeu! Vou pesquisar.

[11] Comentário enviado por tenchi em 26/12/2006 - 00:33h

Ah, uma coisa que eu não entendi..

Variávei em shell não são declaradas.
Declarar é algo que fazemos comumente em C, pascal, etc.
int j; //c
j:integer; {pascal}
E as variáveis só são tratadas como $var quando queremos o conteúdo delas. Quando atribuímos um valor à ela, usamos só o nome dela mesmo (var="um dois tres"). A menos, é claro, que você use ela em cálculos ((var+1)).
Ah, e acho que um jeito mais prático de verificar o conteúdo se uma variável é:
$ echo $var
Mas esse comando set eu não conhecia. Legal. Bem diferente do set do tcl (atribuição).

Só correções, não críticas. Continue assim.

Falow mais uma vez.

[12] Comentário enviado por jhoumedeiros em 26/12/2006 - 11:06h

Cara gostei... finalmente consegui entender o for... hauhau

Flw!!!

[13] Comentário enviado por mbsalgueiro em 26/12/2006 - 21:12h

Fico feliz jhoumedeiros!!!! =)
espero q continuem postando aqui!!!!!!!
vlw galera!!

[14] Comentário enviado por removido em 27/12/2006 - 12:12h

Parabens pelo artgo!
quanto aos condicionais
são semelhantes aos usados
na linguagem FORTRAN 77

[15] Comentário enviado por minduim em 08/04/2009 - 17:16h

Ola, você sabe como converter String para ineteger ou float em shell script?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts