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: 43.077 ]

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

Colorindo o Shell

Linguagem Lua - Introdução ao Aprendizado da Linguagem

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

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

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