De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rubens Queiroz de Almeida
Data de Publicação: 22 de Abril de 1997
Uma facilidade bastante poderosa oferecida pelas shells de sistemas Unix em geral é o controle de laço. Por meio delas pode-se executar rapidamente tarefas complexas.
A sintaxe é bastante simples e consiste basicamente no seguinte
% for variavel in a b c d ... > do > comandos > ... > done
Esta construção é válida para a Bourne Shell e similares (ksh, p.ex.). Na primeira linha define-se a variável e os valores que esta variável irá assumir durante a execução. A diretiva "do" indica o início dos comandos a serem executados até que se esgotem os valores atribuídos à variável. E a diretiva "done" sinaliza o fim da execução. O mais interessante é que a variável pode assumir os valores gerados por um comando do unix. Para isto basta delimitar o comando unix entre aspas invertidas (`).
Todos os exemplos aqui citados são invocados a partir da linha de comandos. Ao se teclar <ENTER> após a digitação da linha contendo a diretiva "for" o prompt se modifica para o caracter ">". Ao final do laço, indicado pela diretiva "done", os comandos são então executados. Nada impede entretanto que estes comandos sejam gravados em um arquivo e executados como uma shell script tradicional. O objetivo é justamente ensinar estruturas simples para serem utilizadas diretamente da linha de comandos.
Os exemplos abaixo irão ajudar a esclarecer a utilização desta estrutura.
Exemplo 1:
Em um diretório existem vários arquivos que possuem letras maiúsculas em seu nome. Renomea-los de forma a que em seu nome existam apenas letras minúsculas:
% for file in `ls` > do > mv $file ""echo $file | dd conv=lcase"" > echo $file > done
Neste exemplo a variável "file" irá assumir os valores retornados pelo comando ls. O comando mv irá renomear os arquivos do diretório corrente para o valor retornado pela saída do comando echo processada pelo comando dd. A opção conv=lcase do comando dd faz uma tradução dos caracteres maiúsculos para minúsculos. O comando "echo $file" serve apenas para indicar o progresso da execução do comando.
Exemplo 2:
Gerar as versões formatadas de vários arquivos que estão no formato nroff. Cada documento formatado deverá possuir a terminação .doc.
% for file in `ls` > do > nroff -man $file | col -b > ""echo $file | awk -F. '{print $1}'"".doc > echo $file > done
Neste exemplo, foi invocado o comando nroff para processar o arquivo. A saída deste comando é então redirecionada para o comando "col" que irá retirar os sublinhados e caracteres que não entendidos corretamente por algumas impressoras. O resultado destes dois comandos é gravado em um arquivo cujo nome é formado com o auxílio do comando awk, que irá obter do nome original o primeiro qualificador e acrescentar o sufixo .doc. Por exemplo, o nome ls.1 seria substituído pelo nome ls.doc e assim sucessivamente.
Exemplo 3:
Enviar a mensagem gravada no arquivo de nome "mensagem" para os endereços eletrônicos gravados no arquivo de nome "usuarios".
% for user in `cat usuarios` > do > mail -s "Convocacao para reuniao semestral" $user < mensagem > echo $user > done
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários