Introdução ao Shell Script (parte 2)

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.

[ Hits: 42.786 ]

Por: Tadeu Rocha em 02/12/2003


Segundo exemplo



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.

Página anterior    

Páginas do artigo
   1. FAQ
   2. Segundo exemplo
Outros artigos deste autor

Introdução ao Shell Script

Leitura recomendada

Backup automático em Shell Script

Introduzindo prazerosamente aos poucos... o shell script

Montando, monitorando e gerando logs dos compartilhamento NFS automaticamente

Recursos avançados do bash que você não aprende na escola

Como matar um processo - kill, killall, pkill e xkill

  
Comentários
[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!

[2] Comentário enviado por Xxoin em 26/04/2004 - 01:42h

Nossa mano! A continuação do seu artigo, continua parecendo um "clone" do artigo que se encontra no link abaixo:
http://sh.underlinux.com.br/doc/programacaosh.htm

[3] Comentário enviado por removido em 18/11/2004 - 02:47h

É, Xxoin, vc tem razão: o script é o mesmo, o texto parecido... Forte inspiração.

[4] Comentário enviado por lazaro91 em 28/10/2007 - 14:23h

Cara dá uma ollhada nesse script tá dando erro de sintaxe no then
syntax error near unexpected token 'then'

_______________________________________________

echo "Deseja executar o arquivo agora?s/n"
read opcao

if["$opcao" = s -o $opcao = S]; then
./$arquivo_saida
else
exit 0
fi
______________________________________________

Alguém pode me dizer o que está errado?

Obrigado

[5] Comentário enviado por lazaro91 em 28/10/2007 - 14:30h

Descobri.

Foi justamente o que o arknoid falou eu não estava dando atenção aos espaços.

Valew

[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!!!

Espero ter contribuído...Abraço!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts