Comecemos pelo famoso "Hello World".
$ vim hello_world.sh
OBS: .sh é a extensão usada para denotar quando um arquivo contém código de Shell Script. Isto ajuda editores (como o VIM que utilizo) a colorir corretamente palavras reservadas (if, for, ...).
No arquivo hello_world.sh, vamos adicionar a seguinte linha:
echo "Hello World!"
Fecharemos o arquivo e, no terminal, executaremos:
$ sh hello_world.sh
Isto chamará o interpretador do Shell e ele executará os comandos que estiverem dentro deste arquivo. O resultado deve ser assim:
Hello World!
Para não precisarmos chamar toda vez que quisermos executar nossos scripts o "sh", nós podemos fazer assim:
#!/bin/sh
echo "Hello World!"
Damos permissões de execução para o arquivo:
$ chmod +x hello_world.sh
Então podemos executar diretamente o arquivo no terminal:
$ ./hello_world.sh
Hello World!
[1] Comentário enviado por
mlegidio em 23/10/2006 - 05:12h:
Gostei muito deste artigo, pelo simples fato dele ter despertado em mim uma curiosidade em melhorar nessa parte. Obrigado pelos links enviados.
abracos
Mlegidio
[2] Comentário enviado por
pedemesa em 23/10/2006 - 09:32h:
Show de bola! Muito bom mesmo! Vou ler mais sobre o XDialog...
[3] Comentário enviado por
balani em 23/10/2006 - 13:54h:
Muito bom, bem explicado, vlw
[4] Comentário enviado por
texugo89 em 23/10/2006 - 15:23h:
O artigo ficou muito bom, bem simples e objetivo...
Mas eu encontrei dois pequenos erros em WHILE:
original:
--------------------
Usando "while" ao invés de "for" fica assim:
i=1
while [ i -le 100 ]; do
echo "$i"
done
--------------------
como deve ficar:
--------------------
Usando "while" ao invés de "for" fica assim:
i=1
while [ $i -le 100 ]; do
echo "$i"
i=$((i+1))
done
--------------------
1. Alteração, como o i é uma variável ele tem que ser declarado juntamento com o $ ficando assim: $i
2. Alteração, no while você deve almentar o valor da variável $i, caso contrário você ficara em um looping eterno e o echo sempre imprimira 1. Para corrigir isso acrescente a seguinte linha após o echo: i=$((i+1))
Abraços,
## T3%U60 ##
[5] Comentário enviado por
_luks em 23/10/2006 - 21:15h:
parabens,
esse foi um dos melhores tutoriais de sh que ja li na minha vida :D
[6] Comentário enviado por
removido em 24/10/2006 - 19:10h:
nada de C nem coisas complicadas, use Shell! Adorei, sendo um entusiasta do Shell Linux! Parabéns!!
[7] Comentário enviado por
bryan em 25/10/2006 - 16:11h:
Muito obrigado pelos elogios. =)
Me esforcei bastante para que ficasse o mais simples e direto o possível.
Obrigado ao texugo pela correção no exemplo do while, acabei me passando nessa... =)
[8] Comentário enviado por
douglasdiasn em 08/11/2006 - 10:25h:
Muito Simples e Direto
Parabens...
[10] Comentário enviado por
GilsonDeElt em 22/03/2008 - 21:04h:
d+, cara!
os usuários de Shell Script (e até os não-usuários deles, mas que dependem de quem usa) te agradecem
foi o mais simples artigo sobre Shell que eu já li até então!
Congratulations!
[11] Comentário enviado por
minduim em 07/04/2009 - 20:40h:
como eu converto string para numeros?
Obrigado pela atenção.
#!/bin/bash
tamanho_max=7,4M
t=$(/usr/bin/du -h -s /home/)
total=$(echo $t |cut -f1 -d"/")
echo "$t"
echo "$total"
echo $total+1
if [ ${total} -ge ${tamanho_max} ]
then
echo "maior igual"
else
echo "menor igual"
fi
[12] Comentário enviado por
bryan em 08/04/2009 - 10:09h:
Tu tens quatro problemas aqui.
Primeiro: se tu quiser usar a variável "tamanho_max" para comparação, tu terá que retirar o M do final, ficando:
tamanho_max="7,4"
Segundo: para garantir igualdade de grandezas na comparação (ou seja, garantir que tu irá comparar megabyte com megabyte), tu terá que alterar o teu comando du para isto:
t=$(/usr/bin/du -shm /home/)
Isto fará com que, no momento do cut para calcular o valor da variável "total", o resultado não tenha um "M " no final. Isto estava acontecendo no teu script original. Caso tu ateste que continua, é só adicionar mais um cut na linha:
total=$(echo $t |cut -f1 -d"/" | cut -f1 -d"M")
Terceiro: sobre teu echo... O shell script não sabe lidar com pontos flutuantes... o que tu deve fazer, para imprimir o valor correto, é usar o bc!
echo $total+1 | bc
Quarto: sobre o if... O -ge do comando test somente sabe compara inteiros. Tu terá que usar da seguinte forma:
if [ ${total} > ${tamanho_max} ] || [ ${total} = ${tamanho_max} ]
then
echo "maior igual"
else
echo "menor"
fi
Sim, tu terá que fazer dessa forma. Infelizmente, o comando test não reconhece ">=", daí tu tem que separar.
É isso. Agora tem que funcionar.
Abraços.