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.
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
[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.
[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?
[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!!"
[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.
[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).