Neste que é o segundo artigo da série, vamos aprender a criar um script usado apagar os arquivos de determinado usuário. Usaremos estruturas de controle como o if-else, além de mais alguns comandos de shell.
Bem, acho que agora você já está pronto para scripts um pouco mais
complexos. O script a seguir procura por arquivos pertencentes a um
determinado usuário, lista-os e caso haja a confirmação, apaga-os.
#!/bin/sh
# Apaga arquivos de um determinado usuário caso você seja root.
if [ "$LOGNAME" = "root" ]; then
if [ "$#" != 1 ]; then
echo "Uso: `basename $0` "
exit 0
fi
echo -e "Remover os arquivos de $1 [s/N]" '\c'
read resposta
if [ $resposta ]; then
if [ "$resposta" = s -o $resposta = S ]; then
rm -rf `find / -user $1 | grep -v "/dev/tty"`
else
exit 0
fi
else
exit 0
fi
else
echo "Erro: Você precisa ser root para rodar este programa"
fi
Agora a explicação de cada linha:
1-2) Essas você conhece.
3) Utiliza o comando "if" para verificar se o usuário é root.
4-7) Verifica se o número de argumentos fornecidos na linha
de comando é diferente de 1, caso haja confirmação é exibida mensagem
de erro e o programa é finalizado.
8-9) Exibe o prompt de confirmação (echo...) e nomeia a
resposta dada como a string $resposta(read resposta).
10) Verifica se foi dada alguma resposta.
11-15) Verifica se a resposta dada é igual a "s" ou "S", se
for, executa o comando "rm -rf" para apagar todos os arquivos
pertencentes usuário especificado no argumento 1 ("$1") utilizando
o comando "find / -user $1| grep -v /dev/tty" para listá-los.
NOTA: O comando "grep" é utilizado para excluir da lista os arquivos
/dev/ttyX, como /dev/ttyS1, que recebem o uid do usuário
ao serem abertas sessões e cuja exclusão poderia prejudicar o
funcionamento do sistema.
16-18) Caso o usuário não tenha dado uma resposta no prompt,
o programa é finalizado.
19-21) Caso você não seja root é apresentada uma mensagem de
erro e o programa é finalizado.
Agora vamos às perguntas que provavelmente tenham surgido:
P: Como esse comando "if" é utilizado?
R: Simples.
if [ expressão de teste ]; then
comando em caso de positivo
else
comando em caso de negativo
fi
NOTA: Expressões de teste serão explicadas a seguir.
P: O que é "$LOGNAME"?
R: É uma variável do ambiente shell. Utilize o comando "env" para
conhecer as variáveis que o seu shell possui.
[1] Comentário enviado por arknoid em 03/12/2003 - 14:49h
Quando forem fazer seus scripts tomem cuidado com a sintaxe pessoal, um erro muito comum de quem está aprendendo scripts e já sabe programar. Tomem cuidado com a faltadeespaço ou com espaços duplos pois tem que seguir a risca a estruturação desse elemento para seu script funcionar!
[6] Comentário enviado por rafaelfatepi em 11/06/2009 - 21:08h
#!/bin/bash
echo "Deseja executar o arquivo agora?s/n"
read opcao
if [ $opcao = s ] || [ $opcao = S ]; then
./$arquivo_saida #erro trata-se de um script e não uma váriavel. Seu erro foi colocar $ antes do nome arquivo_saida
./arquivo_saida #correto seria assim.
else
exit 0
fi
Obs.: Fiz algumas alterações e testei,deu tudo certo!!!