>Estou começando a estudar shell scripts mas não estou conseguindo usar o >comando cd. Exemplo: quero fazer um script que vá direto para a raiz. >Fiz o seguinte: > >#!/bin/bash >cd / E' um erro classico de programacao. Lembre-se de que um "script" nao e' executado no mesmo "shell", ou seja, o Linux cria um processo 'a parte e dentro dele e' que o seu programa sera' executado. Quer uma prova disso? Do "shell" digite este comando: # echo $$ Isso exibira' o numero do processo. Tome nota dele. Em seguida insira o comando dentro do seu "shell script": #! /bin/bash echo Processo $$ cd / Voce vera' que os numeros sao diferentes. Por que? Porque o "script" esta' sendo interpretado em um processo filho do seu "shell" principal. Ai' voce me pergunta: Mas por que o comando cd nao funcionou? Ate' funcionou, mas quando o seu "script" termina de rodar, o processo filho termina e com ele o seu cd "desaparece". E como para o "shell" pai nada mudou, ele continua no mesmissimo diretorio.. **************************************************************************************** > Tem um outro que pegue na lista que faz isto so que eu não consegui > fazer ele funcionar. Ele é o seguinte: > > #!/bin/sh > > dir=$1 > > dir=$1 > > # low='á éíóú à è ì ò ù ä ë ï ö ü â ê î ô ûãõñ ç' # serve apenas > > como label para a proxima linha > latin_low='| ~B¡¢£~E~J~M~U~W~D~I~K~T~A~C~H~L~S~VÆä¤~G' > asc_low='aeiouaeiouaeiouaeiouaonc' ... > tenho um monte de arquivos para arrumar na minha transferencia do > rwindows para linux e arrumar dir por dir é um trampo e tanto. Esse fui eu que fiz. Mas o que nao funciona? Observe que algumas linhas foram quebradas no envio do e-mail para a lista e portanto voce deve junta-las novamente. Alem disso, como eu disse na msg original, tem o problemas dos caracteres especiais. Voce deve reescreve-los. No mais... Vamos fazer diferente dessa vez: nao vou mandar por e-mail. Baixe diretamente do nosso servidor, nesse endereco: ftp://ftp.ceat.net/pub/linux/scripts/lower Baixe o arquivo e torne-o executavel. Desse modo, nao vao ocorrer os problemas supra-citados :) Espero que agora funcione. mailto:arkanon@ceat.net **************************************************************************************** TROCAR DE MAIUSCULAS PARA minusculas Um scriptzinho de presente: for x in *; do mv $x `echo $x | tr "A-Z" "a-z"`; done; como de costume, faça uma copia de segurança dos arquivos.. algo pode dar errado.. para os arquivos que já estão em minusculas, ele vai emitir a seguinte mensagem: mv: `teste.log' e `teste.log' são o mesmo arquivo não se preocupe... **************************************************************************************** Assunto: Renomeando todos os arquivos para minusculas A seguinte linha vai renomear todos os arquivos, a nao ser que ja' exista um arquivo com o mesmo nome em minusculas: perl -e 'for (@ARGV) { rename $_, lc($_) unless -e lc($_); }' * ----------------------------------------------------------------- **************************************************************************************** > PessoAll, alguem sabe se existe algum comando no linux para trocar o nome > dos arquivos de maiusculos para minusculos. O move nao posso utilizar pois > nao sei o nome de todos os arquivos, alguns tem o nome com maiusculas e > minusculas, tipo arQ12Aas.tXt. Você tem que fazer um script... Tente esse for i in $*; do j=`echo $i|tr [A-Z] [a-z]` mv $i $j done té mais **************************************************************************************** > Tudo bem que o "find" e menos otimizados que os outros procuradores Estas afirmacoes "sangram" o coracao de puristas do Linux ... > > Eu executo: find / -name xxxx Uma alternativa seria : find / -print | grep -i xxxx > > Sei que o /proc/6/fd é um arquivo especial Sim. > mas teria que ter uma maneira de burlá isto. Como seria? Tente um comando find + script assim : find $1 -exec Procura.sh {} $2 ; script "Procura.sh" { if [ -d "$1" ] || [ -c "$1" ] || [ -b "$1" ] || [ -L "$1" ]; then echo . . . Saltando Arq. Especial "$1" . . . . . else echo Procurando em "$1" if grep -i "$2 *$3 *$4" "$1" > /dev/null ; then echo . echo . grep -i "$2 *$3 *$4" "$1" echo Arquivo : "$1" read a fi fi } // fim script Esta eh apenas uma das 5 trilhoes de formas diferentes de fazer isso com o Linux ... -- **************************************************************************************** > Gostaria de saber se alguém da lista já usou ele ou usa? Se a resposta for > positiva, poderia me dar o comando que gerasse uma planilha em formato HTML. > OBS: meus logs do squid estão localizados em: /hot/squid/log/access.log # cd /hot/squid/log # webalizer access.log Assim ele ira gerar varios arquivos png e html nesse diretorio. # mkdir /home/httpd/html/stats # mv *.htm* *.png /home/httpd/html/stats # netscape & http://seuhost/stats/ **************************************************************************************** vc poderia trocar aquele monte de IFs por um case. fica mais facil de entender e pra adicionar mais opcoes ew barbada... de uma olhada abaixo. falowz !! On Tue, 20 Jun 2000, Mask_of_zorro wrote: > Estou fazendo um trabalho em uma empresa e presciso disponibilizar para o > cliente um ambiente para que ele possa trabalhar , como não quero > disponibilizar uma shell para ele vou fazer um script para facilitar , so > que estou com dificuldade nesse script , pesso a vcs que tentem me ajudar > Obrigado > > > > #Esse script será distribuido gratuitamente > #pesso apenas que naum tirem os creditos do autor > #Bruno Diniz , Belo Horizonte , MG - Brasil > #bruno@ligabrasil.com.br > export PATH=/sbin:/usr/sbin:/bin:/usr/bin > clear > #Perguntar qual aplicativo quer olhar > echo -e " ================================================= " '\n' '\c' > echo -e "= Mask of Zorro Bash Persona =" '\n' '\c' > echo -e "= por ter usado mais um de nossos produtos =" '\n' '\c' > echo -e "= bruno@ligabrasil.com.br =" '\n' '\c' > echo -e "=================================================" '\n' '\c' > echo -e "Escolha uma opção :" '\c' '\n' '\n' > echo -e " ________________ " '\c' '\n' > echo -e " | 1 - Pingar | " '\c' '\n' > echo -e " | 2 - NSLookup | " '\c' '\n' > echo -e " | 3 - Samba | " '\c' '\n' > echo -e " | 4 - Memoria | " '\c' '\n' > echo -e " | 5 - Disco | " '\c' '\n' > echo -e " | x - Sair | " '\c' '\n' > echo -e " ---------------- " '\c' '\n' > read resposta case "$resposta" in 1) ping localhost ;; 2) nslookup ;; 3) smb restart ;; 4) free ;; 5) df ;; x|X) exit 0 ;; *) echo "Opcao invalida" esac > if [ $resposta ]; then > if [ "$resposta" = 1 ]; then > ping localhost > > else > if [ "$resposta" = 2 ]; then > > nslookup > > else > if [ "$resposta" = 3 ]; then > smb restart > > else > > if [ "$resposta" = 4 ]; then > free > > else > if [ "$resposta" = 5 ]; then > df > fi > > > > > Cada numero vai chamar um outro script que será feito separadamente , isso > será apenas um menu > **************************************************************************************** Nao sei se eu entendi o problema direito. Voce quer que para uma entrada do tipo Nome do Usuário: ac Nome Completo: Anonymous J. Coward Grupo : lusers a saida seja algo como adduser -G lusers -g lusers ac -c "Anonymous J. Coward"? Se for este o problema, use adduser -G $group -g $group $usuario -c \"$nomecomp\ **************************************************************************************** > Tem algum programa ou script q renomeie todos os arquivos de um diretorio, > deixando todos em minusculo ?? > Ola uso o seguinte script para fazer isso. #!/bin/sh # downcase by Eduardo Marcel Macan # use at your own risk ;-) if [ $# = 0 ] then echo "usage: downcase [file ...]" exit fi for FILE in $* do NFILE=`echo $FILE | tr '[A-Z]' '[a-z]'` if ! [ -f $NFILE ]; then mv $FILE $NFILE fi done **************************************************************************************** : > Tem algum programa ou script q renomeie todos os arquivos de um diretorio, > deixando todos em minusculo ?? for i in *; do mv $i `echo $i|tr A-Z a-z` done **************************************************************************************** > Tem algum programa ou script q renomeie todos os arquivos de um diretorio, > deixando todos em minusculo ?? Tente usar o script abaixo da seguinte forma: ./tolower dir/* Arquivo tolower -------------------------------- #!/bin/sh for each do lower=`echo "$each" |tr '[A-Z]' '[a-z]'` if [ "$lower" != "$each" ] then mv "$each" "$lower" fi done exit 0 **************************************************************************************** "Debug" no bash --------------------------------------------------------------------- Colaboração: Fernando Roxo Por vezes um script é muito grande e nos interessa fazer este "trace" apenas em um trecho do programa. Como fazê-lo ? Coloque no início do trecho uma instrução : set -x Desta linha em diante o "trace" será ligado. Para desligar o "trace" mais adiante para evitar listar partes sem importância, use : set +x Veja que por vezes nós sabemos que o "problema" só ocorre quando alguma variável assume um determinado valor. Neste caso podemos ligar o "trace" condicionalmente : if [ $VARIAVEL = valor ]; then set -x fi {trecho a debugar} set +x Como se pode ver o "trace" pode ser desligado mesmo que ele não esteja ligado. Esta forma de listar o script, durante a execução, vai listar o comando após a substituição das variáveis. Como identificar que variável tem que valor ? Podemos usar a opção "-v" para listar as linhas duarnte a leitura. Na verdade eu prefiro usar uma combinação das duas opções : set -xv {trecho a "debugar"} set +xv Da mesma forma que antes o "+" desliga a opção. Um último par de dicas. Se um script "liga" o "debug", apenas os "scripts" rodados com o comando "." terão o "debug" ligado. Para evitar que fique algum "debug" ligado quando se reutiliza o ambiente ( através do comando "." ) é interessante colocar no final do script um desligar geral de "debug", mesmo que o "debug" não tenha sido ligado : # # Desliga "debug" se tiver sido ligado set +xv # Fim do script.... --------------------------------------------------------------- As mensagens da lista Dicas-L são veiculadas diariamente para 14893 assinantes. Para sair ou assinar a lista Dicas-L, consulte o documento que se encontra em http://www.Dicas-l.com.br/FAQ.html. 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. --------------------------------------------------------------- **************************************************************************************** > On Mon, 9 Apr 2001, Marcio Merlone wrote: > > > #/bin/marciogol > > Para cada linha em ARQUIVO faça > > script_em_perl $2 > > script_em_bash $1 > > Proxima linha > > , sendo que o arquivo encontra-se no formato > > $1,$2 > > $1,$2 > > $1,$2 > $1 e $2 podem ter espacos? > Se não podem: > > cut -d, while read x1 x2 > do > script_perl $x2 > script_bash $x1 > done > Se podem ter espaços: > > awk -F, 'NF>=2 {print $1; print $2}' while read x1 && read x2 > do > script_perl "$x2" > script_bash "$x1" > done minha contribuiçãozinha em bash também... arq=ARQUIVO cat $arq | while read linha; do export IFS=, set - $linha script_em_perl "$2" script_em_bash "$1" done estou usando o IFS para dizer ao bash que o separador é a vírgula. não preciso guardar o IFS anterior e depois restaurar porque o próprio while tem o defeito (feature?) de não compartilhar as variáveis usadas por ele depois que ele se vai. o set - serve para pegar o que tiver na variável $linha e jogar nos parâmetros $1-$.., respeitando o IFS como delimitador de parâmetros. e por fim, coloco $1 e $2 entre aspas para que, se tiver espaços, possam ser passados para os sub-scripts como um parâmetro somente. a outra maneira seria guardar o IFS em uma variável antes do while, mudar ela para vírgula, e usar o próprio while para pegar os dois parâmetros. depois restaurando o IFS após o done. mas essa fica de lição de casa. ':) **************************************************************************************** > minha contribuiçãozinha em bash também... > > arq=ARQUIVO > cat $arq | while read linha; do > export IFS=, > set - $linha > script_em_perl "$2" > script_em_bash "$1" > done > > estou usando o IFS para dizer ao bash que o separador é a vírgula. > não preciso guardar o IFS anterior e depois restaurar porque o próprio > while tem o defeito (feature?) de não compartilhar as variáveis usadas por > ele depois que ele se vai. Não é defeito, é que o "|while" é considerado um novo processo, e portanto ele tira uma cópia das variáveis de ambiente, e o |while recebe essa cópia, com tudo o que o "processo" anterior tinha, mas não "devolve" nada, pois um processo não é capaz de mudar as variáveis de ambiente do "pai". É necessário que o |while "aparente ser" uma outra task, para que se mantenha a consistência de operação caso, em vez de "|while", se tenha de fato um outro processo. A única diferença entre o "|while" e um processo normal, é que o "|while" vai receber todas as variáveis, mesmo as não exportadas, enquanto um processo recebe apenas as variáveis exportadas. Eu considero esse comportamente "estranho", já fiz vários scripts esperando que um |while criasse e alterasse as variáveis, mas infelizmente compreendo que é realmente necessário manter a consistência de comportamento entre um pipe para uma task normal e um pipe para um shell script "in-line". O export do IFS neste caso é desnecessário pois IFS já é uma variável exportada. > a outra maneira seria guardar o IFS em uma variável antes do while, > mudar ela para vírgula, e usar o próprio while para pegar os dois > parâmetros. depois restaurando o IFS após o done. mas essa fica de > lição de casa. ':) Era o que eu recomendaria, mas eu tinha dúvidas com relação ao IFS. Seu comentário me motivou a rever esse ponto obscuro (para mim) sobre essa variável. O que eu não sabia é que se o shell for iniciado ele redefine a variável IFS para o default: espaco, TAB e newline. O que vai acontecer dentro do |while é que os programas executados vão receber "IFS=," mas se o programa for um shell script, então IFS será redefinido. Compilando e executando o programa C abaixo, com: gcc -o x x.c IFS=,;./x "$IFS" percebe-se que o programa "./x" recebe a variável de ambiente IFS alterada mas o system(), ao reiniciar um novo "sh", redefine esta variável para o default. Resta testar se com um "exec*" a variável é ou não redefinida. É provável que não (a menos que seja um shell script ... :) /* x.c: teste de IFS */ #include main(int argc, char *argv[]) { int i; for (i=1; i\n", i, argv[i]); printf ("IFS para esse programa: <%s>\n", getenv ("IFS")); system ("echo para um subshell: IFS=\\<$IFS\\>"); } /* end of file */ Interessante rever esse comportamento da IFS. Não a usava pois temia que problemas se propagassem de forma não controlada... --- Wagner wks@niktu.psi.com.br **************************************************************************************** -------------------------------------------------------------------- DESCADASTRAMENTO: mailto:Dicas-L-Request@unicamp.br?body=unsubscribe -------------------------------------------------------------------- Endereço: http://www.Dicas-l.com.br/dicas-l/20011105.shtml -------------------------------------------------------------------- Script para Lembretes --------------------------------------------------------------------- Eu escrevi um pequeno shell script para avisar de eventos e enviar uma mensagem pré-formatada para alguém. Este script lê um arquivo do tipo: 20010925:titular:joao@acme.com.br 20010925:suplente:maria@uai.com.br 20010925:suplente:queiroz@unicamp.br 20010925:titular:mariana@ceu.com.br Como voces podem ver, temos três campos. O primeiro é a data no formato AAAAMMDD, o segundo indica a função e o terceiro o email. No nosso caso, nós temos um serviço de atendimento ao público onde uma pessoa é titular e a outra suplente. A shell: #!/bin/bash day=`date +%Y%m%d` for r in `grep $day helpremind.dat` do who=`echo $r | awk -F":" '{print $3}'` what=`echo $r | awk -F":" '{print $2}'` /usr/lib/sendmail $who << EOF Subject: Lembrete: Atendimento ao Público [$what] Não se esqueça que hoje você está escalado para atendimento ao público como $what. Contamos com você. Não se esqueça :-) Obrigado, Queiroz EOF done Sei que existem várias formas de se fazer isto, mas ainda assim acho que vale a pena ver mais uma forma. Este script pode ser mudado à vontade para enviar emails automaticamente em datas de aniversário, etc. Legal nunca esquecer do aniversário de alguém, não? --------------------------------------------------------------- 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. --------------------------------------------------------------- _______________________________________________ Dicas-L mailing list Dicas-L@obelix.unicamp.br http://www.unicamp.br/mailman/listinfo/dicas-l **************************************************************************************** -------------------------------------------------------------------- DESCADASTRAMENTO: mailto:Dicas-L-Request@unicamp.br?body=unsubscribe -------------------------------------------------------------------- Endereço: http://www.Dicas-l.com.br/dicas-l/20011126.shtml -------------------------------------------------------------------- Expect --------------------------------------------------------------------- Colaboração: Rodolfo Brocco Manin <971531@ic.unicamp.br> O Expect (http://expect.nist.gov/) é uma ferramenta para automatizacao de aplicacoes interativas. Ele implementa uma linguagem de scripting similar ao tcl, porem com comandos adicionais para interagir com os aplicativos "no lugar do usuario", i.e.: "ler" prompts e mensagens de certos programas, tomar decisoes baseadas nelas e "digitar" os comandos necessarios. Encontrei esse utilitario quando estava desenvolvendo uma pagina para troca de senha via web, e precisei de um metodo para fazer a troca nao-interativa da senha do usuario. Passwd, chpass & cia nao funcionam com pipes (eles utilizam a funcao getpass(), que só le a senha da entrada padrao se /dev/tty nao estiver disponivel). Estou enviando em attach o script que fiz (estah sendo chamado via popen(), de uma pagina experimental com php). Ele le da entrada padrao o login, a senha atual e a nova senha do usuario (nessa ordem), efetua um telnet para a maquina local e executa o passwd. O script troca a senha de contas expiradas tambem (quando o proprio login chama o passwd), e tem a vantagem de ser "suid-free" :). Se alguem quiser usar, é só dar uma revisada, para compatibiliza-lo com as mensagens do passwd, o prompt do shell do sistema, etc. #!/usr/local/bin/expect -f ############################################################################## # Script para troca nao-interativa de senhas # # Rodolfo Broco Manin - 14/09/2001 # #----------------------------------------------------------------------------# # Codigos de erro: # # - Referentes ao login inicial via telnet: # # 110 - Login ou Senha incorreta # # 198 - Timeout # # 199 - Finalizacao inesperada # # - Referentes aa troca de senha # # 210 - Senha nova invalida # # 220 - Impossivel trocar a senha (erro generico) # # 298 - Timeout # # 299 - Finalizacao inesperada # ############################################################################## # --- Variaveis configuraveis --- # Linha de comando para o 'telnet' set telnet_cmd "/usr/bin/telnet" # Linha de comando para o 'passwd' set passwd_cmd "/usr/bin/passwd" # Host a ser contactado pelo 'telnet' (em geral, o proprio 'localhost') set login_host "localhost" # ------------------------------- # --- Parametros da sessao --- set timeout 10 # Parece que funciona melhor assim... set stty_init -nottycopy # Soh para garantir set env(TERM) vt100 # Nao mostra ao usuario as respostas dos comandos log_user 0 # Exibe mensagem de ajuda, caso o usuario informe algum parametro na linha de comandos if [ expr $argc > 0 ] then { send_user "\n$argv0: Script para troca nao-interativa de senhas.\ \n Execute este script sem parametros, e infrome o login do usuario,\ \n sua senha atual e uma nova senha (nessa ordem, via entrada padrao).\n\n" exit } # Obtem os dados da conta do usuario da entrada padrao gets stdin login gets stdin old_password gets stdin new_password # Inicia a sessao com um cabecalho informativo, proprio para ser redirecionado # para um arquivo de log set timestr [clock format [clock seconds] -format "%d/%m/%Y - %T (%Z)"] send_user "\n----------= Iniciando sessao para troca de senha =----------\n" send_user " * Usuario: $login ----- $timestr\n\n" send_user "Iniciando sessao telnet (host: $login_host)...\n" spawn $telnet_cmd $login_host # Um breve delay para aguardar pela conexao sleep 2 # Efetua o login expect { "ogin:" { send_user " * Enviando login...\n" send "$login\r" # Sessao finalizada por timeout (ex.: servidor NIS ou NFS fora do ar) } timeout { send_user " - Timeout durante a conexao.\n" exit 198 # Sessao abortada inesperadamente (ex.: expect e telnet nao conseguiram se entender) } eof { send_user " - Finalizacao inesperada durante a conexao.\n" exit 199 } } # Finalizacao do login / interacao com o 'passwd' expect { # Espera prompt para senha de login "Password:" { send_user " * Enviando senha...\n" send "$old_password\r" exp_continue # Erros diversos que impedem a troca de senha (ex.: senha nova vazia) # (deve estar antes das linhas que testas os prompts do shell e do 'passwd) } "unchanged" { send_user " - Nao foi possivel efetuar a troca de senha.\n" exit 220 # Informa a senha antiga, solicitada apos a execucao do 'passwd' # ou logo apos o login, caso a senha esteja expirada } "Old" { send_user "\nEfetuando troca de senha:\n * Informando a senha antiga...\n" send "$old_password\r" exp_continue # Trata respostas do sistema a senhas novas invalidas # (deve estar antes da linha que testa o prompt 'New password') } "Please" { send_user " - Senha nova invalida.\n" exit 210 # Informa a senha nova } -r "New|Retype" { send_user " * Informando a senha nova / Confirmacao...\n" send "$new_password\r" exp_continue # Concluiu a troca de senha # (deve estar antes da linha que testa o prompt do shell) } "done" { send_user " + Troca de senha efetuada!\n" exit 0 # Executa 'passwd' caso obtenha-se o prompt do shell } "$login@" { send_user " + Login concluido.\n" send "$passwd_cmd\r" exp_continue # Testa login invalido } "ogin incorrect" { send_user " - Login ou Senha atual incorreta.\n" exit 110 # Timeout e eof em geral nao acontecem aqui, mas... } timeout { send_user " - Timeout durante a troca de senha.\n" exit 298 } eof { send_user " - Finalizacao inesperada durante a troca de senha.\n" exit 299 } } --------------------------------------------------------------- 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. --------------------------------------------------------------- **************************************************************************************** Amigo Secreto Editorial Em http://www.pcs.usp.br/~jkinoshi/bs/b001127.html eu havia escrito: Eu tenho alguns parentes que vejo raramente, principalmente no natal. Eles resolveram fazer um amigo secreto. O problema é que teria que existir uma confraternização antes do natal, já que teríamos que nos reunir para fazer o sorteio do amigo secreto. Criei hoje mesmo um CGI-script para resolver este pequeno "problema" . Em http://www.pcs.usp.br/cgi-bin/jkinoshi/natal/fazlista.cgi você declara a lista contendo o nome das pessoas que farão parte do amigo secreto. Depois cada elemento da lista acessa http://www.pcs.usp.br/cgi-bin/jkinoshi/natal/amigo.cgi e descobre quem é o seu amigo secreto. Como podem existir vários grupos de amigos, cada grupo deve estar associado a um nome. Faça um teste. Fico contente que muitas pessoas estão usando o script também este ano. Publiquei o "algoritmo" do script em: http://www.pcs.usp.br/~jkinoshi/bs/b001207.html e estes dois boletins estão atualmente entre os 10 mais visitados. ********************************************************************* > Ha algum tempo, peguei aqui um comando que com ele eu pude gerar um > arquivo contendo todos os arquivos de cada rpm do cd de minha distro, > assim, quando houvesse determinada dependencia, eu saberia em que pacote > estava a tal dependencia fazendo uma busca dentro desse arquivo. alguem > poderia me relembrar o comando? > Obrigado ! Me pareceu uma boa ideia, eu ainda nao tinha pensado nisso e como nao sou tao antigo por aqui nao sei como foi resolvido na lista. Eu criei um script bem simples que gera um arquivo (arquivos_rpms) com a seguinte estrutura: Identificacao_do_CD - Nome_do_Pacote - Nome_do_Arquivo, em que basta voce dar o comando cat arquivo_rpms|grep que voce identifica o nome do pacote que contem o arquivo em dependencia e o CD em que este pacote se encontra. Abaixo esta o script para gerar o arquivo para consulta: #!/bin/bash echo "Entre com a Identificacao do CD: " read label for i in `ls /mnt/cdrom/RedHat/RPMS/*.rpm`; do for j in `rpm -qlp $i`; do echo "$label - `basename $i` - $j">>arquivos_rpms done done Voce pode executar este script com todos os CD's da sua distribuicao, lembrando apenas de informar corretamente a identificacao do CD (ex: Red Hat 7.2 CDx) que vai ser criado apenas um arquivo (um pouco monstruoso +- 18,5MB com 2 CDs da Red Hat), mas facilita na busca. E so alterar de acordo com as suas necessidades. Demora um pouco para gerar este arquivo, mas compensa. Eu acredito que com um pouco mais de trabalho e pensando um pouco mais se possa melhorar este script, talvez para diminuir o tamanho do arquivo gerado. Eu aceito sugestoes. Desculpe pela falta de acentuacao e pelos erros ortograficos. Espero que ajude, Ronald D. Neves ********************************************************************* > > Vocês poderiam indicar-me sites onde posso encontrar apostilas > e/ou tutoriais sobre shell script!!! > > Amigo, > > Tem uma apostila em http://www.txt.org . Se é pra shell script em geral, e você tiver liberdade de escolha de shell, recomendo aprender korn shell. O livro Learning the Korn Shell, da O'Reilly, é excelente e pode ser lido online: http://safari.oreilly.com/mainshop.asp?bookid=korn&AddSubmit=1&shop (você tem que se registrar). Aliás, recomendo pegar o The Unix CD Bookshelf todo, em HTML, pra ler em casa :) Mesmo para aprender bash este livro é útil porque bash e ksh têm muitas coisas em comum. E o livro é bem didático. OBS.: Eu não sei porque o bash é o shell padrão do GNU/Linux. Eu o acho ruim. "zsh", um shell derivado de ksh, é muitas vezes melhor. Pelo que eu li de ksh93 (http://www.kornshell.com), também. OBS.2: O pdksh, ou Public Domain Korn Shell, usado como "ksh" em 95% das distribuições (acho que o slackware utiliza o ksh93), é ruim e incompatível com o ksh original. ********************************************************************* Subject: (linux-br) Re: ntsysv nao enxerga script. E agora? On 18 Jun 2001, Robert Libotti wrote: > Se alguem da lista pelo menos pudesse explicar o funcionamento dos > diretorios /etc/rc0.d, rc1.d, rc2.d, ... e porque os links dos > scripts que sao criados por la iniciam com K ou S seguido de dois > numeros ja ajudaria muito. "Fiat Lux"! Acho que "captei"! :) Nunca havia me interessado sobre esses detalhes, mas está em "man 8 chkconfig" a explicação das informações que cada script tem que ter como comentário no inicio do script, para ser aceito pelo ntsysv: For example, random.init has these three lines: # chkconfig: 2345 20 80 # description: Saves and restores system entropy pool for \ # higher quality random number generation. This says that the random script should be started in lev- els 2, 3, 4, and 5, that its start priority should be 20, and that its stop priority should be 80. Esses dois campos em comentário (chkconfig e description) são usados pelo ntsysv e chkconfig para saber como introduzir o serviço nos diretório rcN.d. Os scripts rcN.d/Knn* são excutados quando se sai do runlevel N, e rcN.d/Snn* são executados quando se entra no runlevel N. Portanto você deve analisar onde é oportuno seu script terminar e iniciar, e assim determinar o "nn" adequado. Digamos que você deseja usar seu serviço no runlevel 3, veja: ls -1 /etc/rc.d/rc3.d/S* ls -1 /etc/rc.d/rc3.d/K* que facilmente você identifica o ponto correto onde seu serviço deve iniciar e terminar. Recomendo que você veja os scripts presentes e use as mesmas técnicas tipicas destes scripts. Cuidado para não usar um "nn" já reservado para outro serviço. RESPOSTA2 Só uma correção. > O Linux tem 7 níveis de execução. Em cada um desses níveis você pode executar > uma série de deamons. O GNU/Linux tem quantos niveis de execução vc quiser.. basta configurar.. Veja: [olarva@gnuss][/home/olarva]$:=>cat /etc/inittab # # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Version: @(#)inittab 2.04 17/05/93 MvS # 2.10 02/10/95 PV # 3.00 02/06/1999 PV # # Author: Miquel van Smoorenburg, # Modified by: Patrick J. Volkerding, # # These are the default runlevels in Slackware: # 0 = halt # 1 = single user mode # 2 = unused (but configured the same as runlevel 3) # 3 = multiuser mode (default Slackware runlevel) # 4 = X11 with KDM/GDM/XDM (session managers) # 5 = unused (but configured the same as runlevel 3) # 6 = reboot Esse é um outro aspecto que as distribuiçoes poderiam entrar num acordo.. Poderia-se usar a simplicidade do Slack com a comodidade do ntsysv RESPOSTA3 > > O script deve estar sem o atributo de execução. > > Ola, Wagner e obrigado por responder > > Essa foi a primeira coisa que verifiquei e por via das duvidas, > verifiquei de novo e ate refiz as permissoes dele para 755, mas ate > agora nada. Se alguem da lista pelo menos pudesse explicar o > funcionamento dos diretorios /etc/rc0.d, rc1.d, rc2.d, ... e porque os > links dos scripts que sao criados por la iniciam com K ou S seguido de > dois numeros ja ajudaria muito. O Linux tem 7 níveis de execução. Em cada um desses níveis você pode executar uma série de deamons. 0 - halt 1 - Modo monousuário 2 - Multiusuário, sem NFS (igual ao 3, mas sem rede) 3 - Modo Multiusuário completo 4 - Não usado 5 - X11 (Modo gráfico) 6 - reboot Quando o Linux entra em um novo nível de execução ele vai nos diretórios rcx.d, onde x=número do nível de execução, e procura os links que levam aos scripts de início/término dos deamons. Os links têm um nome, que pode ser qualquer um, mas devem apontar para o script de incialização do deamon certo. No caso do meu Conectiva, esses scripts estão em /etc/rc.d/init.d. Quem põe lá esses scripts? O próprio pacote rpm do deamon na hora que o instalei (você pode fazer o seu script se quiser). Exemplo: o pacote Apache (servidor Web) instala o script httpd. Voltando aos links, antes do nome tem um número que vai de 00 até 99. Esse número representa a ordem em que os vários daemons vão ser executados. Os de número mais baixo são executados primeiro. A letra K significa que você vai matar o deamon. A letra S (maiúsculo) é para iniciá-lo e a letra s (minúsculo) é para parar o daemon. O que o ntsysv faz é só facilitar a configuração desses links. Por default ele configura o link no nível de execução corrente. Mas você pode configurar os links na mão. O ntsysv foi inspirado no chkconfig. Logo no início de cada script há uma linha do tipo # chkconfig: 345 60 20 345 quer dizer que o script só pode ser iniciado a partir desses níveis de execução (3, 4 e 5). A prioridade de início é 60 e a de parada é 20. Suspeito que seu script ou não tem essa linha ou você está em um nível de execução em que o deamon não possa ser iniciado. Aí ele não aparece no ntsysv. > Ate agora nao consegui entender a logica disso. Ate criei links para o > script em todos esses /etc/rc*.d/ com um numero que nao estivesse sendo > usado por nenhum outro script: a inicializacao ocorreu (sem gerar a > saida de tela normal mas pelo menos inicia), mas a saida sempre fica > travada no "send kill for all process..." Acho que você deve parar o deamon assim que entrar no nível de execução 0 (halt) ou 6 (reboot). Use o K mais a prioridade, como link apontando para o script. ********************************************************************* De: Anderson Lizardo Responder-a: lizardo@users.sourceforge.net Para: marcuslima@marcuslima.eti.br, linux-br@bazar.conectiva.com.br Assunto: (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 20:38:33 -0300 Marcus Lima escreveu: > sed "s/string1/string2/g" < arquivo > arquivo2; mv -f arquivo2 > arquivo echo -e "%s/string1/string2/g\nwq" | ed -s arquivo Ou ainda (para os fãs do Vim): vim '+%s/string1/string2/g' '+wq' arquivo > > Ainda assim é mais facil que o Perl por estar usando comando nativos > do > Linux. "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 ;-) 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. Acabamos saindo um pouco do tópico... :-) ********************************************************************* De: Anderson Lizardo Para: Ricardo Guedes , vandeci , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) scripts shell interativo Data: 16 Jan 2003 13:05:11 -0300 Ricardo Guedes escreveu: > Tente fazer isso no seu shell script. > > echo -n "Data:"; > read data; Nem precisa utilizar o comando echo, a opção "-p" do read já dá conta do recado: #!/bin/bash read -p "Data: " data echo "A data digitada é $data" #Fim ===== ********************************************************************* De: Ricardo Guedes Para: vandeci , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) scripts shell interativo Data: 15 Jan 2003 22:54:31 -0400 Oi Vandeci, > script ele perguntar. Tipo: > data: > destino remoto: Tente fazer isso no seu shell script. echo -n "Data:"; read data; ********************************************************************* De: Anderson Lizardo Para: vandeci , linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) scripts shell interativo Data: 15 Jan 2003 22:13:16 -0300 vandeci escreveu: > (...) > tudo imbutido no script. Gostaria de saber como fazer para quando > comecar o > script ele perguntar. Tipo: > (...) > E que essas informacoes passem para o script. E possivel em shell > script? sim, utilizando o comando "read". Para mais informações: bash$ help read bash$ info bash 'Builtin Index' 'read' ===== ********************************************************************* De: Silvestre Soluço Para: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Permissões_(avançado)_e_Shell_Script Data: 15 Jan 2003 01:40:36 -0300 --- TuxBrasil 2003 escreveu: > Olá pessoal da lista... > Estou montando uma apostila avançada de > administração de sistemas Linux (com > ênfase em Slackware) e estou tendo um pouco de > dificuldade para encontrar > material de estudo sobre permissões e controle > avançado de usuários, além de > que não vi quase nada sobre Shell Script. De uma olhada nesses tutoriais : http://www.meleuzord.hpg.ig.com.br/textos/permissoes.txt http://www.meleuzord.hpg.ig.com.br/textos/bashscripting.txt Dick Vigarista - Rio ********************************************************************* De: Jorge Godoy Para: peter_parker@softhome.net Cc: linux Assunto: Re: (linux-br) Script Data: 09 Jan 2003 23:11:25 -0200 peter_parker@softhome.net writes: > #!/bin/bash > # Este script deverá ser executado dentro do diretório que contém os > arquivos desejados for ARQ in `ls *`; > do > NOVO=`echo $ARQ | tr '[A-Z]' '[a-z]'`; > echo mv $ARQ $NOVO; > done Não funciona para arquivos com espaços no nome e provavelmente para outros casos também. No histórico há soluções que funcionam. [godoy@wintermute ~/tempo]$ touch "TEste De Arquivos Com Espaço" [godoy@wintermute ~/tempo]$ l total 16 drwxr-xr-x 2 godoy godoy 4096 Jan 9 23:09 . drwxr--r-x 102 godoy godoy 12288 Jan 9 23:09 .. -rw-rw-r-- 1 godoy godoy 0 Jan 9 23:09 TEste De Arquivos Com Espaço [godoy@wintermute ~/tempo]$ bash teste.bash -x mv TEste teste mv De de mv Arquivos arquivos mv Com com mv Espaço espaço mv teste.bash teste.bash [godoy@wintermute ~/tempo]$ Sds, -- Godoy. ********************************************************************* De: Rauklei P.S. Guimarães Para: rettore , linux Assunto: Re: (linux-br) Script Data: 09 Jan 2003 17:26:12 -0300 Pega ai: -------//--------- #!/bin/sh # Converte arquivos de MAIUSCULA para minuscula for x in * do if [ ! -f $x ]; then continue fi lc=`echo $x | tr '[A-Z]' '[a-z]'` if [ $lc != $x ]; then mv -i $x $lc fi done ---------\\--------- C m deve uma "breja" !! []'s Rauklei P.S. Guimaraes ----------------------- ********************************************************************* De: peter_parker@softhome.net Para: linux Assunto: Re: (linux-br) Script Data: 09 Jan 2003 13:40:53 -0700 #!/bin/bash # Este script deverá ser executado dentro do diretório que contém os arquivos desejados for ARQ in `ls *`; do NOVO=`echo $ARQ | tr '[A-Z]' '[a-z]'`; echo mv $ARQ $NOVO; done ********************************************************************* De: Thiago Macieira Para: 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 00:29:03 +0100 sss wrote: >Olá pessoal >Essa é pros shell experts >Como fazer um script como o citado abaixo funcionar? > >#!/bin/bash ># Programa que substitui a string contida na var $nomeselecionado + >@server.br por "x" > >nomes="paulo pedro joao andre fabiano"; >nomeselecionado=$(echo $nomes | cut -d$' ' -f 2); # recebe o segundo >nome da lista (pedro) >sed 's/´s/´$nomeselecionado´@server.br/x/' /home/arquivo; # substitui no >/home/arquivo todas as ocorrencias de pedro@server.br por x > ># a parte que nao funciona é: sed 's/$VAR/x' 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. ********************************************************************* De: Anderson Lizardo Responder-a: lizardo@users.sourceforge.net Para: Marcio Merlone Cc: linux-br@bazar.conectiva.com.br Assunto: Re: (linux-br) Re: (linuxisp-br) Ajuda com vi ou perl ou sed Data: 24 Feb 2003 21:59:07 -0300 > Mas ainda estou curioso de como fazer inline E no vi! Se alguém se > habilitar! :)) Aviso logo que isto é só para matar sua curiosidade ;-). Recomendo usar a implementação Perl ou Awk citadas em outros e-mails. Eu utilizei o Vim para isto, não tenho certeza se funciona no vi original (funcionou pelo menos no Vim em modo compatível). Agora, abra o arquivo, respire fundo e digite a seguinte linha: exe 'normal ggO' | let n = 1 | while search('^[^#]\+$', 'W') > 0 | exe 's/\(^[^#]\+$\)/\1 (Cód. ' . n . ')/' | let n = n + 1 | endwhile | normal ggdd Note que tudo isto é numa linha só. Logo após os pipelines ("|") digite a linha seguinte. Espero ter matado sua curiosidade ;-) ===== ********************************************************************* RESPONDER A PEDIDO DE CONFIRMAÇÃO. De:  Alvaro Figueiredo Para:  Raynilson Closbel Martins , Lista Linux Br Cc:  Lista Linux-Board Assunto:  Re: (linux-br)Duvidas com programaçao shell Data:  Fri, 7 May 2004 13:37:22 -0300 Em Sex 07 Mai 2004 09:53, Raynilson Closbel Martins escreveu: > Olá pessoal da lista. > >       Estou tentando fazer um programa shell script para executar o > novo antivirus free da Panda. Montei o arquivo e já dei > permissão de execução para ele. O arquivo é o seguinte : > > #!/bin/bash > pavcl / -DEL -CMP -AEX -MBR > >       O problema é o seguinte, quando executo o comando acima, o > programa exibi uma tela com os termos de uso de programa, e > pede seja digitada uma tecla para continuar (igual quando > usa-se o comando more). Este é o problema, eu gostaria de > colocar este scrip para ser executado pelo crontab, mas como > tem que pressionar a tecla para continuar, ele fica parado > esperando o precionamento da mesma. Alguém poderia me ajudar. > Qualquer dica é bem vinda. T+ > > > ____________________________ > Raynilson Closbel Martins > RPG, Animes, Games e Informática > Icq : 115384568 Primeiro, verifique se existe alguma opção do anti-vírus para desabilitar a espera pela tecla. Senão, tente acrescentar um "yes | " antes do comando, como no exemplo: yes | pavcl / -DEL -CMP -AEX -MBR -- Alvaro Figueiredo alvarof@freeshell.org De:  Claudio Polegato Jr. Para:  labmancrazy@yahoo.com.br, linux-br@bazar2.conectiva.com.br Assunto:  RE: (linux-br)Duvidas com programaçao shell Data:  Fri, 07 May 2004 12:07:22 -0300 Olá,  Seguinte, tente colocar no fim da linha /dev/null com entrada, ficando o seguinte: #!/bin/bash pavcl / -DEL -CMP -AEX -MBR < /dev/null  Tente e veja se deu certo.  Onde posso conseguir informações sobre Panda, é bom? []'s Claudio > >         Estou tentando fazer um programa shell script para executar o novo > antivirus free da Panda. Montei o arquivo e já dei permissão de execução > para ele. O arquivo é o seguinte : > > #!/bin/bash > pavcl / -DEL -CMP -AEX -MBR > >         O problema é o seguinte, quando executo o comando acima, o programa exibi > uma tela com os termos de uso de programa, e pede seja digitada uma tecla > para continuar (igual quando usa-se o comando more). Este é o problema, eu > gostaria de colocar este scrip para ser executado pelo crontab, mas como > tem que pressionar a tecla para continuar, ele fica parado esperando o > precionamento da mesma. Alguém poderia me ajudar. Qualquer dica é bem > vinda. ********************************************************************* De:  Alvaro Figueiredo Para:  Euripedes Peixoto Guimarães Junior , linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)crontab Data:  Wed, 19 May 2004 11:03:45 -0300 Em Qua 19 Mai 2004 09:34, Euripedes Peixoto Guimarães Junior escreveu: > Srs, > > algum dos amigos da lista poderia me dizer como eh que se faz > para "dizer" ao CRONTAB que execute um script imediatamente > apos o termino do script anterior ?? > > Ex: > 30 19 * * 5 /.../.././script1.bat > ????  * * 5 /.../.././script2.bat Solução 1 - alterar o crontab: 30 19 * * 5 script1.bat; script2.bat Solução 2 - criar outro script que chama o primeiro seguido do segundo; colocar apenas o novo script no crontab. -- Alvaro Figueiredo alvarof@freeshell.org De:  Jorge Godoy Para:  linux-br@bazar2.conectiva.com.br Cc:  Euripedes Peixoto Guimarães Junior Assunto:  Re: (linux-br)crontab Data:  Wed, 19 May 2004 11:35:02 -0300 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On Wednesday 19 May 2004 09:34, Euripedes Peixoto Guimarães Junior wrote: > Como podem observar, o primeiro script é executado as 19:30h de > toda sexta-feira, sendo que desejo que o segundo script seja > executado  i m e d i a t a m e n t e   apos o termino do primeiro > script (por isso coloquei "????" em sentido de duvida) > > PS: o tempo de execucao do primeiro script nao eh fixo, variando > sempre. Invoque o segundo script após o primeiro. Ele sempre será executado no ponto que você determinar. Você também pode criar uma espécie de semáforo, fazendo com que o primeiro crie um arquivo sinalizando o término e o segundo só execute se o arquivo existir, não esqueça de remover o arquivo na primeira execução do segundo, para evitar loops. O tempo, também, não é "imediato". Há um intervalo de até 1 minuto, nas ações agendadas. Sds, - -- Godoy.     -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) De:  LostSoul Para:  Euripedes Peixoto Guimarães Junior , Linux-br Assunto:  Re: (linux-br)crontab Data:  Wed, 19 May 2004 14:57:53 -0300 Euripedes Peixoto Guimarães Junior wrote: algum dos amigos da lista poderia me dizer como eh que se faz para > "dizer" ao CRONTAB que execute um script imediatamente apos o termino do > script anterior ?? > Eu faço o seguinte nestas situações: 30 19 * * 5 /.../.././script1.bat && /.../.././script2.bat falowz -- Rafael Santos AKA LostSoul Date: Wed, 19 May 2004 12:10:47 -0300 From: Samoied Subject: Re: (linux-br)crontab To: Euripedes Peixoto Guimarães Junior   Cc: linux-br@bazar2.conectiva.com.br Message-ID: <40AB78F7.6050506@users.sourceforge.net> Content-Type: text/plain; charset="iso-8859-1" Euripedes Peixoto Guimarães Junior wrote: >Srs, > >algum dos amigos da lista poderia me dizer como eh que se faz para >"dizer" ao CRONTAB que execute um script imediatamente apos o termino do >script anterior ?? > >Ex: >30 19 * * 5 /.../.././script1.bat >????  * * 5 /.../.././script2.bat >  > Simples : 30 19 * * 5 /.../.././script1.bat && /.../.././script2.bat Assim ele executará o segundo script somente se o primeiro retornar 0 (der certo sua execução) Caso não queira essa verificação use ";" no lugar de "&&". PS: Sugiro que use .sh como extensão de shellscript, pois .bat é muito windows ;) Até mais, ********************************************************************* De: Jorge Luiz Godoy Filho Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)erro - "cannot stat" Data: Mon, 21 Feb 2005 17:23:32 -0300 Em Seg 21 Fev 2005 07:10, Acacio Amorelli Martins escreveu: > Bom dia, estou rodando um script de backup, mas surge o seguinte > erro: "cannot stat": /tmp/dia.log: Arquivo ou diretorio nao encontrado > mas o arquivo existe. E o usuário que está executando o script de backup possui permissões para acessar o diretório *e* o arquivo? Ele deve ter permissões de leitura e execução no diretório, no mínimo, para o stat. Sds, -- Godoy. . ********************************************************************* De: Rodrigo Monteiro Para: linux-br@bazar2.conectiva.com.br Assunto: (linux-br)help com um script Data: Mon, 14 Mar 2005 11:22:08 -0800 (PST) no meu script tenho o seguinte comando. ls /usr/local/jabber-1.4.2/spool/im.ceara.gov.br/ | cut -d. -f1 | uniq -c | awk '{print "" $2 "" $1 ""}' >> usuarios_$dia-$mes-$ano.htm a saida dele eh essa: ============ ... 142 srh 66 sspds 146 tce 2 tcm 24 tvceara ... ============= o que eu queria era ordenar a saida por essa primeira coluna decrescente, ou seja, queria que a saida fosse assim: ============ ... 142 srh 146 tce 66 sspds 24 tvceara 2 tcm ... ============= alguem poderia me ajudar?? De: André Mariano Responder A: andremariano@brfree.com.br Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)help com um script Data: Mon, 14 Mar 2005 17:20:39 -0300 ls /usr/local/jabber-1.4.2/spool/im.ceara.gov.br/ | cut -d. -f1 | uniq -c | awk '{print "" $2 "" $1 ""}' | sort -nr +0 >> usuarios_$dia-$mes-$ano.htm De: Flavio do Carmo Junior Para: Rodrigo Monteiro , linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)help com um script Data: Mon, 14 Mar 2005 18:21:23 -0200 Bom, sem testes eu diria: (toda a sua parafernalia) | sort | tac ou (toda a sua parafernalia) | sort -r ;) sort = ordena tac = inverte a ordenação drkn Sem mais, Flavio do Carmo Junior Depto. de Informática Roberto Cervellini & Cia Ltda. (18) 2101 - 1111 De: André Mariano Responder A: andremariano@brfree.com.br Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)help com um script Data: Mon, 14 Mar 2005 17:37:07 -0300 o sort ordena por padrão em ordem numérica. o parâmetro -n deve ser informado para que a ordenção seja feita em ordem numérica. Em Seg 14 Mar 2005 17:21, Flavio do Carmo Junior escreveu: > Bom, sem testes eu diria: > (toda a sua parafernalia) | sort | tac > ou > (toda a sua parafernalia) | sort -r > De: André Mariano Responder A: andremariano@brfree.com.br Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)help com um script Data: Mon, 14 Mar 2005 17:19:25 -0300 isso ai vai funcionar. ls /usr/local/jabber-1.4.2/spool/im.ceara.gov.br/ | cut -d. -f1 | uniq -c | awk '{print "" $2 "" $1 ""}' | sort -nr +0 >> usuarios_$dia-$mes-$ano.htm Em Seg 14 Mar 2005 16:22, Rodrigo Monteiro escreveu: > no meu script tenho o seguinte comando. > > ls /usr/local/jabber-1.4.2/spool/im.ceara.gov.br/ | > cut -d. -f1 | uniq -c | awk '{print " align=left>" $2 > " size=2>" $1 ""}' >> > usuarios_$dia-$mes-$ano.htm > > a saida dele eh essa: > > ============ > ... > 142 srh > 66 sspds > 146 tce > 2 tcm > 24 tvceara > ... > ============= > > o que eu queria era ordenar a saida por essa primeira > coluna decrescente, ou seja, queria que a saida fosse > assim: > > ============ > ... > 142 srh > 146 tce > 66 sspds > 24 tvceara > 2 tcm > ... > ============= > > alguem poderia me ajudar?? ********************************************************************* De: André Geraldo Vieira Responder a: andregerald@terra.com.br Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br) executar script Data: Wed, 26 Jul 2006 17:27:48 +0000 (14:27 BRT) Em 26/07/06, Rangel Torrezan - Free Open escreveu: > Bom dia Senhores, > > Estou precisando fazer com que um script meu seja executado de > qualquer pasta que estiver. > > Tenho um script no seguinte local: /etc/squid/script.sh > > Gostaria de estar podendo executar este script de qualquer pasta. > > como da para fazer isso?? Uma solução que eu utilizo aqui é editar o meu .bash_profile e definir a variável $PATH como PATH=$PATH:$HOME/bin. Depois eu crio um diretório bin no meu diretório home. E dentro do ~/bin eu coloco meu scripts. No seu caso você pode criar um link do seu script para dentro de seu ~/bin. -- Diga não a Exclusão Digital!! Valorize o Código Aberto!! Incentive o Software Livre!! Não Seja Pirata, Seja Livre!! Por que GNU/Linux? "Somente pelo Prazer de ser LIVRE..." ********************************************************************* De: cgfreita Responder a: cgfreita@netsite.com.br Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br) Como gerar um número randômico Data: Thu, 19 Apr 2007 21:45:03 -0300 On Thu, 19 Apr 2007 19:22:07 -0300 "Nelson Ramos" wrote: > Preciso gerar um número inteiro randômico de 8 dígitos usando o > bash. Não sei se vai servir, mas pode ser um bom ponto de partida: http://www.tldp.org/LDP/abs/html/randomvar.html#EX21 Citou que gostaria de uma solução em bash, mas disse que testou outras linguagens, assim, poderia tentar algo do tipo: #!/usr/bin/perl $t=0; while ( $t++ < 50 ) { printf ( "%08d\n", int(rand(99999999)) ); } Não testei as opções do bash, mas o script em Perl parece funcionar razoavelmente bem. Espero que ajude. Obrigado. Freitas De: Alfredo Júnior Para: Nelson Ramos Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br) Como gerar um número randômico Data: Thu, 19 Apr 2007 22:06:27 -0300 Nelson Ramos escreveu: > Preciso gerar um número inteiro randômico de 8 dígitos usando o bash. > > Alguém sabe algum comando ou "mini-script" para a realização dessa tarefa? > Experimente: od -An -N3 -i /dev/random *********************************************************************