http://www.zago.eti.br/script/scripts.txt Dicas pra criar scripts, modelos e FAQ com mensagens da Linux-br. Use CTRL+F para refinar a pesquisa. Linha de: **************** sapara mensagens ou tópicos. ******************************************************** Zago http://www.zago.eti.br/menu.html http://www.zago.eti.br/script/A-menu-scripts.html FAQ e artigos sobre Linux ******************************************************** http://www.conectiva.com.br/suporte/pr/sistema.geral.criar.script.html http://www.tldp.org/LDP/abs/abs-guide.pdf Curso de shell script. http://aurelio.net/shell/canivete.html Canivete Suíço do Programador Shell (bash) http://aurelio.net/shell/canivete.html Aurélio Marinho Jargas http://aurelio.net/shell/canivete.html#sinais sinais, exemplos de operadores, linhas de comando e script. Guia de Expressões Regulares do Aurélio Marinho Jargas http://guia-er.sourceforge.net/guia-er.html http://www.sun.com/bigadmin/scripts/index.html Nesta página da SUN, tem uma lista enorme de scripts, tem script pra quase tudo, está em ingles mas vale a pena conferir. http://olinux.uol.com.br/artigos/258/1.html Curso de Shell - Por: Alex Borro Em portugues, muito bom pra iniciantes. http://br.groups.yahoo.com/group/shell-script/ Lista Brasileira sobre Linux Shell Script. ******************************************************** 1.3. Como crio um arquivo em lote no Linux ? A sintaxe para fazer um arquivo de lote no Linux é a seguinte: Primeiramente crie um arquivo texto com o conteúdo: [usuario@localhost]# mcedit teste.sh #!/bin/bash na primeira linha do script, pois esta caracteriza o SHELL a ser utilizado. Logo após coloque os comandos utilizáveis no prompt do Linux (SHELL), incluindo os parâmetros como if, while e outros. Após isto, salve e mude as permissões do arquivo afim de executá-lo: [usuario@localhost]# chmod +rwx teste.sh Após, execute-o usando ./ antes do nome do arquivo [usuario@localhost]# ./teste.sh fonte: http://www.conectiva.com.br/suporte/pr/sistema.geral.criar.script.html ************************************************************ Script é uma ferramenta muito útil, poderosa e necessária em sistemas Linux, pode simplificar muito trabalho, considere uma maravilha que você tem que aprender usar. a segiur um resumo de comandos que uso normalmente e na sequencia mensagens sobre o assunto que passou pela Linux-br, Dicas-l, Ginux e links relacionados no final deste texto. OBS. mensagens de erro com \r Evite escrever scripts no DOS/WIN, não entendo como tem pessoas que insistem em usar um sistema operacional pra mexer no outro, cada um na sua. Os formatos de arquivos, mesmo os que estão em formato texto, msmo que voce não veja a diferença, eles são diferentes. O final de linha no Linux é um LF e no DOS/WIN é um CR+LF, pelo simples fato de manipular um escript do Linux no DOS/WIN, o final da linha vai ser modificado e não vai rodar no Linux, quando ocorrer erros ao executar scripts copiados de outros locais, procure ver se na mensagem de erro aparece o "\r", esta barra r que aparece na mensagem de erro e não faz parte do script é um indicio de que tem o CR no final da linha e que foi inserido pelo editor DOS/WIN, para solucionar o problema precisa converter o arquivo pro formato Unix ou refaze-lo, pode copiar e colar o texto em novo arquivo ou veja dicas pra converter arquivos no FAQ: http://www.zago.eti.br/convert.txt. abra um editor de texto, ex.: vi e crie um arquivo texto com o conteúdo, salve e depois torne-o executavel, por exemplo um arquivo teste: # chmod +rwx teste depois é só digitar ./teste para executar ou editar novamente para ver seu conteudo ou altera-lo. Para executar o escript na inicialização do Linux, pode colocar os comandos no final de /etc/rc.d/rc.local assim toda vez que ligar o micro estes comandos serão executados e valerá para todos os usuarios. ou Para executar o escript somente para um usuario especifico coloque os comandos no seu ./bash ou coloque este escrip em um diretorio que o usuario possa ler e execute quando necessario com ./nomedoescript. exemplo de um script #!/bin/bash #Esse script pode ser distribuido livremente #linhas para comentários sobre o script data="Hoje é `date`" echo $data ou $ echo "Hoje é `date +%D `" Hoje é 08/01/02 ou $ echo "Hoje é `date +%d/%m/%Y ` " Hoje é 01/08/2002 tar -cxf /home/zago script copia o conteúdo da tela em arquivo_script até que você digite o comando exit. Útil para depuração. CUIDADOS COM SCRIPT 1 - O script sempre inicia com: #!/bin/sh 2 - certifique se os diretorios onde estão os scripts estão no path do usuário que vai executar 3 - veja se o usuário tem permissão de executar o script 4 - Quando colocar o script no cron inclua o caminho completo ate o script 20 12 * * * /usr/local/bin/nomedoscript faço o mesmo com programas chamados pelo script, por exemplo usando o comando tar dentro de um script, indique antes do nome o caminho completo: /bin/tar comandos e parametros, use whereis para localiar path do arquivo. 5 - Reveja periodicamente seus scripts, tenho visto acidentes sérios por falta de atualização de scripts de backup, novos arquivos, diretórios e usuários são adicionados ao sistema e podem ficar fora de um script de backup desatualizado. 6 - todas as linhas de um script podem ser executadas diretamente no prompt isto é útil para testar e depurar um script. 7 - Script é uma ferramenta poderosa quando bem usada, em caso de dúvida teste em uma instalação a parte, uma linha errada no script pode destruir seu sistema. ************************************************************ ************************************************************ ************************************************************ links sobre tutorias e scripts: totorial excelente para iniciantes em: http://paginas.terra.com.br/informatica/zealous/shell-script/index.html para ajudar a iniciantes aprender shell scripts. www.shell-script.cjb.net http://aurelio.net/ funções zz e muitos scripts http://www.olix.hpg.ig.com.br/curso_de_shel.zip http://www.sandyxsystems.co.uk/scripts/ http://sh.underlinux.com.br/ http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html#toc14 http://linuxdoc.org/LDP/abs/html/ -> excelente - em inglês. http://www.tldp.org/LDP/abs/html/ - Avançado http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html - Básico http://www.revistadolinux.com.br/ed/006/shellscript.php3 http://www.revistadolinux.com.br/ed/008/shell_script.php3 Lista brasileira sobre Linux Shell Script em: http://groups.yahoo.com/group/shell-script/ http://user.it.uu.se/~matkin/documents/shell/ http://vertigo.hsrl.rutgers.edu/ug/shell_help.html http://www.freeos.com/guides/lsst/ http://www.freeos.com/guides/lsst/maspc.htm http://www.tldp.org/LDP/abs/html/index.html -> em inglês. ************************************************************ redirecionar saida para variavel É só vc colocar entre CRASE. Ex.: VAR=`cat /proc/partitions |tr " " "\n"|grep ide` ************************************************************ ************************************************************ De: Claudio Matsuoka Para: Jozeph Brasil Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Bash script... Data: 13 Jul 2002 08:49:42 -0300 On Fri, 12 Jul 2002, Jozeph Brasil wrote: > Com sort -n -t : -k 3 /etc/passwd > passwd.new eu consigo organizar o > meu passwd de acordo com o ID... mas, como faço para organizar o > /etc/shadow de acordo com o /etc/passwd ? Isto é... corresponder > primeira linha root no passwd com primeira linha root no shadow... Provavelmente o seguinte script fara' o que voce quer. Versao condensada: #!/usr/bin/perl open P, "/etc/passwd"; while (

) { push @_, /^([^:]*)/; } open S, "/etc/shadow"; while () { ($n) = /^([^:]*)/; $s{$n} = $_; } print @s{@_}; Versao longa e comentada: #!/usr/bin/perl open P, "/etc/passwd"; while (

) { # le /etc/passwd push @_, /^([^:]*)/; # coloca cada login name na lista } close P; open S, "/etc/shadow"; while () { # le /etc/shadow ($n) = /^([^:]*)/; # extrai o login name $s{$n} = $_; # usa o login name para hash de linhas } close S; print @s{@_}; # ordena de acordo com o /etc/passwd ************************************************************ De: Andre Felipe Machado Para: linux-br@bazar.conectiva.com.br Assunto: (linux-br) KFilereplace => substitui strings recursivamente em subdiretorios Data: 13 Jul 2002 15:10:54 +0000 Olá, Criei rpm e src rpm para o CL8 do programa Kfilereplace. Ele pode substituir strings em arquivos, recursivamente, em subdiretórios. Muito prático para trocar um email, por exemplo, em todas páginas de um site. Está na minha página pessoal: http://orbita.starmedia.com/~andrefelipemachado/linux/index.html Boa sorte. André Felipe http://www.techforce.com.br http://www.revistadosmotoclubes.cjb.net ************************************************************ para atualizar bios antiga para o ano 2000 Dúvida 1 -- O meu computador ele aceita o ano 2000 normalmente até que eu o desligue! Desligando ele sempre volta pro ano de 1994, mas ele conserva a hora. (minha placa é antigona). Para o rWindows a AWARD disponibilizou uma fixtool, mas para o Linux... Então eu fiz esse script estúpido abaixo: --#!/bin/bash --horAtual=`date +%H:%M:%S` --datAtual=`date +%m/%d` --date -s $datAtual/2000 --date -s $horAtual Digitei chmod a+x atualizar Agora eu queria saber como fazer com que esse script execute toda vez que o Linux é inicializado? Quando informamos qualquer variavel após o nome do programa o ambiente vê assim: prompt $ programa var1 var2 var3 ... | | | | |->> $... | | | | --->> $3 | | | ------->> $2 | |----------->> $1 |----------------->> $0 vc pode colocar no seu script tb algumas condições do tipo if [ "$1" = "" ] && [ "$2" = "" ] && [ "$3" = "" ]; then echo "Você não informou nenhuma variável..." echo "Digite: programa [var's1] [var's2] [var's3] exit 1 else comandos fi []'s Marco Em ter, 25 abr 2000, Reinado Brito escreveu: > -- > > Tenho q montar um script, q quando eu execute ele aceite parametros... > > Ex.: > > $ programa -limpa > > > "programa" eh o script > "-limpa" eh o parametro > > e este parametro eh variavel, eu tenho que usar varios !!!! > ************************************************************ Script... Agora vou ensinar um truque muiiiiiito safado: :) startx {nome do gerenciador} Exemplo... startx fvwm2 Isto aí vai executar o fvwm2. Claro que isto só funcionará se você não tiver o .xinitrc no seu diretório $HOME (a Conetitica traduz isto como $LAR ou $CASA?). Para quem não enteu bem, a sintaxe do startx é: startx {parâmetros do gerenciador} -- {parâmetros do servidor} Assim você pode fazer coisas como: startx olwm -- -bpp 8 # OpenLook com 256 cores startx wmaker -- -bpp 16 # WindowMaker com 16M Cores E por aí vai... Agora para fazer um menuzinho legal, você poderia usar o DIALOG... O que é DIALOG? Dê um "man dialog" e veja... :) ************************************************************ > Alguem tem algum exemplo de script ou dica para fazer um para que um > determinado servidor Linux, faca a conexao com a ISP, receba as msgs e > desligue. (...) Eu ate'tenho um rascunho muito feio por aqui, acredito que quebre o galho. Ele não leva muitas coisas em consideração (linua ocupada) mas faz o serviço. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #!/bin/sh # esta linha é apenas para deixar o sudo com sua senha na "cabeça", se # você vai executar isto como root pode retirá-la, assim como os outros # "sudo"s. sudo echo # Eu uso o ppp-setup, ele é simples e fácil de configurar. sudo ppp-go sleep 5s # Enquanto o chat está sendo executado eu coloco "." na tela. :) echo -n "Esperando a conexão PPP ser estabelecida " while (sudo ps -a | grep -ie chat > /dev/null) do echo -n "." done # Pula linha.. echo "\n" # Verifica o estado da conexão sleep 5s if [ ppp ] && ( sudo ifconfig | grep ppp > /dev/null); then ( echo "Msg: Conectado!" # Outro bom utilitário é o fetchmail. Com ele é possível baixar as # mensagens até de servidores que não sejam POP3. Você pode incluir # uma linha para cada conta de e-mail, inclusive pegar toda a corres- # pondência dos usuários de uma vez só (mas aí você vai precisar ro- # dar isto aqui como root). fetchmail -n --uidl -l 131072 --flush -f .fetchconf # Uma pausa para o sendmail terminar de verificar os endereços sleep 5s # Desconectando! # sudo ppp-off ) else echo "Msg: Erro! Não consegui me conectar." fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Se você não tiver o pppsetup pegue-o em: http://www.tux.org/pub/people/kent-robotti/index.html E se não tiver o fetchmail vá em: http://www.tuxedo.org/~esr/fetchmail Na configuração do Fetchmail que uso UIDL, limito as mensagens em 128Kb e apago (--flush) as que passam disso. E no "-f" é um alternativo ao .fetchmailrc, a cara dele e' algo assim: poll {servidor-de-correio} protocol {protocolo, ex. pop3)} username {seu nome} password {sua senha} --- ************************************************************ > Eu estou com uma duvida...aqui.. Como dar permissao para um > usuario..comum.. vou dar um Exemplo tipo..liberar.um diretorio...ou > coisa parecida.. Veja os utilitários chown, chmod e chgrp. Há documentação suficiente sobre o assunto e a mensagem do Claudio foi bastante educativa, ele só não disse que o chmod faz os atributos em base octal. > Tmb..queria dar permissao para usar um dispositivo..um modem..tal Geralmente um "chmod 666" no dispositivo já é suficiente. > AH..sera que alguem .tem ai um programinha para escolher o wm a usar > eu tenho aquele StartSelector..mas so funciona como root.. Eu tenho um treco em Tcl/Tk que fiz só de brincadeira... wmchoice.tcl - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #!/bin/sh # the next line restarts using wish \ # copiado descaradamente do "hello world" exec wish8.0 "$0" "$@" button .fvwm -text "Fvwm2" -command { puts stdout "fvwm2" ; destroy . } pack .fvwm button .wmaker -text "Window Maker" -command { puts stdout "wmaker" ; destroy . } pack .wmaker - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Coloque-o onde você quiser (/usr/local/bin por exemplo), como root dê um "chmod 755 wmchoice.tcl" e depois altere o seu .xinitrc para ficar assim: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (...) # start some nice program wmselect.tcl > $HOME/.wmchoice choice=`cat $HOME/.wmchoice` if [ ${choice} = "fvwm2" ]; then fvwm2 fi if [ ${choice} = "wmaker" ]; then wmaker fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Como eu disse isto aí eu fiz só de brincadeira se alguém quiser fazer alterações fique à vontade (mas me mande uma cópia!). --- ************************************************************ ************************************************************ mail_check Outro dos problemas que administradores de sistemas encontram com bastante frequencia e o gerenciamento do espaco em disco. O filesystem /var, por exemplo, e vital para o funcionamento normal do sistema. Se este filesystem atingir uma taxa de uso de 100% varios servicos sao interrompidos, como por exemplo a coleta de dados para contabilizacao de uso de recursos do sistema e o mais importante de todos, o correio eletronico. Quando o /var atinge 100% nenhuma mensagem pode ser enviada ou recebida visto que mensagens que chegam sao gravadas em /var/spool/mail e mensagens que saem vao para a fila em /var/spool/mqueue (a localizacao exata varia de sistema para sistema, mas normalmente sao estas). Varias medidas podem ser tomadas para evitar tamanho transtorno. O script que se segue pode ajudar nesta tarefa transferindo arquivos do diretorio /var/spool/mqueue para o diretorio home do usuario. O usuario recebe tambem uma notificacao informando-o da transferencia dos arquivos e os procedimentos que devem ser seguidos para recuperar suas mensagens. ----------------------------------------------------------------- #!/bin/csh # Definicao de Variaveis set DATA = `date +%d%m%y` set DIR = /usr/sys set dir_home = '$''home' # O laco abaixo ira primeiramente gerar uma listagem dos arquivos # contidos em /var/spool/mail e selecionar aqueles que sejam maiores # que 400K, ou seja, os usuarios afetados serao apenas aqueles que # nao leem suas mensagens com frequencia. Os arquivos que forem maiores # que este valor serao movidos para o diretorio home do usuario e receberao # o nome mbox.ddmmyy, onde os valores do dia, mes e ano serao determinados # a partir do comando "date +%d%m%y". O arquivo em /var/spool/mail e entao # deletado e sua copia, agora no diretorio do usuario, e compactada. # O ultimo passo e a mudanca de ownership do arquivo para o usuario (visto # que o arquivo foi criado originalmente pelo usuario root. # # Todos os comandos contidos neste laco serao executados para todos os # usuarios cujas mailboxes excedam a 400Kbytes. foreach USER (`/bin/ls -l /var/mail | awk '$5 > 400000 {print $9}'`) mv /var/mail/$USER ~$USER/mbox.$DATA rm ~$USER/mbox.$DATA.gz >&! /dev/null /usr/local/bin/gzip ~$USER/mbox.$DATA chown $USER ~$USER/mbox.$DATA.gz # A seguir e composta a mensagem que sera enviada para o usuario. # O comando cat abaixo ira criar um arquivo em $DIR/mensagem.mail # que contera todos os caracteres digitados ate que seja encontrado # os caracteres EOF, que em nosso caso atuam como delimitadores. # Vale a pena prestar atencao nessa facilidade, visto que e bastante # util. cat >! $DIR/mensagem.mail << EOF Prezado(a) Usuario(a), Visto que sua mailbox (/var/spool/mail/$USER) esta excedendo o tamanho maximo permitido de 400K, ela foi transferida para o seu diretorio home com o nome mbox.$DATA.gz. Isto se fez necessario visto que o filesystem /var estava com uma taxa de ocupacao proxima a 100%, impedindo que nossos usuarios enviassem ou recebessem mensagens. Favor seguir os seguintes passos para conseguir ler os seus mails novamente : 1) cd (para ir para o seu diretorio principal) 2) /usr/local/bin/gzip -d mbox.$DATA.gz (para descompactar as mensagens) 3) cat mbox.$DATA >> /var/mail/$USER Gostariamos de lembra-lo que seus mails devem ser lidos e movidos para o seu espaco de armazenamento pessoal e nunca deixados na caixa de correio localizada no diretorio /var. A maioria dos programas utilizados para leitura de mail (elm, pine, netscape, etc.) oferece facilidades para se criar folders, onde suas mensagens podem ser guardadas separadas por assuntos em outro local que nao o diretorio /var/spool/mail/$USER. Em caso de duvidas envie mensagem para o endereco suporte@netway.com.br. EOF mail -s "Modificacoes em sua mailbox..." $USER < $DIR/mensagem.mail end -------------------------------------------------------- ************************************************************ DNS - Root Name Servers Para o correto funcionamento de um servidor DNS, e necessario que se atualize periodicamente o arquivo chamado named.root. Este arquivo esta disponivel,via ftp anonimo, em rs.internic.net:/domain/named.root. Este arquivo contem a lista dos servidores de mais alto nivel na Internet, o dominio ".". Caso esta lista esteja desatualizada os efeitos podem ser desastrosos e potencialmente dificeis de se identificar. Todo servidor DNS ao ser ativado precisa desta lista para entao chegar aos servidores dos dominios mais baixos, como .com, .edu, etc e os dominios geograficos (.br, .jp, .au, etc.) Esta tarefa pode ser facilmente automatizada a partir de um shell script, como o que se segue ---------------------< get_named.root>------------------------------------ #!/bin/ksh # A seguir, e realizada uma sessao de ftp em modo batch. Os argumentos # fornecidos ao programa ftp sao fornecidos na linha de comando ate se # chegar ao delimitador, no nosso caso, a string EOF. ftp -ni rs.internic.net << EOF user anonymous queiroz@ccuec.unicamp.br cd /domain get named.root EOF # Uma vez recuperado o arquivo cabe compara-lo com a versao em # uso. Se diferentes, efetuar a substituicao e dar um refresh # no servidor DNS # A localizacao do arquivo em uso pelo seu servidor e variavel # e e determinada pelo valor da diretiva # directory /usr/local/named # e pela diretiva # cache . named.root # contidas no arquivo /etc/named.boot. Em nosso exemplo estamos # assumindo que os arquivos de configuracao encontrem-se em # /usr/local/named # No laco abaixo, caso o comando diff retorne um valor diferente # de zero, entao serao executados os comandos contidos na diretiva else. # E enviado tambem um mail para os administradores notificando-os que # houve uma alteracao no arquivo named.root if diff named.root /usr/local/named/named.root 1> /dev/null 2> /dev/null then # Tudo normal, sai da shell exit else # os arquivos sao diferentes, executar a substituicao, dar um refresh no # named e enviar um mail a equipe de suporte cp named.root /usr/local/named/named.root kill -HUP `cat /etc/named.pid` mail -s "Named substituido" suporte@acme.com.br < /dev/null fi ************************************************************ Checagem de ocupacao de espaco do filesystem /home A dica de hoje nos foi enviada por Rodrigo Carvalho (rodrigoc@liveware.com.br). A dica consiste de um shell script que monitora a taxa de ocupacao do diretorio /home e gera um alerta quando esta taxa se aproxima de 100%. #!/bin/ksh # ########################################### # # Script desenvolvida por Rodrigo O. Carvalho # para o alerta de usuarios quanto a utilizacao # excessiva do filesystem /home da servidora de # arquivos da rede # # homespace v 1.0 - 02/04/97 # ########################################### # ########################################### # # Definicao de variaveis # ########################################### # ########################################### # # Variavel em forma numerica do valor do filesystem # /home exibido em porentagem # ########################################### PORCENT=`df -k /home | tail -1 | awk -F" " '{printf "%s", substr($5,1,length($5)-1)}'` ########################################### # # Variavel que especifica o valor em que o # administrador deve ser alertado, no caso, # a procentagem do filesystem /home # o default e 95% (95) ########################################### MINIMO=95 ########################################### # # Variavel que define o nome do usuario # que devera receber a mensagem de alerta # qto. ao uso do filesystem /home # ########################################### USER1="rodrigoc" USER2="carlosef" # No caso a Script estara sendo enviada para todos que eh uma alias para # os usuarios da rede local ########################################### ########################################### # # Inicio # ########################################### if [ "$PORCENT" -ge "$MINIMO" ] then cat > ./message.filesystem.full << EOF HOST: `hostname` OCORRENCIA: filesystem /home superou $MINIMO de uso Caros usuarios da rede da LIVEWARE filial Campinas, Por favor facam uma verificacao em seus arquivos da rede, pois o espaco em disco de nossa maquina esta se esgotando. Caso haja a necessidade de que seus arquivos seja armazenados, solicite ao Grupo de Suporte a rea- lizacao de um backup em fita. Em caso de duvidas envie uma mensagem para suporte@liveware.com.br. Obrigado pela colaboracao. Atenciosamente, Grupo de Suporte Interno suporte@liveware.com.br PS.: Nao respondam a essa mensagem (reply) pois ela eh feita via sistema. EOF mail -s "FileSystem /home Full" todos < ./message.filesystem.full else exit fi ************************************************************ Controle de laco em shells Uma facilidade bastante poderosa oferecida pelas shells de sistemas Unix em geral e o controle de laco. Por meio delas pode-se executar rapidamente tarefas complexas. A sintaxe e bastante simples e consiste basicamente no seguinte % for variavel in a b c d ... > do > comandos > ... > done Esta construcao e valida para a Bourne Shell e similares (ksh, p.ex.). Na primeira linha define-se a variavel e os valores que esta variavel ira assumir durante a execucao. A diretiva "do" indica o inicio dos comandos a serem executados ate que se esgotem os valores atribuidos a variavel. E a diretiva "done" sinaliza o fim da execucao. O mais interessante e que a variavel 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 sao invocados a partir da linha de comandos. Ao se teclar apos a digitacao da linha contendo a diretiva "for" o prompt se modifica para o caracter ">". Ao final do laco, indicado pela diretiva "done", os comandos sao entao executados. Nada impede entretanto que estes comandos sejam gravados em um arquivo e executados como uma shell script tradicional. O objetivo e justamente ensinar estruturas simples para serem utilizadas diretamente da linha de comandos. Os exemplos abaixo irao ajudar a esclarecer a utilizacao desta estrutura. Exemplo 1: Em um diretorio existem varios arquivos que possuem letras maiusculas em seu nome. Renomea-los de forma a que em seu nome existam apenas letras minusculas: % for file in `ls` > do > mv $file `echo $file | dd conv=lcase` > echo $file > done Neste exemplo a variavel "file" ira assumir os valores retornados pelo comando ls. O comando mv ira renomear os arquivos do diretorio corrente para o valor retornado pela saida do comando echo processada pelo comando dd. A opcao conv=lcase do comando dd faz uma traducao dos caracteres maiusculos para minusculos. O comando "echo $file" serve apenas para indicar o progresso da execucao do comando. Exemplo 2: Gerar as versoes formatadas de varios arquivos que estao no formato nroff. Cada documento formatado devera possuir a terminacao .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 saida deste comando e entao redirecionada para o comando "col" que ira retirar os sublinhados e caracteres que nao entendidos corretamente por algumas impressoras. O resultado destes dois comandos e gravado em um arquivo cujo nome e formado com o auxilio do comando awk, que ira obter do nome original o primeiro qualificador e acrescentar o sufixo .doc. Por exemplo, o nome ls.1 seria substituido pelo nome ls.doc e assim sucessivamente. Exemplo 3: Enviar a mensagem gravada no arquivo de nome "mensagem" para os enderecos eletronicos gravados no arquivo de nome "usuarios". % for user in `cat usuarios` > do > mail -s "Convocacao para reuniao semestral" $user < mensagem > echo $user > done ************************************************************ Redirecionamento da saida padrao em cshell A cshell nao oferece uma maneira simples de se redirecionar a saida padrao (standard output) para um arquivo e as mensagens de erro para um outro (standard error). Para fazer isto proceder como abaixo: % (ls -l ab bc > /tmp/saida_padrao) >& /tmp/saida_de_erro No nosso exemplo o arquivo ab nao existe e ira gerar uma mensagem de erro que sera gravada no arquivo /tmp/saida_de_erro e as caracteristicas do arquivo bc serao gravadas no arquivo /tmp/saida_padrao. % more /tmp/saida_padrao -rw-r--r-- 1 root supsof 0 Oct 24 18:22 bc % more /tmp/saida_de_erro ls: 0653-341 The file ab does not exist. Estranho, nao? Mas e assim mesmo que funciona :) ************************************************************ Script para remover acentos de documentos --------------------------------------------------------------------- Todas as dicas enviadas atraves desta lista sao geradas originalmente com todos os acentos. Para facilitar a vida de quem le mail com programas que nao oferecem suporte a caracteres acentuados, eu crio uma outra versao do documento, sem conter os acentos. A dica de hoje, visto abordar acentuacao obviamente nao pode ser veiculada sem os acentos. Para realizar esta conversao, foi criado um shell script que, utilizando o comando sed para efetuar a troca dos caracteres. Este script pode ser utilizado para varias outras finalidades. Nos faziamos antigamente, quando nao possuimos conexao rapida com a Internet, um mirror de alguns servidores Web que julgavamos uteis. Apos a transferencia das paginas via FTP (ainda nao existiam ferramentas como wget e outros; talvez ate ja existissem, mas nao as conheciamos) era rodado um shell script que convertia tudo que fosse http://www.site.edu para http://www.unicamp.br. Outra utilizacao, criar arquivos para processamento pelo programa Ventura Publisher, que convertia algumas marcacoes de paragrafos em tags para o Ventura. Pode-se ate criar um editor HTML, que realiza a expansao de alguns tags em diretivas html. O script possui dois componentes, um arquivo com os comandos propriamente ditos e um outro com diretivas para o comando sed. Vamos ao primeiro deles, o script tiraacento: #! /bin/sh # # Autor: Queiroz # Data : 11/08/94 # # Este shell script remove a acentuacao de um arquivo # # A seguir, a localizacao do arquivo onde se encontram as diretivas # para o comando sed MACROS=/home/queiroz/bin # testa se foram fornecidos os arquivos de entrada e saida para # o comando. Caso haja erro neste passo emitir a mensagem e encerrar # o processamento if [ $# -lt 2 ]; then echo 1>&2 Sintaxe: $0 arquivo_entrada arquivo_saida exit 1 fi # Atribui a variavel infile o primeiro argumento e a variavel outfile # o segundo argumento infile=$1 outfile=$2 # Executa o comando sed para efetuar as substituicoes sed -f $MACROS/tiraacento.sed $infile > $outfile -------- Fim script tiraacento O arquivo tiraacento.sed contem as diretivas para o comando sed. Desta forma o caracter a sera substituido por ~a e assim por diante. Caso se opte por remover totalmente a acentuacao basta substituir s/a/~a/g por s/a/a/g. Algumas pessoas preferem desta forma. tiraacento.sed s/a/~a/g s/A/~A/g s/a/`a/g s/A/`A/g s/o/\^o/g s/o/o/g s/O/~O/g s/e/e'/g s/E/E'/g s/a/a'/g s/o/o'/g s/A/A'/g s/O/O'/g s/c/,c/g s/C/,C/g s/e/\^e/g s/E/\^E/g s/u/u'/g s/U/U'/g s/a/a\^/g s/A/\^A/g s/i/i'/g s/I/I'/g s/U/U/g s/u/u/g ---------- Fim arquivo tiraacento.sed ************************************************************ Tabela de conversao de shells --------------------------------------------------------------------- A dica de hoje e um documento muito util, chamado tabela de conversao/equivalencia de shells. Serve para quem quer converter scripts de uma shell para outra e tambem como material de referencia para quem precisa escrever shell scripts em qualquer uma das shells mais famosas. --------------------------------------------------------------------- THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE """""""""""""""""""""""""""""""""""""""""""""""""" This is the ultimate shell conversion table. It's made for those who do shell programing and from time to time have to read shell- scripts for a shell they don't know. It is also for those who want to learn another shell. All errors, modifications, exstensions and contributions should be mailed to the author. When mailing to the author remeber to include the current version number. A tip if you are looking at this file inside vi: :set wrapmargin=0 No part of this file, or the file itself can be sold. You may only give it away for free. This file can be found on anon. ftp: alf.uib.no (129.177.30.3) in the directory /pub/lpf/misc/shell-100.BetaA.Z THIS IS A BETA-A RELEASE. IT WILL CONTAIN SEVERAL ERRORS IN THE KSH/BASH AND Z-SHELL COLLUMNS. I SUSPECT THE WHOLE INPUT/OUTPUT -REDIRECTION SECTION TO BE WRONG. FLAG SECTON Z-SHELL IS PROBABLY WRONG. IF YOU FIND ERRORS, PLEASE REPORT THEM TO ME SO THAT I CAN INCLUDE THE CORRECTIONS IN THE TABLE. ALL CONTRIBUTIONS WILL BE NOTEFIED. THE ERRORS ARE DUE TO THAT I MAINLY USE CSH AND RC. OTHER ITEMS NOT INCLUDED IS VARIABLE SUBSTITUTION. Version: 1.01 BETA-A Copyright: Ove Ruben R Olsen (Ruben@uib.no) Contributors: INTRODUCTION """""""""""" The folowing shells are covered in this table: SH - The standard UNIX Bourne shell. CSH - The C shell with a syntax reminiscent of C. TCSH - CSH with command line editing. KSH - The Korn shell. A superset of SH BASH - The GNU Bourne-Again shell. ZSH - The Z Shell. Author is Paul Falstad. RC - rc shell. A shell based on AT&T plan 9 shell. When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'. When looking for BASH, use KSH. Pure BASH's are marked with an '*'. FLAGS """"" SH CSH/TCSH KSH/BASH ZSH RC --------------------------------------------------------------------------------------------------------------------------------------------------- a a a b c t c d* e e e e e f f f* f f g h h h i i i i i j k k k l* l l m m* m n n n n o p r s s s s t t u u u v v v v v V x x x x X y 1 - 9 A - Z - -- - BASH's: norc noprofile rcfile version quiet login nobraceexp. nolineedi. C H THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE """""""""""""""""""""""""""""""""""""""""""""""""" Copyright: Ove Ruben R Olsen (Ruben@uib.no) Version: 1.01 BETA-A When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'. When looking for BASH, use KSH. Pure BASH's are marked with an '*'. INTERNALS """"""""" SH CSH/TCSH KSH/BASH ZSH RC -------------------------------------------------------------------------------------------------------------------------------------------------- : : : . . # # # # & & & & FOO=BAR set FOO = BAR FOO=BAR FOO=BAR @ FOO =EXPR NAME () alias NAME () NAME () fn alias alias alias fn autoload bg bg bg bindkey break break break break break builtin* builtin bye* bye case WORD switch ( WORD ) case WORD case WORD switch (LIST) { in PATT ) case PATT: in PATT ) in PATT ) case PATT CMD LIST ;; LIST LIST ;; LIST ;; } esac breaksw esac esac default: LIST breaksw endsw chdir chdir chpwd cd cd cd cd cd commands* continue continue continue continue declare* declare dirs dirs* dirs disable disown echo echo echo echo echo echotc enable* enable echo echo print print eval eval eval eval eval exec exec exec exit exit exit exit exit export export export false false fc fc fg fg fg for NAME in WORD; SUBLIST for NAME foreach NAME for NAME for NAME for (NAME in LIST) CMD in WORD ( LIST ) in WORD in WORD do LIST LIST do LIST do LIST done end done done function function functions functions getln getopts getopts* getopts glob goto hash rehash hash rehash hash hashstat help* history history history if ( EXPR ) WORD if LIST if ( EXPR ) if LIST if LIST if (EXPR) { then LIST then then LIST then LIST LIST elif LIST LIST elif LIST elif LIST } else LIST then LIST else then LIST then LIST else LIST LIST else LIST else LIST fi endif fi fi integer integer jobs jobs jobs job kill kill kill let let limit ulimit limit local* local log login logout logout* logout ls-F* newgrp newgrp nice nohup nohup notify periodic* popd popd* popd pushd pushd* pushd precmd* precmd pwd pwd r read read read readonly readonly readonly repeat repeat repeat WORD do LIST done return return return return select NAME in WORD ; SUBLIST select NAME in WORD do LIST done sched* sched set set set setopt setenv shift shift shift shift shift source source* source . stop suspend suspend* suspend test test times time times times trap onintr trap trap true trye type type type typeset typeset umask umask umask umask umask unhash unhash unset unalias unalias unlimit ulimit ulimit unlimit unset unset unset unset unsetenv unsetopt until LIST until LIST do LIST do LIST done done vared wait wait wait wait wait whatis whence while LIST while ( EXPR ) while LIST while LIST while (EXPR) LIST do LIST LIST do LIST do LIST done end done done wich* wich THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE """""""""""""""""""""""""""""""""""""""""""""""""" Copyright: Ove Ruben R Olsen (Ruben@uib.no) Version: 1.01 BETA-A When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'. When looking for BASH, use KSH. Pure BASH's are marked with an '*'. INPUT/OUTPUT - REDIRECTION """""""""""""""""""""""""" SH CSH/TCSH KSH/BASH ZSH --------------------------------------------------------------------------------------------------------------------------------------------------- WORD > FILE >WORD >WORD >& FILE >$WORD >! FILE >! WORD >&! FILE >>WORD >> FILE >>WORD >>WORD >>& FILE >>! FILE >>! WORD >>&! FILE <$DIGIT <&DIGIT <$- <&- <&p >$DIGIT >&WORD >$- >&- <&p THE ULTIMATE SHELL- CONVERSION / EQUIVALENCE TABLE """""""""""""""""""""""""""""""""""""""""""""""""" Copyright: Ove Ruben R Olsen (Ruben@uib.no) Version: 1.01 BETA-A When looking for TCSH, use CSH. Pure TCSH's are marked with an '*'. When looking for BASH, use KSH. Pure BASH's are marked with an '*'. PARAMETERS / SHELL ( ENVIRONMENT) VARIABLES """"""""""""""""""""""""""""""""""""""""""" SH CSH/TCSH KSH/BASH ZSH RC -------------------------------------------------------------------------------------------------------------------------------------------------- auto_resume* argv argv BASH* BASH_VERSION* BAUD CDPATH cdpath CDPATH cdpath cdpath COLUMNS COLUMNS cwd PWD PWD dextract* DIRSTACKSIZE echo edit* EDITOR ENV EUID* ERRNO FCEDIT fignore FIGNORE* fignore filec fpath GID glob_dot_filn.* allow_null_gl.* hardpaths histchars histchars* histchars HISTFILE HISTFILE history HISTSIZE history_control* HOME home HOME HOME home HPATH* HOST HOSTTYPE* HOSTTYPE hostname_comp.* ignoreeof ignoreeof* IFS IFS IFS ifs LINES LINES LINENO LISTMAX LOGCHECK MAIL MAIL MAIL MAILCHECK mail MAILCHECK MAILCHECK MAILPATH mail MAILPATH mailpath no_exit_on_fai.* nobeep noclobber noclobber* nonomatch nolinks* notify notify* LANG LINENO* LC_COLLATE LC_TYPE NO_PROMPT_VARS* OLDPWD OLDPWD OPTARG* OPTARG OPTERR* OPTERR OPTIND* OPTIND PATH path PATH path path PPID PPID pid printexitvalue* PROMPT_COMMAND* PS1 prompt PS1 PROMPT PS2 prompt2* PS2 PROMPT2 PS3 PROMPT3 PS4* PROMPT4 is also PS1 - PS4 pushtohome* RANDOM RANDOM recexact* REPLY RPROMPT RPS1 savehist* SAVEHIST SECONDS SECONDS SHELL shell SHELL SHLVL* SHLVL showdots* signals status status TERM* term* time TIMEFMT TTY autologout* TMOUT TMOUT uid* UID* UID USERNAME verbose version* VERSION VISUAL watch* watch WATCHFMT wordchars* --------------------------------------------------------------------- Pensamento do dia: "FORMAT C: ...Sim ...Sim ...Naaaaaaoooo!!! ^C ^C ^C ^C ^C" ************************************************************ De: Jorge Godoy Para: twlinux Cc: linux-br Assunto: Re: (linux-br) Redirecionar mensagens de erro em shell script Data: 14 Aug 2002 22:13:16 -0300 "twlinux" writes: > E pra redirecionar as saidas normais ???? um echo por exemplo??? STDIN = 0 (Entrada padrâo) STDOUT = 1 (Saída padrão) STDERR = 2 (Saída de erros) Exemplo de uso: ./programa 2> arquivo_de_erros 1> arquivo_de_saída Sds, -- Godoy. ************************************************************ De: Anderson Lizardo Gomes Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) #!/bin/bash - Como? Data: 23 Sep 2002 13:12:05 -0400 Em Domingo, 22 de Setembro de 2002 18:15, HelpLinux escreveu: > Tenho um script para configurar o firewall e roteador com compartilhamento > de internet e não sei onde devo colocar e os procedimentos melhor > recomendados para sua ativação... > Quem puder ajudar, obrigado... > Ah... e pq de "#!/bin/bash"? > [...] O "#!/bin/bash" no início de um script serve para chamar o interpretador bash para executá-lo. Isso torna os scripts, a grosso modo, auto-executáveis, bastando digitar algo como "./script_exemplo.sh". Sem o "#!/bin/bash", você precisa digitar: bash script_exemplo.sh para executá-lo. Esse "método" aplica-se a vários interpretadores. ex: perl, csh, tcsh, awk. Basta mudar a linha para o caminho do programa desejado. -- Anderson Lizardo Gomes Linux User #253643 - LFS User #4601 Site: http://adrenalinux.sytes.net/ ************************************************************ De: Claudio Matsuoka Para: Marcio Merlone Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Ajuda com bash script ninja Data: 24 Oct 2002 08:47:03 -0200 On Wed, 23 Oct 2002, Marcio Merlone wrote: > # Detalhe: eu passo o NOME da variavel como parametro > # para o comando e nao seu valor!! > > # Estas linhas abaixo é que são a dúvida como fazer! > # Ela substituiria servidorX=`comando servidorX` > $servidor=`comando $servidor` > echo "Bla bla bla "${$servidor} #!/bin/sh a="comando a" b="comando b" lista="a b" for i in $lista; do eval echo $`echo $i` done ************************************************************ De: Claudio Matsuoka Para: Lucas Zinato Carraro Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Ajuda em programação - Substituir Strings !! Data: 23 Nov 2002 23:27:54 -0200 On Sat, 23 Nov 2002, Lucas Zinato Carraro wrote: > O queria saber é como posso construir um pequeno script > Que leia um arquivo de texto e toda vez que ele encontrar > um determinada string ( ex Nome='Lucas Zinato Carraro') > ele guarde em um outro arquivo saida.txt > a linha que ele ocorreu e a variável dando uma nova linha > para a proxima vez em que encontrar a ocorrência > > ( ex : 300 - Lucas Zinato Carraro ) > 301 - Fernando Qualquer Coisa > 308 - Ze da Silva Não sei se entendi direito. Este é pequeno e pode fazer o que voce quer: $ perl -ne '/:(Claudio Matsuoka),/ && print "$. - $1\n"' /etc/passwd 22 - Claudio Matsuoka > De modo que eu possa passar este arquivo a uma outra pessoa > que vai editá-lo. Talvez seja mais simples fazer algo como $ perl -pi.bak -e 's/Lemmiwinks/The Gerbil King/' *txt para substituir todas as ocorrências de "Lemmiwinks" para "The Gerbil King" logo de uma vez em todos os arquivos *txt, sem precisar mandar alguém fazer manualmente. > ex: ler do saída.txt e ver que na linha 300 do arquivo original devo > substituir Nome='Lucas' por Nome='Lucas Zinato Carraro' > e na linha 308 substituir Nome='Ze da Silva' por Nome='Jose da Silva' Pegue o arquivo original e o modificado e faça um diff -u. Aplique as diferenças com patch. Mas não sei que bem isso traria. ************************************************************ De: Arnaldo Carvalho de Melo Para: Syndson Silva , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) função substring no shell/bash. Existe? Data: 29 Oct 2002 22:15:33 -0300 > "Syndson Silva" wrote: > > Tem como associar à uma variável do shell uma substring ? Sim: [acme@oops acme]$ nome="Arnaldo Carvalho de Melo" [acme@oops acme]$ echo ${nome:8:8} Carvalho [acme@oops acme]$ echo ${nome:20} Melo [acme@oops acme]$ Facilmente encontrado numa rápida consulta ao bom e velho: man bash Procure por... "substring" :-) - Arnaldo ************************************************************ De: Marcus Lima Responder-a: marcuslima@marcuslima.eti.br Para: Leonardo Tavares , LinuxBR Assunto: (linux-br) RES: (linux-br) Programa em Shell Data: 02 Jan 2003 23:37:30 -0200 > Eu tenho o arquivo1.sh e quero dele chamar uma função dentro do > arquivo2.sh, que é o meu arquivo de biblioteca de funções. Alguém teria > alguma ideia de como faze-lo. Basta incluir o arquivo2.sh no arquivo1.sh, funciona como o include do C ou do PHP, ou outras linguagens. coloque dentro do arquivo1.sh essa linha: . /path/to/arquivo2.sh Depois basta chamar a função que ela já estará incluida. - Marcus Lima --- ************************************************************ De: Marcus Lima Responder-a: marcuslima@marcuslima.eti.br Para: lizardo@users.sourceforge.net, linux-br@bazar.conectiva.com.br Assunto: (linux-br) RES: _(linux-br)_desafio_BASH:_como_fazer_substituição_de_uma_string_contida_numa_variavel_usando_sed Data: 18 Jan 2003 18:59:56 -0200 Anderson, Questão conceitual... sed "s/string1/string2/g" < arquivo > arquivo2; mv -f arquivo2 arquivo Ainda assim é mais facil que o Perl por estar usando comando nativos do Linux. Eu poderia indicar o PHP para fazer isso, mas como está no Subject... Desafio BASH, estou me prendendo ao assunto. - Marcus Lima. ************************************************************ De: Paulino Kenji Sato Para: linux-br Assunto: (linux-br) Re:_(linux-br)_desafio_BASH:_como_fazer_substituição_de_uma_string_contida_numa_variavel_usando_sed Data: 18 Jan 2003 14:21:12 -0200 On Fri, 17 Jan 2003, Anderson Lizardo wrote: > Marcus Lima escreveu: > > > > O sed não edita arquivos. > > (...) > > sed significa Stream Editor, e com o Editor no nome esperasse que ele > > edite > > arquivos. > > (...) > > sed "s/string1/string2/g" < arquivo > arquivo2 > > O arquivo original continuou não editado... O que você fez foi abrir > "arquivo", passá-lo pelo "filtro" do sed, enviando o resultado para > "arquivo2". Sem edições (ao meu ver). Agora, vamos tentar realmente > editar o arquivo "arquivo" com o sed: > > bash$ cat arquivo > string1 > bash$ sed "s/string1/string2/g" < arquivo > arquivo > bash$ cat arquivo > bash$ > > Não funciona ;-). Não quer utilizar o Perl para isso? Então use o ed. Claro que funciona, pense bem, se esta fazendo uma modificação em um arquivo, modificação essa que pode não ser exatamente o que ser quer. Se o altereção for feita em cima do mesmo arquivo, se se a mesma ficar de forma não desejada, como e que fica, onde ta o original, mas esse era o original. Mesmo e perl o bom senso diz para não gravar as alterações, que não se sabe se vai estar correto, no mesmo arquivo. Faria isso assim: sed "s/string1/string2/g" arquivo.txt >arquivo.tmp less arquivo.tmp ficou do jeito desejado? sim: rm arquivo.txt && mv arquivo.tmp arquivo.txt não: goto sed Perl nesse caso e util se tiver dezenas de strings para trocar, um ou outro o sed e mais facil e rapido de se fazer. Paulino ************************************************************ De: Marcus Lima Responder-a: marcuslima@marcuslima.eti.br Para: lizardo@users.sourceforge.net, linux-br@bazar.conectiva.com.br Assunto: (linux-br) RES: (linux-br) Substituição em scripts (Era: (linux-br)_desafio_BASH:_como_fazer_substituição_de_uma_string_contida_numa_variavel_usando_sed) Data: 18 Jan 2003 22:40:55 -0200 > "Comandos nativos"? Se você se refere aos builtins do bash, nem "sed", > nem "mv", nem "ed", nem "perl" são comandos nativos do Linux. Se eu > deletar o sed do meu computador, pronto, menos um comando nativo ;-) Hmmm acho que não estamos falando com iniciantes... Não ignore isso! Quando eu digo "Comandos nativos *do linux*" (por favor não retire palavras que trocam o sentido), estou me referindo a programas usuais do sistema. Programas que são instalados por padrão em diversas (se não todas) as distribuições. > Existem diversas formas de se fazer a mesma coisa em um script. A > verdade é que mesmo o Perl pode ser utilizado em um script bash (como > demonstrou um dos colegas da lista, Thiago, não é?). O que determina se > você vai utilizar a ferramenta "x" ou "y" são fatores como: a > disponibilidade da ferramenta no sistema; a praticidade e as > funcionalidades da ferramenta disponível; o gosto pessal; etc. Certamente, podemos utilizar qualquer coisa disponível para linha de comando no shell script. Como eu disse, poderia também ter feito em PHP: #!/bin/bash ### Se for para uma palavra ou frase descomente esta linha # echo "" | /usr/bin/php -q ### Se for para um arquivo descomente estas linhas # for i in `cat $1`; do # echo "" | /usr/bin/php -q >> $1.new # done Mas não seria usual para um (bash|tcsh|ash) script. Essa era a questão! > Acabamos saindo um pouco do tópico... :-) Ah sim, saimos bastante. Gudiluqui, - Marcus Lima. --- ************************************************************ De: Anderson Lizardo Responder-a: lizardo@users.sourceforge.net Para: Thiago Macieira , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) desafio BASH: como fazer substituição de uma string contida numa variavel usando sed Data: 17 Jan 2003 21:37:38 -0300 Thiago Macieira escreveu: > Anderson Lizardo wrote: > >Ou o "ed". O ed parece uma mistura de Vim com Sed. Veja: > > O contrário! O vi é um ed visual e o sed é o ed para streams. O ed é > o > original! Por isso que eu disse que _parece_... mas tudo bem, captei vossa mensagem ;-) Fazendo um breve resumo, Para substituir strings em arquivos [1]: - O Perl é bom se você vai fazer o script todo nele (IMO); - O Vi(m) é bom se você quer fazer o trabalho "manualmente"; - O sed é bom se você quer fazer o trabalho em um script Bash, mas em uma variável ou saída de um programa (streams); - O ed é bom se você quer fazer o trabalho em um script Bash, e quer que o arquivo original seja modificado. [1] Faltou citar que dá pra fazer com o AWK também... Claro, tudo isso são opiniões, o mundo da programação em script oferece mil e uma maneiras de se fazer a mesma coisa, e é isso que a torna tão fascinante ;-) ===== ************************************************************ De: Anderson Lizardo Responder-a: lizardo@users.sourceforge.net Para: Marcus Lima , Thiago Macieira , linux-br@bazar.conectiva.com.br Assunto: (linux-br) Re:_(linux-br)_desafio_BASH:_como_fazer_substituição_de_uma_string_contida_n uma_variavel_usando_sed Data: 17 Jan 2003 21:51:54 -0300 Marcus Lima escreveu: > > > O sed não edita arquivos. > (...) > sed significa Stream Editor, e com o Editor no nome esperasse que ele > edite > arquivos. > (...) > sed "s/string1/string2/g" < arquivo > arquivo2 O arquivo original continuou não editado... O que você fez foi abrir "arquivo", passá-lo pelo "filtro" do sed, enviando o resultado para "arquivo2". Sem edições (ao meu ver). Agora, vamos tentar realmente editar o arquivo "arquivo" com o sed: bash$ cat arquivo string1 bash$ sed "s/string1/string2/g" < arquivo > arquivo bash$ cat arquivo bash$ Não funciona ;-). Não quer utilizar o Perl para isso? Então use o ed. ************************************************************ De: Marcus Lima Responder-a: Marcus Lima Para: Thiago Macieira , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) desafio BASH: como fazer substituição de uma string contida numa variavel usando sed Data: 17 Jan 2003 19:50:13 -0200 > > O sed não edita arquivos. Oi Thiago, só uma correção sed significa Stream Editor, e com o Editor no nome esperasse que ele edite arquivos. Os comandos do sed são parecidos com o do vim e não é por acaso, a diferença é que no vim você precisa acessar o arquivo para alterar e o sed faz isso em linha de comando... Sendo assim: sed "s/string1/string2/g" < arquivo > arquivo2 Funciona e é bem mais simples que Perl. Gudiluqui, - Marcus Lima. ************************************************************ De: oicrams@brfree.com.br Para: linux-br@bazar.conectiva.com.br Cc: sss@novahamburgo.rs.gov.br Assunto: (linux-br) REsposta p/ desafio BASH Data: 19 Jan 2003 08:17:21 +0000 sss, Use GAWK ele foi criado exatamente para tarefas deste tipo. O seguinte AwkScript resolve o seu problema( de forma mais elegante e eficaz ;-) ): awk ' BEGIN\ { nomes="paulo pedro joao andre fabiano" # Dividindo a variável 'nomes' em arrays: n[1]=paulo, n[2]=pedro .... split(nomes,n) # Mesclando n[2] (pedro) com a string '@server.br'... nomeselecionado=n[2]"@server.br" } { if ($0 ~ nomeselecionado) # Se a linha contém 'nomeselecionado', então... $0=gensub(nomeselecionado, "X", "g") print }' /home/arquivo > /home/arq-alterado.txt -- ************************************************************ De: Anderson Lizardo Responder-a: lizardo@users.sourceforge.net Para: Thiago Macieira , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) desafio BASH: como fazer substituição de uma string contida numa variavel usando sed Data: 17 Jan 2003 15:11:03 -0300 --- Thiago Macieira escreveu: > -----BEGIN PGP SIGNED MESSAGE----- > Tente assim: > perl -pi -e 's/'$nomeselecionado'@server.br/x/' /home/arquivo > > O sed não edita arquivos. Quando você precisar fazer isso, utilize o > Perl como > acima. Note que todos os apóstrofes acima são comuns. Não existem > apóstrofes > invertidos ali. Ou o "ed". O ed parece uma mistura de Vim com Sed. Veja: bash$ cat teste.txt fulano@server.br bash$ TESTE="fulano" bash$ echo -e ",s/${TESTE}@server.br/x/g\nwq" | ed -s teste.txt bash$ cat teste.txt x bash$ /me só usa Perl se for para fazer o script inteiro (embora a documentação fala que o Perl também é bom para fazer comandos rápidos em 1 linha), não Perl dentro de Bash... ************************************************************ De: Paulo Roberto Bagatini Para: Andre Ribeiro Souto Cc: lista linux Assunto: Re: (linux-br) manual s/programção em shell? Data: 10 Jan 2003 21:51:44 -0200 Andre Ribeiro Souto said the following on 01/10/03 16:01: ola alguem sabe onde posso encontrar um manual sobre programação shell man bash http://www.linuxdoc.org/HOWTO/Bash-Prog-Intro-HOWTO.html abs-guide: http://freshmeat.net/projects/advancedbashscriptingguide http://www.google.com.br/search?q=%22shell+programming%22 -- ************************************************************ De: Rodrigo Formel Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) TCL/TK Data: 25 Jan 2003 23:16:11 -0200 Seja bem vindo! Tente lista tcl-br no yahoogrupos, ela é só de Tcl/TK, outra boa referência é o site do Souza Monteiro: http://www.souzamonteiro.com (vive fora do ar mas é muito bom). []'s Formel Em Sáb, 2003-01-25 às 18:49, Geraldo Jr escreveu: > Boa noite a todos. Acabei de me cadastrar na lista e essa é a minha primeira > mensagem. > > Estou estudando lingugens de script e durante essa semana dei meus primeiros > passos com a linguagem TCL. > Executei com sucesso alguns exemplos simples com diversos comandos básicos. > Estou com um problema no comando exec. Como posso escrever uma linha de > código TCL com o exec para executar o comando awk -F: '{print $1}' > /etc/passwd ? > ************************************************************ De: Rauklei P.S.=?ISO-8859-1?Q?Guimar=E3es?= Para: rudy@digihelpnet.com.br Cc: linux-br Assunto: Re: (linux-br) programaçaum BASH Data: 27 Jan 2003 23:41:00 -0200 On Mon, 27 Jan 2003 14:05:25 +0000 Rudy wrote: > DAe moçada... > Seguinte preciso fazer um script onde > uma string receba o valor passado pelo comando > ifconfig | grep ppp0 > > Alguem aih sabe como posso fazer isso????? Ppp0=$(ifconfig | grep ppp0 | awk '{print $1}'); É claro que o ideal é fazer um loop/while para saber se o ppp0 "está no ar", e exibir qdo necessário, mas como c queria só isso... []'s -- Rauklei P.S. Guimaraes ************************************************************ De: Eduardo Rocha Para: Sergio S. Barbosa Cc: Lista Linux Assunto: Re: (linux-br) Criacao de Scripts Data: 30 Jan 2003 14:19:10 -0200 Velhinho, depende da linguagem script que vc quer criar. Pode ser Perl, Tcl/tk, expect, bash, csh, phyton, awk, etc etc etc. Se for bash, o que é bastante provável, dê uma olhada em: http://www-106.ibm.com/developerworks/library/l-bash.html http://www-106.ibm.com/developerworks/library/l-bash2.html http://www-106.ibm.com/developerworks/library/l-bash3.html Eduardo Rocha Sergio S. Barbosa wrote: Olá colegas. Gostaria de obter um material para aprender a criar scripts no Conectiva Linux 8. Poderiam me indicar um local onde eu possa encontrar. Sergio S. Barbosa ************************************************************ De: Paulino Kenji Sato Para: linux-br Assunto: (linux-br) Shell script e variaveis Data: 12 Feb 2003 22:02:40 -0200 On Wed, 12 Feb 2003, Dorian Bolivar wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Olá, > > On Wednesday, 12 February 2003 18:00, Paulino Kenji Sato wrote: > > Considere o seguinte bash script: > > #!/bin/bash > > CONTADOR=0 > > find $1 -name "*.jpg" | while read f; do > > #faz um monte de coisas aqui > > CONTADOR=$[ $CONTADOR + 1 ] > > done > > echo "Número de arquivos processados: $CONTADOR" > > > > Ao executar esse script, o $CONTADOR sempre esta com o valor inicial > > 0. Eu sei por que isso acontece, o pipe abre uma nova shell. > > Como fazer para ter o valor atualizado do $CONTADOR? > > Se eu entendi +/- o problema, pergunto: você já experimentou exportar a > variável para o ambiente, tanto na declaração quanto na atualização? Sim, olha (1) #!/bin/bash C=0 export C head -1 /etc/passwd | while read f; do echo $f C=$f export C done echo "C = $C" $ ./x root:x:0:0:root:/root:/bin/bash C = 0 agora se faço (2) #!/bin/bash C=0 export C head -1 /etc/passwd | ( while read f; do echo $f C=$f export C done echo "C = $C" ) $ ./x root:x:0:0:root:/root:/bin/bash C = root:x:0:0:root:/root:/bin/bash Explicação: (pelo que entendi) No (1) o pipe (|) abre uma nova shell, e herda as variaveis, mas não consegue devolver o que herdou ao seu ascendente. No caso (2) tambem cria uma nova shell, mas o par () e usando para agrupar os comandos, todo o resto da execução ocorreu no shell filho. O pai começa o serviço e deixa para o filho terminar. Um "scripteiro" casual como eu não lembra de usar o () para agrupar, mesmo tendo o livro de bash a mão. :) *********************************************************** De: Thiago Pimentel Para: Fernando Tauscheck Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Argumentos em shell scripts!! Data: 09 Mar 2003 03:38:53 -0300 On Sun, 9 Mar 2003 03:00:29 -0300 Fernando Tauscheck wrote: > Quero fazer uma rotina de teste para emitir uma msg de erro, > avisando da > obrigatoriedade do argumento. Abaixo estou enviando meu 'GRANDE' if test -z $1; then echo "Passe um argumento."; exit 0; fi; thiago ************************************************************ De: Edson Olivio Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Programação_Shell_(em_bash) Data: 12 Mar 2003 15:52:04 -0300 Olah !! O livro "Linux - Programação Shell" jah estah na 3a. Edição, e continua com uma ótima qualidade =] visite este link http://br.groups.yahoo.com/group/shell-script/ onde vc pode se cadastrar e trocar muitas ideias sobre shell-script =] []'s Edson ************************************************************ pause e CTRL+C De: AWK Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Sobre Shell script Data: 12 Apr 2003 19:31:50 -0300 clmr, Voce deve usar o read com a opção '-p', assim: $ read -p "Pressione qualquer tecla para continuar ..." A tecla pressionada será salva na variável $REPLY Para evitar o envio do CTRL-C para o programa você deve usar o comando 'trap' com argumento 2 [ ]'s ************************************************************ De: Renato Q. Todorov - Webmaster Jet Sites Para: Daniel Ferreira Cc: Hever Costa Rocha , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Dúvida sobre shell script Data: 11 Apr 2003 14:33:29 +0000 Ou entao crie um alias!! Eh bem mais facil e pratico.. veja: root@darkness:/# alias grande='cd /diretorio/muuuuuuuuito/longo' root@darkness:/# grande root@darkness:/diretorio/muuuuuuuuuito/longo# Renato Quinhoneiro Todorov renato@jetsites.com.br "When you know Slackware, you know Linux... when you know Red Hat, all you know is Red hat" Em Sex, 2003-04-11 às 11:30, Daniel Ferreira escreveu: > Ao invés de executar o script desse jeito: > > $ ./script > > tente fazer: > > $ . script > > []s, -- ************************************************************* De: Glênio Côrtes Himmen Para: linux-br@bazar.conectiva.com.br Assunto: (linux-br) Menu em SHELL !!! Data: 11 Apr 2003 14:43:13 -0300 Galera, Abaixo tem um menu que uso no Red Hat 8 e não funciona, sendo que o mesmo menu no SCO funciona... O problema está na linha que tem o "\c" sem as aspas, este comando no SCO faz com que o cursor torne ao final da mensagem aguradando o usuário digitar algo e pressionar ... No Linux, não volta, no SCO funciona que é uma maravilha... Outra coisa, qual o comando que substitui o FINGER ??? Os dois problemas são encontrados em testes no Red Hat 8... Alguém se habilita ??? ----------INICIO DO MENU----------- #!/bin/sh while true do clear echo " ===========================" echo " Escolha o Modulo que Deseja" echo " ===========================" echo "" echo " 1 - Iptu " echo " 2 - Issqn " echo " 0 - Saida Geral " echo "" echo " ESCOLHA A OPCAO -> \c" read a if [ "$a" = "0" ] then exit fi if test "$a" = "" then echo "\n\nOPCAO INCORRETA" sleep 3 continue fi if [ $a -gt 2 ] then echo "\n\nOPCAO INCORRETA" sleep 3 continue fi if [ $a -lt 1 ] then echo "\n\nOPCAO INCORRETA" sleep 3 continue fi if [ "$a" = "1" ] then cd /dataflex/iptu . ./setpath dfrun menu fi if [ "$a" = "2" ] then cd /dataflex/issqn . ./setpath dfrun iss fi done clear exit --------------TERMINO DO MENU------------------ OBS. ZAGO neste texto tem soluções para o problema apontado nesta mensagem ************************************************************* De: Brunhara Para: Frederico Madeira , Linux - BR Assunto: Re: (linux-br) Dúvida shell Data: 10 Apr 2003 22:29:40 -0300 Ola, Frederico Blz!! 1) wc -l arquivo 2) head -Numero-da-Linha arquivo |tail -1 ----- Original Message ----- From: "Frederico Madeira" Pessoal, COmo poderia realizar as seguintes operações no shell: 1. Contar quantas linhas um determinado arquivo tem 2. Ler apenas uma determinada linha do arquivo ************************************************************* De: Bruno Tinoco Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Sobre Shell script Data: 09 Apr 2003 14:53:44 +0000 Olá clmr, Não existe pause, porem você pode simular utilizando um "read" esperando que usuário tecle ENTER antes de continuar a execução do programa --------------------- #!/bin/sh echo "Tecle ENTER para continuar \c" read ENTER exit 0 --------------------- Quanto ao Ctrl-C você pode resolver o problema capturando sinais (signals) Em programação shell ( sh [Bourne Shell] ) existe uma tabela de números que significam um tipo de signal: 0 Normal Comando de Saída 1 SIGHUP (Deconectou a Sessão) 2 SIGINT (Interrupção) 15 SIGTERM (Kill) Então você pode bloquear o comando "Control-C" dando um trap no signal de interrupção. Veja o exemplo: ----------------------- #!/bin/sh trap 'sleep 10; exit 0' 2 echo "Ctrl-c desativado espere 10 segundos para finalizar o programa" ------------------------- É isso aí! Abração, Bruno C. Reded Tinoco brunocrt@hotmail.com From: "clmr" To: Subject: (linux-br) Sobre Shell script Date: Tue, 8 Apr 2003 12:26:26 -0300 Prezados amigos Tenho duas pequenas dúvidas: Como colcar um comando de pause em um script solicitando ao usário pressionar qualquer tecla para continuar e como barrar a tecla CTRL C para evitar que quando pressionada o script seja encerrado e volte ao prompt. ************************************************************* De: Brunhara Para: clmr , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Sobre Shell script Data: 09 Apr 2003 11:22:51 -0300 sleep trap ----- Original Message ----- From: "clmr" Prezados amigos Tenho duas pequenas dúvidas: Como colcar um comando de pause em um script solicitando ao usário pressionar qualquer tecla para continuar e como barrar a tecla CTRL X para evitar que quando pressionada o script seja encerrado e volte ao prompt. ************************************************************* De: Thiago Macieira Para: Renato Riolino , Linux-BR Assunto: Re: (linux-br) Duvida Shell Script Data: 06 Apr 2003 02:05:59 +0100 Renato Riolino wrote: >Olá! > >Como eu faria, em shell script, para jogar um range numerico dentro de >um for ? > >Algo assim: > >for i in [1..100]; do echo $i; done Utilize um while: i=1 while [ $i -lt 100]; do printf "%02d" $i i=$[ $i + 1 ] done -- ************************************************************* De: Julio Biason Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Sobre scripts... Data: 12 Apr 2003 21:33:53 -0300 Giovani Perez do Carmo : > Qual a linguagem utilizada nos scripts??? Depende do interpretador, indicado na primeira linha. Tu pode fazer um script em bash e colocar #!/bin/sh Ou em Python #!/usr/bin/python Ou, se tu for maluco o suficiente, em Perl. :) #!/usr/bin/perl -- ************************************************************* De: Sthenley Macedo Responder-a: sthenley@bit1.com.br Para: linux-br@bazar.conectiva.com.br Assunto: (linux-br) RE: Ajuda em Shell script Data: 15 Apr 2003 01:25:24 -0300 Salve! > AVVER=`cat readme.txt | tr "\n" " " | cut -d" " -f91` > se eu der echo $AVVER vem uma beleza, mas se eu colocar echo $AVVER.zip >(...) Vai depender do resto do script, mas talvez seja só a sintaxe: Echo ${AVVER}.zip ou Echo $AVVER".zip" Talvez ajude. Virtualmente, -- ********************************************************************** De: Syndson Silva Responder-a: syndson@linuxbr.com.br Para: Sérgio Assunção , Linux-BR Assunto: Re: (linux-br) Comando echo Data: 15 Apr 2003 07:27:30 +0000 > Mas o problema é que estou usando o comando echo pra gravar no arquivo > /etc/named.conf, e preciso que o conteúdo da variável $fdominio fique entre > " " dentro do arquivo, mas nao estou conseguindo faze-lo, preciso de algo > mais ou menos assim: > zone "dominio.com.br" > > type master; > file "dominio.com.br"; > }; Deixe-me entender: você quer que as aspas sejam escritas no arquivo, certo? Então, você deve colocar uma contrabarra antes de cada aspa. Isto também vale para qualquer caracter especial que o shell interprete como comando. Do jeito que está fazendo, se escrever: echo "dominio.com.br" sairá -> dominio.com.br echo \"dominio.com.br\" sairá -> "dominio.com.br" Espero ter ajudado. Um abraço, Syndson Silva. ************************************************************* De: Elias Andrade - Suporte=?us-ascii?Q?_t=E9cnico?= - Litoral On Line Para: Nelson Cc: linux-br@bazar.conectiva.com.br Assunto: RE: (linux-br) Shell Script Data: 23 Apr 2003 20:41:10 -0300 Olá!, Seguinte, dê uma lida no BASH Programming Introduction HOW-TO: http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-formats/html_single/Bash-Prog- Intro-HOWTO.html Nele há um exemplo bacana de como aplicar o "for i in", e com certeza vai lhe ajudar, uma vez que foi a primeira documentacao que li pra poder fazer scripts :-). ************************************************************* De: Marcio Merlone Para: Antonio F. Zago Cc: Nelson , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Shell Script 2 - a missão Data: 28 Apr 2003 11:15:14 -0300 On 25 Apr 2003 23:40:39 -0300 "Antonio F. Zago" wrote: > > Que comando usar para que apareça algo como, no windows: Precione qualquer > > tecla para continuar?? > > Olá > Pesquise por pause neste FAQ > > http://www.zago.eti.br/scripts.txt > http://www.zago.eti.br/menu.html > > Zago Eu uso o read #!/bin/sh printf "Pressione "S" para continuar...\n" read bla case $bla in 'S') printf "Ok, vou ocntinuar entao.\n" ;; *) printf "Abortando...\n" ;; esac -- Marcio Merlone ************************************************************* De: AWK Para: Marcio Merlone , Antonio F. Zago Cc: Nelson , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Shell Script 2 - a missão Data: 30 Apr 2003 12:22:05 -0300 Pessoal, É mais simples do que parece, pode-se apenas usar o comando 'read' com as opções -n e -p: $ read -n1 -p"Pressione qualquer tecla p/ continuar..." A tecla pressionada é armazenada na variável $REPLY ;-) ************************************************************* De: AWK Para: Marcio Merlone , Antonio F. Zago Cc: Nelson , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Shell Script 2 - a missão Data: 30 Apr 2003 12:22:05 -0300 Pessoal, É mais simples do que parece, pode-se apenas usar o comando 'read' com as opções -n e -p: $ read -n1 -p"Pressione qualquer tecla p/ continuar..." A tecla pressionada é armazenada na variável $REPLY ;-) [ ]'s ************************************************************* De: Julio Biason Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) loop Data: 25 Apr 2003 19:54:43 -0300 Jorge Dantas : > Pessoal, como faço um loop para o comando netstat|grep 111.111.111.11, quero > que ele fique rodando indefinidamente. while true; do netstat|grep 111.111.111.11; done -- ************************************************************* De: Frederico Madeira Para: Diorgenes Mello Cc: dup Assunto: Re: (linux-br) GOTO no Shell Script Data: 30 May 2003 09:32:38 -0300 Vc faz de forma semelhante. Define as funções: funcao1 () { echo "OK" } funcao2 () { echo "NOK" } if [ condiçao for verdadeira ] then funcao1 else funcao2 fi exit 0 Frederico Madeira fred@rce.neoline.com.br ICQ: 37152149 Registered GNU/Linux nº 206120 ------------------------------ Powered by LINUX Em Sex, 2003-05-30 às 09:02, Diorgenes Mello escreveu: > Como funciona o GOTO(como era nos arquivos bat) em Shell script, em .bat > ficaria tipo assim: > > > ping site 1 se funcionar goto func1 > se não goto nfunc1 > :func1 > echo Funcionou > :nfunc1 > echo Não funcionou. ************************************************************* De: Ricardo Guedes Para: Marco Ant¶nio Brugiolo Gonþalves , linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br) teste condicional Data: 10 Jun 2003 22:16:59 -0400 USUARIO=`whoami`; if [ $USUARIO == "root" ]; then echo "Logado com: $USUARIO"; fi Dúvidas: 1o. man bash (Tem tudo lá) 2o. Olhe no FAQ 3o. Olhe no Google (bash if condition) também em 3 minutinhos: O quarto resultado esclarecia a tua dúvida (Muita coisa mesmo...) Ricardo Guedes ************************************************************* De: Felipe Kellermann Para: Wilson Bento Picaz Bom Cc: Linux-Br Assunto: Re: (linux-br) Script Data: 17 Jun 2003 13:55:52 -0300 On Tue, 17 Jun 2003 8:46am -0000, Wilson Bento Picaz Bom wrote: > Em um Script tenho uma variavel "senha". Gostaria que quando fosse > solicitada a gigitacao ficasse mascarada: "******". > > Tem como fazer isto ? $ cat senha.sh #!/bin/sh echo -n "senha: " while read -s -n1 a && [ "${a/[[:ctrl:]]/}" ] do echo -n \* && b="$b$a"; done; echo -e "\nsenha='$b'"; $ $_ senha: ********** senha='aquiasenha' $ -- ************************************************************* De:  sedrez@tecgraf.puc-rio.br Para:  Rodrigo Faria Tavares Cc:  linux-br@bazar2.conectiva.com.br Assunto:  RE: (linux-br)Shell Data:  Thu, 10 Jul 2003 17:32:15 -0300 (BRT) On 10-Jul-2003 Rodrigo Faria Tavares wrote: >#/bin/bash > > $i = "13"; > $j = "25"; > for $i in $i -lt 25 $i++ > do > echo "192.168.$i.0" > done Rio de Janeiro, 10-Jul-2003 Céus!! Parece BASIC! E misturado com alguma outra coisa! As variáveis do shell tem o valor atribuido apenas com o nome. i=13 j=25 O "for" do shell opera somente com uma lista de elementos. Por exemplo: for i in 13 14 15 16 17 18 19 Se você quiser fazer a variável percorrer um intervalo, precisa ser feito com "while": i=13 i=25 while [ $i -lt $j ] ; do         ...         i=`expr $i + 1` done Esta é a versão portável, vai funcionar em sh e ksh, também em outros sistemas. Em bash, você pode usar outra sintaxe para incrementar a variável:         i=$[ $i + 1 ] Ou você pode ser criativo na hora de usar o "for": i=13 j=25 for i in ` yes "" | cat -n | head -$[ $j - 1] | tail +$i ` ; do         ... done ----- Paulo F. Sedrez ************************************************************* De:  Anderson Lizardo Para:  Rodrigo Faria Tavares , linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Shell Data:  Thu, 10 Jul 2003 16:18:25 -0300 (ART) Em Quinta, 10 de Julho de 2003 13:51, Rodrigo Faria Tavares escreveu: > estou iniciando em programacao de shell script fiz um simples Aproveite e leia http://www.tldp.org/LDP/abs/html/index.html ;-) > algoritmo fiz um chmod 755 gera_ips > [script original] > tem algum erro de sintaxe ? muitos ;-). Acredito que você esteja acostumado com o Perl, pois está usando o "$" na frente da definição das variáveis. Aí vai o script corrigido: #!/bin/bash # ^^^^ Você esqueceu do "!" acima # Diferentemente do Perl, não se usa "$" na atribuição de variáveis # Também não é necessário ";" ao final de cada linha (embora não cause # problema algum) i=13 j=25 # Uma das formas de se fazer loops. veja outras em # http://www.tldp.org/LDP/abs/html/loops.html for ((; i < $j; i++)); do    echo "192.168.$i.0" done # Fim do script -- Anderson Lizardo ************************************************************* De:  Dragon Para:  Lista Linux-BR Assunto:  (linux-br) Algumas dicas de Bash... Data:  Sat, 28 Jun 2003 15:19:46 -0300 (BRT) #/bin/bash # here_document.sh --- Demostra um pouco o uso do Here Document, #                                  e algumas dicas de Bash. # # Márcio Mendonça --- oicrams@brfree.com.br # 23-Jun-2003 # # Usando o Here Document para comentar um bloco de texto... : << FIM_COMMENT Este texto digitado neste campo deverá ser ignorado pelo Bash, ou seja, tudo digitado entre o : e a string limitadora do Here Document. FIM_COMMENT # Um pequeno macete... num=80 # Note o "\>" ao invés do tradicional  "-gt" [ $num \> 50 ] && echo " \"\$t\" é MAIOR que 50" || echo "\"\$t\" MENOR que 50" # Usar [[ $num > 50 ]], também funciona! ;-) # Outra dica - Uma nova forma de redirecionamento... echo "A saída do comando \"grep '^' <(ls -l)\"" grep '^d' <(ls -l)   # O mesmo que ls -l | grep '^' ======================== Márcio Mendonça ************************************************************* De:  Anderson Lizardo Para:  Rodrigo Faria Tavares Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)shell - soma de variaveis inteiras Data:  Wed, 30 Jul 2003 22:11:48 -0300 (ART) Em Quarta, 30 de Julho de 2003 16:15, Rodrigo Faria Tavares escreveu: > como fazer um somatorio no shell > (...) > no shell nao aceita  j++ Aceita sim! ;-) basta colocar a expressão entre (( e )) (ótimo para quem está acostumado com programação C). Ex: #!/bin/bash j=1 ((j++)) echo $j   # Deve imprimir "2" -- Anderson Lizardo De:  Antonio S. Martins Jr. Para:  Rodrigo Faria Tavares Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)shell - soma de variaveis inteiras Data:  Wed, 30 Jul 2003 21:32:52 -0300 (EST) On Wed, 30 Jul 2003, Rodrigo Faria Tavares wrote: > como fazer um somatorio no shell > > por exemplo : > > na linguagem C++ > j = 0 > j++   que é igual a j=j+1 > > no shell nao aceita  j++ > > como posso fazer isso ? > Ola,   no shell:   j=$((j+1))     abracos, ************************************************************* De:  claudio@conectiva.com Para:  Alisson Marques da Silva Cc:  linux-br@bazar.conectiva.com.br Assunto:  Re: (linux-br) Duvida progração shell Data:  Wed, 30 Jul 2003 21:44:20 -0400 (EDT) On Wed, 30 Jul 2003, Alisson Marques da Silva wrote: > for USUARIO in * > > Como faço para em vez de percorrer o diretorio ele percorra um arquivo de > texto com o nome dos usuarios ?? for i in `cat bla`; do ************************************************************* De:  crg Para:  Marco Ant¶nio Brugiolo Gonþalves , linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br) teste condicional Data:  Wed, 11 Jun 2003 09:30:47 -0300 Em Terça 10 Junho 2003 20:50, Marco Ant¶nio Brugiolo Gonþalves escreveu: > tentei escrever um script mas no meio precisei verificar > quem era o usuario entao fiz: > > USUARIO=who -q > if $USUARIO=root then > > Fiz uns testes e vi que a variavel USUARIO esta recebendo > o valor correto, mas nao consigo fazer o teste condicional > retornar valor nenhum. > > COMO FAÇO UM TESTE CONDICIONAL ? man test Um exemplo que eu uso em meus scriprs para verificar se eh o root: #/bin/bash if test $UID -eq 0 then         echo eh o root. else         echo nao eh o root. fi boa sorte! CRG ************************************************************* De:  Igor Hercowitz Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Shell script Data:  Mon, 1 Mar 2004 18:34:24 -0300 Ae anderson! Ve se eh um ShellScript assim que voce quer para rodar dos jogos de Snes :) =======[nome.sh]==================== #!/bin/bash #Script para rodar ROMS do SNES9x echo "Digite o nome da rom (nome.extensao)" read ROM snes9x $ROM exit 0 ================================== nao se esqueca de depois torar o script executavel com chmod +x Ah sim, o nome.sh pode ser qualquer nome. Abracos, Igor ************************************************************* De:  Thiago Macieira Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Permissoes Data:  Fri, 12 Mar 2004 16:25:39 -0300 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Elisson Ferraz PUC wrote: >Bom dia lista! >Como q faço para rodar um shell script como root. Só tem um jeito: rode-o como root. Ou seja, faça login como root, ou use o su ou sudo. Scripts não podem ser setuid-root. [corta script] Dica: chage. - --   Thiago Macieira  -  Registered Linux user #65028    thiago (AT) macieira (DOT) info ************************************************************* De:  Jeimerson C Chaves Para:  Rafael Nery , linux-br@bazar.conectiva.com.br Assunto:  Re: (linux-br)shell scripts Data:  Sat, 3 Apr 2004 11:36:39 -0300 Artigos manuscritos, de tempos esquecidos contam que em Saturday 03 April 2004 08:58, Rafael Nery Escreveu: > Olá! > Estou querendo começar a estudar shell scripts... Onde eu possa achar algo > que começa desde o inicio... Uma apostila, ou um livro. > Obrigado, Amigo, tem este inico veja se pode te ajudar... man bash         shell que sera ultilizado para a pesquisa. man test                  Comando "test" ultilizado para comparar variaveis         o mesmo pode ser substituido por "[ ]"         Ex: test A = B                 [ A = B ]         Obs: Os espacos em branco entre os parametros sao         importantes em toda a programcao shell. Operadores de fluxo if then                  else                  fi while do          done Exemplo: for i in `ls` do         echo $i         echo "aaa$ibbb" done cat arq.txt | while read a do         echo "--- $a" done > arq1.txt exemplo de programas ------>>  INICIO <<------- #! /usr/local/bin/bash # se este script for feito em FreeBSD #! /bin/bash # se este script for feito em linux # Comentario for i in `ls *.txt` do         a= `echo $i |cut -d "." -f1`                 echo "$a.jpg"                 mv $i $a.jpg ------->> FIM <<-------- Comandos uteis grep arq.txt          (retorna as linhas que contem palavra) grep -v arq.txt       (retorna as linhas que nao contem as plavras) kill -9 `ps -ax | grep  fw |cut -c1-5`         (deruba todos os processos que iniciem com "fw" no nome) tar czvf teste.tgz * ( compacta todos os arquivos em teste.tgz) tar zxvf teste.txt descompacta o conteudo de teste.tgz) sort .txt > .txt         (ordena o conteudo de um arquivo) man perl        (par quem quer conhecer um shell mais poderoso ) ################### Exercicio ############################# ################### manutencao de matricula ################ inc.bash         - inclui um registro matricula e nome alt.bash         - Procura uma matricula se existir coloca o novo nome exc.bash         - Exclui um registro que tenha a matricula bkp.bash         - faz um backp do arquivo com o formato -escola.bkp Arquivo escola.txt                  - Deve ser ordenado por matricula         - Nap pode ter matricula repitida         - Deve ter um registro por linha         - campos matricula e nome separados por ";" -- Um grande abraço, Jeimerson C. Chaves Administrador de Redes Grupo Diroma - BSD User = 050859 http://www.diroma.com.br/     eMail: jeimerson@diroma.com.br Voice: +55 64 453-1586  Caldas Novas-GO, Brazil "Aquilo que vale, não é o quanto fazemos, e sim, como fazemos!" ************************************************************* De:  Dicas-L-Owner@unicamp.br Assunto:  [Dicas-L] Scripts para todos os gostos Data:  Tue, 15 Jun 2004 02:32:10 -0300 -------------------------------------------------------------------- Comente esta dica em http://www.Dicas-l.com.br/dicas-l/20040615.php --------------------------------------------------------------------                         Ensinando a Ousar http://www.idph.net/artigos/nossacomunidade/ensinando_a_ousar.php --------------------------------------------------------------------   Scripts para todos os gostos   ============================ Mais alguns sites de scripts e programação: - Cetus Links - Object-Orientation (http://www.cetus-links.org) - FreeScripts.Com (http://www.FreeScripts.com/scripts/) - Java Boutique (http://www.javaboutique.com) - The Script Archive (http://www.scriptarchive.com/) - Linux Software and Web Scripts (http://www.fortunecity.com/skyscraper/seagate/507/) - Script Search (http://www.scriptsearch.com/) - CGI Resources (http://www.cgi-resources.com/) - Shell Dorado (http://www.shelldorado.com/) - Sandyx Systems Scripts (http://www.sandyxsystems.co.uk/scripts/) - Compilers Net (http://www.compilers.net) - Programmers Heaven.com (http://www.programmersheaven.com) - PHP Coding Standard (http://alltasks.net/code/php_coding_standard.html) Recomendação: Irado Furioso Com tudo -------------------------------------------------------------------- As mensagens da lista Dicas-L são veiculadas diariamente para 25021 assinantes.        Todas as mensagens da Dicas-L ficam armazenadas em                http://www.Dicas-l.com.br. A redistribuição desta e outras mensagens da lista Dicas-L pode ser feita livremente, deste que o conteúdo, inclusive esta nota, não sejam modificados. --------------------------------------------------------------- *************************************************************