http://www.zago.eti.br/script/scripts-modelos.txt Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tópicos. Neste texto alguns modelos de scripts mais utilizados em minhas instalações, edite e altere para suas necessidades. Estão comentados para facilitar o entendimento. Alguns estão pronto pra copiar e colar na linha de comando, outros pra criar o script. Cuidado com este recurso, dependendo dos comandos pode alterar a configuração da instalação ou remover dados, pra evitar resultado inesperado procure entender o que fazem e faça por sua conta e risco. Pra trabalhar com scripts em interface gráfica, conheça: dialog e kdialog, tem um artigo sobre eles em: http://linux.trix.net/ ******************************************************** OBS. Pra executar script de firewall requer a instalação do modulo Iptables. No CL9 instalado com perfil "estação de trabalho" não inclue o modulo do kernel Iptables, qualquer regra de firewall que utilize Iptables requer este modulo, para instalar requer os CD de instalação e o seguinte comando, como root em um console: apt-get install iptables ou via synaptic, procure pelo modulo iptables. veja mais sobre firewall e iptables no diretório: http://www.zago.eti.br/firewall/ ******************************************************** Sscript é uma ferramenta muito útil, poderosa e necessária em sistemas Linux, pode simplificar muito trabalho, considere uma maravilha que você tem que aprender e usar para ser mais rápido, eficiente e produtivo. Embora muito simples tem quem reclama, principalmente aqueles tem dificuldade de digitação, a linha de comando ainda assusta muitos usuários, tenho observado a reação de usuários do windows que fazem muitas criticas e objeções ao uso do console no Linux, criticam sem conhecer, comparam com o DOS, e nem sabem que pode copiar uma sequencia de comandos do editor ou navegador e com um simples clique do mouse pra colar no terminal pode criar e executar um script ou varias tarefas, tudo isto sem digitar nada, portanto entenda o terminal como um local mágico. Isto só é prossivel pra quem está usando Linux, não tem equivalente pra windows, somente testando pra ver os resultados. Quem está lendo este texto a partir do windows não sabe o que está perdendo, se tivesse no Linux já testava e via o resultado. Na medida do possivel vou colocar em cada FAQ alguns exemplos de script ou linhas de comando pronto pra copiar e colar, claro que alguns requer alguma alteração, como caminho, nome de arquivos ou diretórios, senhas e etc.. ******************************************************** Conheça os comandos que vai utilizar em script, a maioria deles estão nos diretórios /bin e /usr/bin. Execute o comando com a opção --help, tem muita informação sobre parametros do comando, juntamente com as páginas do man e pesquisa no Google, tudo fica muito mais fácil. Evite fazer testes como root, os riscos de danificar seu sistema são bem pequenos, ou faça da forma mais segura, utilize ambiente de testes. considere usar um live CD, instalação dual boot ou emuladores como qemu. ******************************************************** Exemplo1 Como exemplo, com seu editor de texto preferiro, crie um arquivo com este conteúdo: #!/bin/bash #Esse script pode ser distribuido livremente #linhas para comentários sobre o script data="Hoje é `date`" echo $data salve este arquivo com o nome teste.sh precisa tornar executável com chmod +x teste.sh compare as permissões antes de depois do comando. execute ls -la para listar as permissões. antes tem esta permissão. -rw-r--r-- depois de aplicar (chmod +x teste.sh) fica assim -rwxr-xr-x Observe o x, modifica a permissão para tornar o script executável. Também pode aplicar outras permissão que inclua a permissão de executar, tornar executável, veja mais alguns... chmod +rwx teste.sh chmod 777 teste.sh Isto envolve segurança, com 777 libera para qualquer um ler, modificar e executar o script, com 700 somente o dono (owner) tem acesso. Para executar programas e script no diretório local, precisa anteceder o nome do executavel com ./ ou sh, exemplos: ./teste.sh ou sh teste.sh Ou coloca-lo em algum diretório que faça parte do path, por exemplo /usr/bin, assim de qualquer outro diretório basta digitar o nome do script neste exemplo teste.sh Para alterar o script, basta edita-lo, fazer as correções, salvar e executa-lo novamente, precisa manter a primeira linha (#!/bin/bash) e não precisa executar (chmod +rwx teste) Agora mais fácil ainda, com mouse, selecione e copie o texto abaixo, abra um console, com o cursor do mouse dentro dele clique com botão auxiliar selecione em colar e enter, copie e cole as linhas abaixo, isto mesmo copie do navegador pra colar na linha de comando do shell, incluindo também as linhas ### inicio e ### fim ### inicio touch teste chmod +rwx teste echo \#\!\/bin/bash >> teste echo "#Esse script pode ser distribuido livremente" >> teste echo "#linhas para comentários sobre o script" >> teste echo "echo Hoje é `date`" >> teste sh teste cat teste ### fim Comentarios sobre o scrip acima: cria um arquivo vazio com o nome teste no diretório atual touch teste chmod altera as permissões do arquivo, dá as permições de execução/leitura e gravação. chmod +rwx teste ou se preferir pode usar chmod 777 teste acrescenta (#!/bin/bash) na primeira linha do arquivo teste, esta linha é necessária em todos os scripts pra chamar o interpretador, os mais comuns são bash e sh, utilize um dos dois. echo "#Esse script pode ser distribuido livremente" insere o que está entre apas como uma linha no final do arquivo teste echo "#linhas para comentários sobre o script" insere o que está entre apas como uma linha no final do arquivo teste, linhas iniciadas com # são comentarios, exceto a primeira que contém (#!/bin/bash), todas as demais linhas iniciadas com # são comentarios e não serão interpretadas pelo script, útil pra inserir suas anotações e comentarios. echo "echo Hoje é `date`" >> teste insere o que está entre apas como uma linha no final do arquivo teste O escript já está pronto, o sh teste ou ./teste e cat teste não fazem parte do script foi copiado e colado junto com os comandos para executa-lo e visualizar o conteúdo do arquivo. Continue acrescentando ou alterando comandos. Mesmo pelo ambiente gráfico use um editor de texto simples pra altara-lo. Pra executar um programa no diretório local precisa acrescentar o ponto e barra no inicio, fica assim: ./teste ou sh espaço nome do executável sh teste Execute-o novamente, digitando agora somente ./teste, veja os resultados também com ls -la, ou por qualquer outro gerenciador de arquivos. Utilizo este bloco acima pra criar novos scripts, pode copiar pra outro editor de texto e elaborar outro script, as linhas iniciais já estão prontas. Uma boa tecnica pra depurar erros no script é inserir a linha: echo "executando a linha tal" >> meulog Esta linha grava o conteúdo entre parenteses no arquivo meulog, depois de executado o script voce edita meulog e analiza os resultados, tente também usar o comando tail simultaneamente com a execução do script, enqanto executa o script em um terminal, abra ou termil e execute: tail -f meulog ou tail -f /caminho/meulog ******************************************************** Exemplo 3 Pra criar usuário, crie este script, coloque as linhas abaixo no arquivo caduser e depois execute chmod 777 caduser. #!/bin/bash adduser $1 echo $2 | passwd $1 --stdin echo "Usuário $1 adicionado com sucesso" como root na linha de comando digite sh nomedoscript nomedelogin senha, exemplo, pra script com nome caduser, pra criar o usuário zago com senha minhasenha basta digitar: sh caduser zago minhasenha Resultado do comando: [root@faqcl10 root]# sh caduser zago minhasenha Changing password for user zago. passwd: all authentication tokens updated successfully. Usuário zago adicionado com sucesso Pra criar usuários com a mesma senha, coloque a senha no script, faça a troca de $2 do echo pela senha, na linha de comando passe como parametro somente o nome do usuário que deseja criar, exemplo: #!/bin/bash adduser $1 echo senhaigualpratodos | passwd $1 --stdin echo "Usuário $1 adicionado com sucesso" Neste caso passe somente o nome do usuário, a linha de comando fica assim: sh caduser zago Pode colocar um if pra testar se está rodando como root e emitir um aviso, use este exemplo: #!/bin/bash if test $UID = 0 then adduser $1 echo $2 | passwd $1 --stdin echo echo "Usuário $1 adicionado com sucesso" else echo Pra criar usuários requer poderes de root. fi veja mais sobre como criar e manipular usuários: http://www.zago.eti.br/user-cadastro.txt http://www.zago.eti.br/user.txt ******************************************************** Exemplo4 Este modelo cria e executa um script que compartilha internet, este é copia de adsl-compartilhar.txt, está aqui pra comentarios, para não criar problemas quando executado, neste texto foram comentadas as linhas que inclue a chamada no script de inicialização e as linhas que poderiam alterar a configuração da sua maquina. pra saber mais (sobre como "copiar e colar" veja cp.txt). O modelo abaixo está configurado pra ppp0, caso na tua instalação seja outro, edite e faça a correção antes de copiar e colar. Em um terminal (shell), como root, copie do editor ou browser e cole na linha de comando uma unica vez todas linhas abaixo, incluindo ### inicio e ### fim: ### inicio touch /etc/rc.d/iptfirewall chmod +rwx /etc/rc.d/iptfirewall echo "#/etc/rc.d/iptfirewall" >> /etc/rc.d/rc.local echo \#\!\/bin/bash >> /etc/rc.d/iptfirewall echo "#modprobe iptable_nat" >> /etc/rc.d/iptfirewall echo "#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE" >> /etc/rc.d/iptfirewall echo "#echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.d/iptfirewall /etc/rc.d/iptfirewall cat /etc/rc.d/iptfirewall ### fim Explicando ### inicio linha de comentario touch /etc/rc.d/iptfirewall cria em /etc/rc.d o arquivo vazio iptfirewall chmod +rwx /etc/rc.d/iptfirewall dá permissão de escrita, leitura e gravação ao arquivo echo "#/etc/rc.d/iptfirewall" >> /etc/rc.d/rc.local esta linha esta comentada e não produz efeito, sem o comentario ela acrescenta no final do script de inicialização uma chamada para executar o script em toda inicialização do micro. acrescenta (#!/bin/sh) na primeira linha do arquivo teste echo "#modprobe iptable_nat" >> /etc/rc.d/iptfirewall Insere no final do arquivo o que está entre aspas. echo "#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE" >> /etc/rc.d/iptfirewall Insere no final do arquivo o que está entre asp echo "#echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.d/iptfirewall Insere no final do arquivo o que está entre asp Esta terminado o escript, as linhas abaixo foram copiadas e coladas mas não fazer parte do escript. /etc/rc.d/iptfirewall executa o script cat /etc/rc.d/iptfirewall exibe o conteúdo do script ### fim para apagar o arquivo execute esta linha, ou melhor copie e cole: rm -rf /etc/rc.d/iptfirewall A maneira mais prática pra colocar no final de /etc/rc.d/rc.local e editar a seu modo, alterar o device de rede e etc.. comando pra importar pro "vi" (veja cp.txt) :r !lynx -dump http://www.zago.eti.br/modelos/ppp0-compartilhar ************************************************************ MODELO DE FIREWALL COM IPTABLES, PRA FECHAR TUDO QUE VEM DA INTERNET E LIBERAR TUDO QUE SAI PRA INTERNET. Como usuário root em um terminal shell, em qualquer diretório, a simples copia do texto abaixo para a linha de comando, (copie deste texto as linhas entre ### inicio e ### fim e cole no prompt da linha de comando), Este simples copiar e colar, cria e executa na tua maquina um script basico de firewall com Iptables. Este modelo é pra quem conecta na internet por modem discado ou ADSL com rp-pppoe, quem levanta a interface eth0 deve alterar onde está ppp0 pra eth0, nestas regras tem o basico do basico, depois deve utilizar um editor de texto pra continuar com as implementações ou adequações. Para acessar e alterar este script posteriormente, basta atraves de um editor de texto, editar o arquivo iptfirewall que está em /etc/rc.d/ para que as alterações produza efeito execute: /etc/rc.d/iptfirewall ou no próprio diretório execute: ./iptfirewall ### inicio rm -rf /etc/rc.d/iptfirewall touch /etc/rc.d/iptfirewall chmod +rwx /etc/rc.d/iptfirewall echo "/etc/rc.d/iptfirewall" >> /etc/rc.d/rc.local echo \#\!\/bin/bash >> /etc/rc.d/iptfirewall echo "# Limpando.... " >> /etc/rc.d/iptfirewall echo "/usr/sbin/iptables -t nat -F PREROUTING" >> /etc/rc.d/iptfirewall echo "/usr/sbin/iptables -t nat -F POSTROUTING" >> /etc/rc.d/iptfirewall echo "/usr/sbin/iptables -F INPUT" >> /etc/rc.d/iptfirewall echo "/usr/sbin/iptables -F FORWARD" >> /etc/rc.d/iptfirewall echo "# Politica de ENTRADA como NEGAR..." >> /etc/rc.d/iptfirewall echo "/usr/sbin/iptables -P INPUT DROP" >> /etc/rc.d/iptfirewall echo "# Aceite conexoes estabelecidas" >> /etc/rc.d/iptfirewall echo "/usr/sbin/iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT" >> /etc/rc.d/iptfirewall echo "/usr/sbin/iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT" >> /etc/rc.d/iptfirewall echo "# Habilita forward - repasse para a internet" >> /etc/rc.d/iptfirewall echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.d/iptfirewall echo "# Liberar por exemplo SSH pra rede 192.168.1./24 e pro #ip 200.204.198.164 para qlq lugar..." >> /etc/rc.d/iptfirewall echo "#/usr/sbin/iptables -A INPUT -p TCP -s 192.168.1.0/24 -d 0/0 --dport 22 -m state --state NEW -j ACCEPT" >> /etc/rc.d/iptfirewall echo "#/usr/sbin/iptables -A INPUT -p TCP -s 200.204.198.164 -d 0/0 --dport 22 -m state --state NEW -j ACCEPT" >> /etc/rc.d/iptfirewall /etc/rc.d/iptfirewall ### fim echo " " >> /etc/rc.d/iptfirewall echo " " >> /etc/rc.d/iptfirewall Antes e depois de executar o script faça testes nestes sites: http://scan.sygatetech.com/ http://www.auditmypc.com/ https://grc.com/x/ne.dll?bh0bkyd2 Detectando algum serviço ouvindo a internet indevidamente, voce precisa decidir entre para o serviço ou incluir regras no firewall acima. Com certeza algum acesso à internet será bloqueado, veja nos modelos de iptables uma regra que os libere e copie para o teu firewall. Caso tenha problemas ou queira remover a execução deste script no boot, basta editar o arquivo: /etc/rc.d/rc.local procure pela linha "/etc/rc.d/iptfirewall" comente-a acrescentando no inicio da linha o caracter # ou se preferir remova toda a linha, ou mais fácil ainda, comente a linha com copiar e colar executando estas linhas: cp /etc/rc.d/rc.local /etc/rc.d/rc.localcopia sed 's%/etc/rc.d/iptfirewall%#/etc/rc.d/iptfirewall%' /etc/rc.d/rc.localcopia > /etc/rc.d/rc.local Reinicie o micro pra funcionar sem a proteção do firewall. Prefira a opção comentar linha, quando quiser voltar a utilizar o firewall, basta retirar o simbolo # de comentario que no proximo boot volta a funcionar. ATENÇÃO: Estas linhas são exclusivas pra este escript, sob nenhuma forma elas afetam outros scripts mas podem apagar o rc.local, antes de qualquer ação faça uma copia do do seu rc.local para outro nome. Pra visualizar o conteúdo de rc.local, execute: cat /etc/rc.d/rc.local SSH? No modelo acima as linhas sobre ssh estão comentadas, caso queira habilita-las pra manutenção remota, lembre de alterar também o IP 200.204.198.164 para o que voce quer permitir a entrada via internet, estas são as linhas referentes ao ssh: echo "# Liberar por exemplo SSH pra rede 192.168.1./24 e pro #ip 200.204.198.164 para qlq lugar..." >> /etc/rc.d/iptfirewall echo "#/usr/sbin/iptables -A INPUT -p TCP -s 192.168.1.0/24 -d 0/0 --dport 22 -m state --state NEW -j ACCEPT" >> /etc/rc.d/iptfirewall echo "#/usr/sbin/iptables -A INPUT -p TCP -s 200.204.198.164 -d 0/0 --dport 22 -m state --state NEW -j ACCEPT" >> /etc/rc.d/iptfirewall ************************************************************ De:  claudio@conectiva.com Para:  Anderson Mattos Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Shell script Data:  Tue, 2 Mar 2004 19:29:46 -0300 (BRT) On Mon, 1 Mar 2004, Anderson Mattos wrote: > Possuo o snes9x (emulador para super nes) instalado sendo que para executar > qualquer rom tenho que digitar snes9x + "nome da rom" e gostaria de saber se > tem como criar um script que na hora me pergunte o "nome da rom" e após > informado execute automaticamente snes9x + "nome da rom informado". Não parece haver grande ganho uma vez que o nome tem que ser digitado de qualquer maneira, mas de qualquer forma um script que faça isso é bastante trivial: #!/bin/sh echo -n "bla: " read i exec /bin/echo "$i" ************************************************************ PASSAR NOME DE ARQUIVO PRA MINUSCULO De:  Carlos Para:  Fernando Novaes , linux-br@bazar2.conectiva.com.br Cc:  Lista de Usuarios do Slackware Linux Assunto:  RE: (linux-br)script para manter arquivos em minusculo Data:  Wed, 5 May 2004 21:21:08 +0000 No samba deve haver algo pra isso, mas nao pesquisei. Entretanto eh bem simples fazer isso em shell, voce pode cirar um carinha que fique em loop eterno: #!/bin/bash while : ; do lista=$(ls /diretorio) for x in $lista ; do         var=$(echo $x |tr A-Z a-z)         mv /diretorio/$x /diretorio/$var 2>/dev/null done #sleep importante, aumente mas nao remova. sleep 1 done Assim ele vai sempre renomear os arquivos de maiusculo  para minusculo.  '>'-- Mensagem Original --  '>'From: Fernando Novaes  '>'To: linux-br@bazar2.conectiva.com.br  '>'Date: Wed, 5 May 2004 14:55:28 -0300  '>'Cc: Lista de Usuarios do Slackware Linux  '>'Subject: (linux-br)script para manter arquivos em minusculo  '>'  '>'  '>'Boa tarde a todos..  '>'  '>'Tenho uma rede mista Win/linux onde uso o Samba para usar alguns arquivos.  '>'Só  '>'que quando estes arquivos são usados no Windows eles acabam sendo gravados  '>'em  '>'maiusculo. Quando vou acessar estes arquivos em minha base linux eu não  '>'consigo pq nela só posso usa-los em minusculo. Gostaria de saber se existe  '>'  '>'algum script ou alguma configuração para que meus arquivos possam ser  '>'gravados somente em minusculo. Não sei se existe alguma maneira de fazer  '>'isso  '>'no samba. Se alguem puder me ajudar desde já eu agradeço.  ' ************************************************************ De:  Carlos Para:  Carlos Eduardo Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Menu de escolha em script Data:  Sat, 22 May 2004 00:37:44 -0300 Se voce esta falando de menu gráfico estilo netconfig , mouseconfig "make menuconf" ou ntsysv voce pode usar dialog , exemplo: TXT=$(cat /etc/menu) opcao=`dialog --stdout --backtitle "$TXT" --menu "$server SISTEMA" 0 30 4 \ 0  "bla bla bla" \ 1  "bla bla bla bla" \ 30 "bla bla" \ 50 "bla bla"` case $opcao in . . . esac man dialog Agora, se voce quer algo em modo texto com  opções de escolha voce pode usar if-then: read opcao if [ "$opcao" = "1" ] ; then comandos.... else comando... fi Pode usar case como no exemplo em dialog: read opcao case $opcao in blabla) comandos... ;; blabla2) comandos... esac Pode fazer tambem uma tarefa sequencial, exemplo com while: echo "quantas vezes devo executar tal comando ?" inicio = 0 read opcao while [ $inicio -le $opcao ] ; do comandos... inicio=$(expr $inicio + 1) done Eu acredito que tudo depende do que exatamente voce precisa. Espero ter ajudado! Carlos Eduardo wrote: Boa tarde pessoal > > Preciso de um auxilio, estou começando aprender a fazer scripts shell, mas > estou com urgencia em criar um menu de escolha em forma de script, alguem > poderia me ajudar. Tenho tres programas diferentes que gostaria de chamar > escolhendo por um menu,tipo escolho o nro 1 ele abre tal programa e assim > por diante. > Se alguem tiver alguma coisa parecida com isso e puder me mandar eu agradeço > > >   > -- Time is nature's way of making sure that everything doesn't happen at once. - SlackWare user #349702 ************************************************************ De:  Clovis Sena Para:  Samoied Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Menu de escolha em script Data:  Tue, 25 May 2004 15:55:33 -0300 bom dia, sugiro dar uma pesquisada no site do Aurelio: http://aurelio.net/ e abaixo tem um link direto para o artigo dele sobre o dialog... http://aurelio.net/shell/dialog/ excelente! tem coisas que so o  Aurelio faz para voce! t+ Samoied wrote: Bom dia, > > Carlos Eduardo wrote: > > > Boa tarde pessoal > > > > Preciso de um auxilio, estou começando aprender a fazer scripts > > shell, mas > > estou com urgencia em criar um menu de escolha em forma de script, > > alguem > > ************************************************************ De:  scsantos at unigranrio com br Para:  linux-br@bazar2.conectiva.com.br, Accenture_Luiz_Estivalet@Dell.com Assunto:  Re: (linux-br)script ler linha a linha Data:  Wed, 01 Sep 2004 19:08:07 -0300 Uso isso e funciona na boa # Busca status dos Hosts por icmp for i in $hosts do    ip=`echo $i | cut -d ";" -f1`    ping -c 1 $ip >> /dev/null    val=$?    if [ $val -eq 0 ];    then      cor="$UP"      status="UP"    else       cor="$DOWN"       status="DOWN"       echo "$ip DOWN em `date +%c` " >> /usr/local/apache2/htdocs/historico.txt    fi    # Monta HTML que será exibido     echo "                   $ip           "$status"             " >> /usr/local/apache2/htdocs/index.html done Um fraterno abraço       Silvio Cesar L. dos Santos   Divisão de Tecnologia da Informação Universidade do Grande Rio - UNIGRANRIO  (o_  //\            - Software Livre -  V_/_     conhecimento ao alcance de todos ************************************************************ De:  Carlos Para:  Accenture_Luiz_Estivalet@Dell.com Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)script ler linha a linha Data:  Wed, 01 Sep 2004 22:37:05 -0300 Accenture_Luiz_Estivalet@Dell.com wrote: Ola, > Gostaria de ler linha-a-linha o arquivo e manipular cada lina individualmente. Mas tem alguma coisa errada no meu script (vejam a saida). Sempre q um espaço em branco eh encontrado ele faz uma quebra de linha. Como evitar isso? > > > #/bin/sh > > INPUTFILE=`cat temp.txt` > for i in $INPUTFILE > do >    echo $i > done > > #### > # .# > #  ### > #*@  # > #  $ # > #  ### > #### > > saida: > $ ./sokoban.sh > #### > # > .# > # > ### > #*@ > # > # > $ > # > # > ### > #### > >   > Ele faz isso porque quando a variavel INPUTFILE recebe o conteudo de temp.txt ele encara cada espaco em branco como argumento, veja isso: for x in a b c d ; do  # repara que cada argumento eh separada por uma linha em branco. Exatamente como o conteudo do seu $x, o x da segunda linha recebe: # .# Ou seja, dois argumentos. Voce poderia fazer isso facilmente com perl, olhe: #!/usr/bin/perl open(FILE, ") {   print $_; } Esse codigo acima exibiria exatamente o conteudo de tem.txt. O codigo abaixo em shell to fazendo aqui sem testar, dereto no mail, la vai: #!/bin/bash cat temp.txt |grep -n $ > temp.txt.tmp total=$(tail -1 temp.txt.tmp |cut -d ":" -f1) start=1 >temp.txt.out while [ $start -le $total ] ; do   cat temp.txt.tmp |grep "^$start" |cut -d ":" -f2 >> temp.txt.out   start=$(expr $start + 1) done rm -rf temp.txt.tmp E agora testando... : hash@scarface:~$ cat temp.txt #### # .# #  ### #*@  # #  $ # #  ### #### hash@scarface:~$ ./teste.sh hash@scarface:~$ cat temp.txt.out #### # .# #  ### #*@  # #  $ # #  ### #### hash@scarface:~$ Isso nao foi um simples cat, o conteudo de temp.txt foi processado linha a linha. Espero ter ajudado. -- Time is nature's way of making sure that everything doesn't happen at once. - SlackWare user #349702 De:  Thiago Macieira Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)script ler linha a linha Data:  Wed, 1 Sep 2004 23:43:47 -0300 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Carlos wrote: >Accenture_Luiz_Estivalet@Dell.com wrote: >>Ola, >>Gostaria de ler linha-a-linha o arquivo e manipular cada lina >> individualmente. Mas tem alguma coisa errada no meu script (vejam a >> saida). Sempre q um espaço em branco eh encontrado ele faz uma quebra de >> linha. Como evitar isso? Não use o "for". Além disso, o seu script abaixo simplesmente perde todas as quebras de linhas, porque ele não mexe na variável IFS e joga o conteúdo do arquivo para uma variável de ambiente. >>INPUTFILE=`cat temp.txt` >>for i in $INPUTFILE >>do >>    echo $i >>done [corta] >Voce poderia fazer isso facilmente com perl, olhe: > >#!/usr/bin/perl >open(FILE, "while () { >   print $_; >} Solução em bash: INPUTFILE=temp.txt cat $INPUTFILE | while read line; do         echo $line done A cada iteração, $line contém o conteúdo inteiro de uma linha. - --   Thiago Macieira  -  Registered Linux user #65028    thiago (AT) macieira (DOT) info     ICQ UIN: 1967141   PGP/GPG: 0x6EF45358; fingerprint:     E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358 De:  Carlos Para:  Accenture_Luiz_Estivalet@Dell.com Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)script avancado Data:  Thu, 02 Sep 2004 20:40:37 -0300 Agora ta lindo, pode ir pro abraco. Usei a ideia do Thiago sobre o loop do while , da forma dele realmente estava mais simplificada! Pode ir pro abraco Luiz... <-(com pontos) ----------corta aqui ------------- #!/bin/bash arquivo="seu_arquivo.txt" echo "1:. 2:.. 3:... 4:.... 5:..... 6:...... 7:....... 8:........ 9:........." >pontos cat $arquivo |while read line ;do real=$(echo  -e "$line"|tr . X |wc -c) real=$(echo -n `expr $real - 1`) if [ $real -ne 0 ] ; then        real=$(echo -n `expr 10 - $real`)        pontos=$(cat pontos|grep $real|cut -d ":" -f2)        semponto=$(echo  -e "$line"|tr . X)        echo -e "$semponto$pontos" else        echo ".........." fi done rm -rf pontos --------- corta aqui -------------- Accenture_Luiz_Estivalet@Dell.com wrote: Ola, > tenho uma serie de arquivos que preciso converter o formato. Estou tentando fazer um script shell > para isso. Mas ta dificil > > > original: > #### > # .# > #  ### > #*@  # > #  $ # > #  ### > #### > > depois de rodar o script: > ####...... > # X#...... > #  ###.... > #*@  #.... > #  $ #.... > #  ###.... > ####...... > .......... > .......... > .......... > > Alguma ideia? > >   > -- Time is nature's way of making sure that everything doesn't happen at once. - SlackWare user #349702 ************************************************************ ************************************************************ ************************************************************ ************************************************************