1 - http://www.linuxjournal.com/article/9891
Site sobre software livre, cultura, arte, gimp, inkscape, wallpapers, vim, firefox, python, e-books, algoritmos, openoffice, ubuntu, debian, gnome, inkscape, bash, shell script, música, arte, mpb, dicas em geral, Geopolítica, politica, brasil, blogsfera, ativismo, rock, english
Mostrando postagens com marcador shell_script. Mostrar todas as postagens
Mostrando postagens com marcador shell_script. Mostrar todas as postagens
Bash: Um script para interagir com o comando bc
O comando bc, ou "an arbitrary precision calculator language" é bastante precisa desde que o usuário use a opção scale=2, onde 2 corresponde à precisão do calculo pedido. Outro problema é que você tem que entrar literalmente no bc para interagir com ele, mas no site do LinuxJournal[1] há um artigo sobre como interagir com o bc de forma transparente. Na minha ânsia por aprendizado sobre shell script criei o script abaixo que tenta trazer uma solução para o problema baseado no referido artigo, só que eu estou com um problema, estou sem computador, e no trabalho só tem a porcaria do windows, gostaria que a galera olhasse esse código, testasse e também propusesse soluções similares ou melhores, tipo uma calculadora em python para a linha de comando com a qual pudéssemos interagir e usar em outros scripts, segue portanto o script:
Bash: Função para subir na árvore de diretórios
A função abaixo será adicionada em breve ao meu ~/.bashr, é que por esses
dias estou sem computador
dias estou sem computador
Bash: Checking Availability of commands
Uma tarefa comum no dia-a-dia de quem faz scripts e testar a existência de comandos, fuçando pela Internet descobri o comando hash que tem a vantagem de ser built-in, ou seja faz parte do próprio bash
Referências:
http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script
http://wiki.bash-hackers.org/scripting/style
Referências:
http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script
http://wiki.bash-hackers.org/scripting/style
Sed - ame-o ou deixe-o
separando o ultimo campo de um caminho
O problema
Galera, preciso pegar o ultimo campo. Vou explicar, tenho as linhas /dados/teste/uu/eu.sh /dados/eu/eu.log /nfs/bin/cp preciso separar o que é o full path e o que é o arquivo. Tipo: full=/dados/teste/uu/ arq=eu.sh full=/dados/eu/ arq=eu.log e por ai vai.
A solução
sed -i.backup -r 's,(.*/)(.*),full=\1 \narq=\2,' arquivo
use '-i' para alterar diretamente o arquivo com o sed, com -i.backup ele gera um backup antes troquei o delimitador para não confundir com as barras veja sed - r ............. expressões regulares extendidas (.*/) ......... grupo 1 tudo até a ultima barra (.*) .......... grupo 2 nome do arquivo \1 ............ coloca o grupo 1 no local indicado \2 ............ coloca o grupo 2 no local indicado \n ............ note o \n antes de 'arq='
Bash: Testando strings
Para testar se uma string é vazia:
Podemos usar um par de colchetes "[ ]" substituindo assim o nome 'test' e um opcional "||"
este recurso é bom para o caso em que você quer testar uma variável e caso não exista
tal valor você pode defini-lo, no caso abaixo fazemos melhoramentos no ~/.bashrc de modo
a habilitar o "ignore-case" bash completion, a possibilidade de usar apenas um [TAB] na complementação de comandos bem como a correção do nome de pastas digitados com pequenos erros
no comando cd.
No script abaixo, se o grep retornar vazio ele colocará as opções
no ~/.bashrc
Evitando erros no comando teste - sempre coloque sua string entre aspas
avoid erros. Always put your string between quotation marks
Observe que a string que está sendo testada deve estar dento de aspas duplas ou simples, já que o comando test, veja que o comando grep está envolvido em crases fazendo o que chamamos de
`substituição de processos`, retornando na sua posição a saida do comando propriamente dito, tudo isto é então envolvido em aspas duplas.
Vejamos um exemplo em que a falta de apas gerou um erro:
http://www.mail-archive.com/redhat-list@redhat.com/msg69853.html
O erro citado no link acima foi:
test -z "string" # testa string
echo $? # retorna 1 para string não vazia
1 # valor de retorno, indica que a string não é vazia
test -n "string" # testa se a string é "não vazia"
Podemos usar um par de colchetes "[ ]" substituindo assim o nome 'test' e um opcional "||"
[ -z "string" ] || echo "string não vazia"
# ou a pasta existe ou será criada dinamicamente, no final acabamos dentro dela.
[ -d casa ] || mkdir casa ; cd casa
uma lista bem completa de opções que peguei aqui:
Testes em variáveis:
-lt Número é menor que (LessThan)
-gt Número é maior que (GreaterThan)
-le Número é menor igual (LessEqual)
-ge Número é maior igual (GreaterEqual)
-eq Número é igual (EQual)
-ne Número é diferente (NotEqual)
= String é igual
!= String é diferente
-n String não é nula
-z String é nula
Testes em arquivos:
-d É um diretório
-f É um arquivo normal
-s O tamanho do arquivo é maior que zero
-r É arquivo tem permissão de leitura
-w O arquivo tem permissão de escrita
-nt O arquivo é mais recente (NewerThan)
-ot O arquivo é mais antigo (OlderThan)
-ef O arquivo é o mesmo (EqualFile)
este recurso é bom para o caso em que você quer testar uma variável e caso não exista
tal valor você pode defini-lo, no caso abaixo fazemos melhoramentos no ~/.bashrc de modo
a habilitar o "ignore-case" bash completion, a possibilidade de usar apenas um [TAB] na complementação de comandos bem como a correção do nome de pastas digitados com pequenos erros
no comando cd.
No script abaixo, se o grep retornar vazio ele colocará as opções
no ~/.bashrc
Evitando erros no comando teste - sempre coloque sua string entre aspas
avoid erros. Always put your string between quotation marks
Observe que a string que está sendo testada deve estar dento de aspas duplas ou simples, já que o comando test, veja que o comando grep está envolvido em crases fazendo o que chamamos de
`substituição de processos`, retornando na sua posição a saida do comando propriamente dito, tudo isto é então envolvido em aspas duplas.
Vejamos um exemplo em que a falta de apas gerou um erro:
http://www.mail-archive.com/redhat-list@redhat.com/msg69853.html
O erro citado no link acima foi:
./test.sh: [: too many arguments
O motivo é simples o comando test recebe apenas um parâmetro e o camarada estava fazendo assim:
if [ -n `mount |grep "/mnt/root/cschomeserver/e"` ] #if it's already mounted don't
mount it
then PREMOUNTED='YES' && echo "is mounted" #If it's already mounted set a var
else echo "mount /mnt/root/cschomeserver/e is not mounted" #if it's not mounted,
mount it.
fi
Note que o comando 'mount' jundo com o redirecionamento provavelmente retornará várias colunas
e que as mesmas não estão englobadas entre aspas. Compare com o nosso exemplo acima.
Dicas do comando date no meu wiki
Querido comando date, me diga o nome do dia da semana de dois dias atráz
O date também lhe diz se hoje é o último dia do mês
Adiante o relógio do sistema em 30 minutos
Bom, visitem o wiki neste link: http://linuxdicas.wikispaces.com/date. ou http://linuxdicas.wikispaces.com/comandos-linux
date --date='2 days ago' +%A
O date também lhe diz se hoje é o último dia do mês
[ `date --date='next day' +'%B'` == `date +'%B'` ] || echo 'end of month'
Adiante o relógio do sistema em 30 minutos
# date --set='+30 minutes'
Bom, visitem o wiki neste link: http://linuxdicas.wikispaces.com/date. ou http://linuxdicas.wikispaces.com/comandos-linux
Sed - Formatando campos de datas
Perguntinha postada no grupo sed-br no yahoo:
My solution:
Pessoal,
Tenho um arquivo com formato de data que esta da seguinte maneira
2009-09-29
20090813
20070715
2008-09-15
e quero que ele tenha os hifens "-" onde nao tem, pra sair com a seguinte
formataçao:
2009-09-29
2009-08-13
2007-07-15
2008-09-15
Agradeço desde ja,
Moroni Vieira
My solution:
sed -i.backup -r 's/(^[0-9]{4})-?([0-9]{2})-?([0-9]{2})$/\1-\2-\3/g' file
Os díditos são agrupados entre parênteses para poder-mos usar os retrovisores, ou back reference \1 \2 \3, já os hifens são opcionais por conta da
interrogação. OBS: Para não ter que usar um monte de escapes "\" use a opção '-r' do
sed.
tar - extraindo somente um arquivo
Se você tem um pacote tar.gz assim:
Para extrair somente o arquivo faça:
Referências: http://serverfault.com/questions/30485/un-tar-a-specific-directory-inside-of-a-tar
pacote.tar.gz ---> pasta/arquivo.sh
Para extrair somente o arquivo faça:
tar zxvf pacote.tar.gz --strip 1
Referências: http://serverfault.com/questions/30485/un-tar-a-specific-directory-inside-of-a-tar
txt2html.sed by Thobias Salazar Trevisan
Achei muito legal e resolvi compartilhar com vocês, um script sed que converte arquivos txt em páginas html. http://thobias.org/bin/txt2html.sed.html
Não deixe de olhar o link bin do mesmo autor:
http://thobias.org/bin/
Não deixe de olhar o link bin do mesmo autor:
http://thobias.org/bin/
Divertindo-me com o awk
echo "Enter ID: "
read ID
awk -v ID=$ID 'NR==14{ print ID}{print}' "file"
# assim dá pra usar o argv para passar alguns parâmetros no script
awk 'BEGIN {print ARGV[5]}' 1 2 3 4 5 6 7
awk 'BEGIN {print ARGV[5] "\n" ARGV[3]}' 1 2 3 4 5 6 7
awk -v sq=`pwd` 'BEGIN {print "você está em " sq}'
Probleminha com awk
Imagine que você tem este arquivo:
E deseja mostrar apenas os valores negativos
Indicamos duas alternativas para o Separador de Registros, vírgula ou quebra de linha ", | \n" assim ele considera cada valor como sendo uma linha, em seguida usamos uma expressão regular para pegar o começo de linha com o sinal de menos.
A inspiração para este post veio deste excelente blog.
-5232,-92338,84545,34
-2233,25644,23233,2
6211,-1212,4343,43
-2434,621171,9121,-33
E deseja mostrar apenas os valores negativos
awk 'BEGIN {RS=",|\n"}; /^-/ {print}' file.txt
Indicamos duas alternativas para o Separador de Registros, vírgula ou quebra de linha ", | \n" assim ele considera cada valor como sendo uma linha, em seguida usamos uma expressão regular para pegar o começo de linha com o sinal de menos.
A inspiração para este post veio deste excelente blog.
RT Calculadora no #bash
Este post está com cara de #twitter poque foi pego de lá, como tudo que posto aqui vai pra lá também ...
@jfca_ca Create an Awesome Command Line Calculator http://bit.ly/36JUKv (via feedly) #bash
que tal fazer um calculo assim no bash?
@jfca_ca Create an Awesome Command Line Calculator http://bit.ly/36JUKv (via feedly) #bash
que tal fazer um calculo assim no bash?
Testando seu comando antes de executa-lo com o echo
Eu queria fazer uma remoação e resolvi testar antes
Outra dica legal é colocar comentários nos comandos complicados, isso mesmo, direto no prompt do bash. Mas em que isto lhe ajuda? Vou dar um exemplo.
Se amanhã eu não lembrar o nome "speaker-test..." bastará fazer
echo conf-sys.[2-3]*depois fiz apenas a substituição do echo pelo "rm -f"
^echo^rm -f
speaker-test -twav -c2 # consertando o som no ubuntu
Se amanhã eu não lembrar o nome "speaker-test..." bastará fazer
history | grep ubuntu
Doses homeopáticas de shell script
Como eu faço para ver, e tão somente ver, como foi a execução do meu ultimo rsync sem que eu tenha que usar o history | grep rsync?
!rsync:p
Se eu digitei:
!rsync:p
Se eu digitei:
rsync -avz --update --delete ./ coordenador@10.3.0.154:/home/coordenador/dvd-viagem/
e o ip da máquina não terminava com 154 como trocar por 175?
^154^175
Veja também como habilitar o magic space no bashrc
Apagando arquivos de hoje de uma pasta
Sei que a maioria dos leitores do blog já sabem usar o find com todas as suas firulas, mas vez por outra devemos dar uma colher de chá para os novatos, não é mesmo?
Lembre-se que este comando é recursivo, caso não deseje este comportamento faça assim
No caso acima não estou apagando mas apenas listando o que foi criado hoje
e tão somente na pasta atual, a opção "-maxdepth" controla o nível de profundidade sobre o qual o find vai atuar.
Obs: se você omitir o caminho de buscas o find irá buscar na pasta atual, outra coisa, se não estiver lembrando como se escreve uma opção o find tem um "table complete" interno, ou seja, se você digitar -max[tab] elel digita o restante pra você.
find ./ -ctime -1 | xargs rm -rf
Lembre-se que este comando é recursivo, caso não deseje este comportamento faça assim
find ./ -maxdepth 1 -ctime -1
No caso acima não estou apagando mas apenas listando o que foi criado hoje
e tão somente na pasta atual, a opção "-maxdepth" controla o nível de profundidade sobre o qual o find vai atuar.
Obs: se você omitir o caminho de buscas o find irá buscar na pasta atual, outra coisa, se não estiver lembrando como se escreve uma opção o find tem um "table complete" interno, ou seja, se você digitar -max[tab] elel digita o restante pra você.
Assinar:
Postagens (Atom)
linux-cookbook
|
|
| Participe do grupo linux-cookbook |
| Visitar este grupo |