http://www.zago.eti.br/script/scripts-dicas.txt Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tópicos. ******************************************************** Zago http://www.zago.eti.br/menu.html FAQ e artigos sobre Linux Com seu editor de texto preferido, crie o script iniciando com a linha: #!/bin/bash Acrescente os comandos, salve e saia. Precisa do chmod para tornar o script executável, algumas opções: chmod a+x teste.sh chmod +rwx teste.sh chmod 777 teste.sh Qualquer opção acima torna o script executável mas tem efeitos diferente, veja no manual (man chmod) para opções de grupo, umask ... Para executar, quando no path basta digitar o nome do script e enter, quando se encontra no diretório local do comando precisa anteceder com "./" (ponto+barra+nomescript), ou sh, ou source exemplos: ./teste.sh sh teste.sh source teste.sh . teste.sh Neste ultimo é ponto espaço script Ou coloque o script em algum diretório do path, neste caso digite somente o nome do script Também funciona se colocar o ponto no path, mas nunca faça isto para não comprometer a segurança, executar acidentalmente script local, por isto a condição de executar algo antes para indicar que realmente deseja executar tal script. ******************************************************** Testar a condição, exemplo pra testar se está executando o script como root. 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 Este script cria usuário, precisa passar como parametro o nome do novo usuário e senha, para o script com nome caduser, pra criar o usuário zago com a senha minhasenha, a linha de comando ficaria assim: sh caduser zago minhasenha ******************************************************** Resultado do comando Pra cada comando executado em shell tem um codigo de retorno, útil em script pra conferir se falhou ou foi executado com sucesso, este resultado fica armazenado na variavel $?, ele muda a cada comando, tanto faz se foi na linha de comando ou dentro do script, pra cada comando esta variavel é atualizada, "echo $?" sempre exibirá o resultado do ultimo comando. Retornando: 0 (zero) significa que o comando anterior foi executado com sucesso. 1 (um) e qualquer valor diferente de zero ( != 0) indica que ocorreu algum erro. 2 erro nos comandos do script, geralmete erro de sintaxe, digitação, 127 = command not found, pra quando digita comando não existente. Exemplos: [zago@faqcl10 tmp]$ touch meuteste [zago@faqcl10 tmp]$ echo $? 0 [zago@faqcl10 tmp]$ ls meusdoc ls: meusdoc: Arquivo ou diretório não encontrado [zago@faqcl10 tmp]$ echo $? 1 [zago@faqcl10 tmp]$ ls meuteste [zago@faqcl10 tmp]$ echo $? 0 Explicando: retornou 1 (um) quando falhou o comando "ls meusdoc" e retornou zero para os demais comandos que foram executados sem problemas. Cuidado pra não repetir "echo $?" porque ele também é um comando e altera o retorno, portanto vale somente o primeiro "echo $?" depois do comando. Script pra testar esta condição: cat /tmp/testar #!/bin/bash mkdir /tmp/teste if [ $? -eq 0 ];then echo $? echo "comando executado com sucesso!" else echo $? echo "falha na execução do comando." exit fi Neste exemplo a linha "if [ $? -eq 0 ]" verifica o retorno do comando "mkdir /tmp/teste" pra saber se o seu mkdir foi bem sucedido ou não. Na primeira vez que executar retorna zero, depois passa a retornar 1 porque o diretório já existe. ******************************************************** De:  Dicas-L-Owner@unicamp.br Assunto:  [Dicas-L] Programação Shell: FISL - Comentários Data:  Tue, 24 Jun 2003 02:28:57 -0300 -------------------------------------------------------------------- Endereço: http://www.Dicas-l.com.br/dicas-l/20030624.shtml --------------------------------------------------------------------          I Seminário de Desenvolvimento em Software Livre     14 a 18 de julho - Unisinos - São Leopoldo - Rio Grande do Sul        Mais informações: http://www.inf.unisinos.br/sdsl ------------------------------------------------------------------------   Programação Shell: FISL - Comentários   ===================================== Colaboração: Pedro Zorzenon Neto Acho que vale a pena ressaltar que em shell, na grande maioria dos casos, o código de saída é 0 para sucesso e diferente de 0 para falha. No caso de ser diferente de 0, o número corresponde ao tipo de falha encontrado. Ex: o ipchains retorna:   0 para sucesso   2 para erros devidos a parametros incorretos na linha de comando,   3 para erros de kernel (kernel não compilado com ipchains),   1 para outros erros (falta de permissão, etc...) Então, caso você queira saber se um programa terminou com sucesso:   if [ $? == 0 ]; then   some commands...   fi E se quiser saber se ele terminou com falha, não compare com 1, mas sim compare com diferente de 0.   if [ $? != 0 ]; then   some commands...   fi Outra dica relacionada com o código de saída, é o '||' e o '&&'. O simbolo '||' executa apenas se o comando anterior falhar. o símbolo '&&' executa apenas se o comando anterior teve sucesso. Ex:   # executa o comando 'cd'. se NÃO CONSEGUIU executar o   # comando 'cd', então executa o 'mkdir'   cd algumdiretorio || mkdir algumdiretorio     # executa o comando 'cd'. se CONSEGUIU executar o   # comando 'cd', então executa o 'touch'   cd algumdiretorio && touch meuarquivo Estas dicas anteriores foram testadas no "bash". Provavelmente funcionarão em outros tipos de "shell". Um guia muito bom sobre "bash" pode ser encontrado em: Advanced Bash-Scripting Guide http://www.tldp.org/guides.html#abs --------------------------------------------------------------- As mensagens da lista Dicas-L são veiculadas diariamente para 21684 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. --------------------------------------------------------------- ******************************************************** De:  Claudio Polegato Junior Para:  Lista de Linux Assunto:  (linux-br)[Fwd: Explicar script de backup] Data:  Thu, 5 Aug 2004 09:32:46 -0300 (BRT) Olá Devai,   Explicando o "echo", o ">" e o ";":   O "echo" escreve na saída padrão o que vem a seguir dele, sendo que a opção "-e" interpetrará códigos de escape, os quais não são possíveis de serem colocados na linha de comando, como os caracteres que não possíveis de serem colocados nos programas em C e C++. Dessa forma: \x21 = ! (reservado na linha de comando) \n = pular linha sem o \r (retorno de carro - máquina de escrever) \x60 = ` (acento grave)   O ">" redireciona o vai para a saída padrão para um arquivo.   O ";" serpara dois comando que serão executados na seqüencia. Pode-se ver mais sobre isso utilizando o "||" onde o segundo somente será executado se o primeiro não retornar erro (erro = retorno diferente de zero). Neste caso o ";" também poderia ser substituído por "&&". Assim "||" é um operador lógico "OU" e "&&" é um operador lógico "E", notado que ";" simplemente separado dois comandos de linha, mais ou menos como programas em C, C++, Pascal e outros. []'s Claudio -------------------------------- Mensagem Original -------------------------------- Eu vi esta mensagem, na lista, alguem poderia explicar detalhando o que sao esses comandos, acredito que outros tambem gostariam de saber o que é ? echo -e "#\x21/bin/bash\n\ntar -zcvf /mnt/hdb1/emails-\x60date +%d%m%y\x60.tar.gz /var/spool/mail\n" > backup ; chmod +x backup DEVAIR ******************************************************** De:  Marcus Lima Responder-a:  marcuslima@marcuslima.eti.br Para:  Tekko , linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)Como fazer esse Script em bash? Data:  Fri, 09 Apr 2004 09:25:08 -0300 Olá Tekko, Gostei do desafio, não foi muito simples reproduzir o problema em laboratório! Seguinte, entre com o vi no arquivo e veja se não existe um ^M no final da linha USER. O ^M significa um carrige-return (\r) e isso faz com que sempre que ele imprima o usuário, o cursor retorne para o início da linha e imprima a segunda linha, no caso a SENHA. Isso _geralmente_ acontece quando trazemos arquivos do Windows para o Linux. Solução: utilize o comando dos2unix no seu arquivo para formatar o final de linha corretamente. Simulação do problema em Laboratório: $ echo -e USER testando.user\\r > arquivo $ echo -e PASS 123456\\r >> arquivo $ USER=`grep USER arquivo | cut -c 6-50` $ SENHA=`grep PASS arquivo | cut -c 6-50` $ echo $USER testando.user $ echo $SENHA 123456 $ echo $USER,$SENHA ,123456o.user Explicando: O echo -e habilita a interpretação de barra invertida, possibilitando fazer o carrige-return no final da linha utilizando \\r Att, Marcus Lima. ******************************************************** De:  Claudio Polegato Junior Para:  Guilherme L. Stolfo Cc:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)1>/dev/null 2>/dev/null & Data:  Fri, 20 Aug 2004 02:50:50 -0300 (BRT) Olá, O sinal de ">" (ou "<") indica redirecionamento, assim você está redirecionando tudo que sai do programa testa.php para o descrito de arquivo 1, o qual é a saída texto padrão para o "arquivo" /dev/null. Acontece a mesma coisa o descrito de arquivo 2, o qual é a saída padrão de erro. O & no final significa que o programa irá funcionar em "background", isto é, sua execução não vai interromper a execução em andamento. []'s Claudio > Galera alguem saberia explicar o que seria isso  "1>/dev/null > 2>/dev/null" nunca usei isso no shell alguem ja usou? > exec("testa.php 1>/dev/null 2>/dev/null &"); ******************************************************** De:  Thiago Macieira Para:  linux-br@bazar2.conectiva.com.br Assunto:  Re: (linux-br)1>/dev/null 2>/dev/null & Data:  Thu, 19 Aug 2004 22:45:03 -0300 Guilherme L. Stolfo wrote: >Galera alguem saberia explicar o que seria isso  "1>/dev/null >2>/dev/null" nunca usei isso no shell alguem ja usou? > >exec("testa.php 1>/dev/null 2>/dev/null &"); > >isso é um trecho de um sistema que estou mechendo... e ele esta > fazendo isso ai em cima.. Veja só: sua mensagem é de 14:45. Estou respondendo às 22:40. Espero que não tenha ficado no aguardo até agora. Resposta curta: man bash REDIRECTION        Before a command is executed, its input and output  may  be redirected        using  a  special  notation  interpreted by the shell. [...]    Redirecting Output        Redirection  of  output  causes  the  file  whose name results from the        expansion of word to be opened for writing on file descriptor n, or the        standard output (file descriptor 1) if n is not specified.  If the file        does not exist it is created; if it does exist it is truncated to  zero        size.        The general format for redirecting output is:               [n]>word Em outras palavras, o "1>/dev/null 2>/dev/null" redireciona os "file descriptors" 1 e 2 para /dev/null. Lembro que 1 é o stdout e 2 é o stderr. --   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: Claudio Polegato Junior Para: mrodrigom@gmail.com Cc: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)comando similar ao pause do dos Data: Fri, 11 Mar 2005 11:53:44 +0000 Olá, Use read -en 1. Para mais informações procure em man read (produre por read no man que ele traz o man do bash) -- []'s Claudio Polegato Junior Um peregrino de Problemas; Um pergaminho de Soluções. ******************************************************** De: scsantos at unigranrio com br Para: linux-br@bazar2.conectiva.com.br Assunto: Re: (linux-br)backup incompleto Data: Fri, 11 Feb 2005 15:10:17 -0200 Olá, tivemos um membro da lista sofrendo com isto. Pegue os seus comandos tar no script e direciona a saída padrão (> /home/Backup.log) para um arquivo para ver o motivo do abort e aí terá um ponto de partida. Com esta solução o amigo David Louback resouveu seu problema tb ligado a script de backup. Um fraterno abraço e um próspero 2005!!! 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 ******************************************************** ********************************************************