Agendando o download do kurumin
Comandos built-in
Comandos built-in são tratados pelo próprio shell do sistema e portanto são muito mais rápidos veja dois exemplos
o comando cd e os redirecionamentos >
Criando um arquivo com comando built-in:
Busca no bash usando regex
if [[ $RESPONSE =~ ^(sim|s|yes|y) ]] ; {
read -p " Digite o nome do usuário para o proxy: " USUARIO
read -p " Digite a senha para o proxy: " SENHA
}
chris@kermit ~ $ experiment=supercall2345i7fragilisticexpi6a7lad22o3c5ious
chris@kermit ~ $ echo ${experiment//[0-9]/}
supercallifragilisticexpialadocious
chris@kermit ~ $ echo ${experiment//[^0-9]/}
23457672235
Comandos auxiliares
Fonte: http://pjtsalina.codigolivre.org.br/doc/linux/revistadolinux/016/comandos.html
Fora do shell podemos usar comandos muito poderosos como grep, sed, tr, mail, expr, bc e outros
Comandos auxiliares são comandos que não pertencem ao shell, mas são praticamente encontrados em quase todas as distribuições. Nesta edição vamos conhecer alguns comandos auxiliares que podem nos ajudar muito no dia-dia.
O grep pesquisa nos arquivos de entrada ou na entrada-padrão as linhas que contenham as expressões solicitadas. Exemplo:
- grep edison /etc/passwd
edison:x:500:500:Edison Figueira Junior:/home
/edison:/bin/bash
O comando acima leu o arquivo /etc/passwd linha por linha e quando a expressão edison foi encontrada, ela foi impressa no stdout (tela). Vamos supor que queremos listar todos os usuários do /etc/passwd que iniciam com o caractere g. Com o caractere ^ no começo da expressão isso é possível:
- grep ^g /etc/passwd
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
Se quisermos listar todas as linhas que terminem com e temos de acrescentar o caractere $ no final da expressão.
- grep e$ /etc/passwd
named:x:16:234:Domain name server:/tmp:/bin/false
xfs:x:17:17:X Font Server:/etc/X11/fs:/bin/false
lili:x:501:231:Eliane Cristina:/home/lili:/bin/false
Podemos também obter a saída do resultado inverso da pesquisa. Exemplo: se você quiser todas as linhas que não terminem com bash, escreva assim:
- grep -v bash$ /etc/passwd
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
E é claro que podemos utilizar um grep dentro de outro através de pipes.
- grep -v bash$ /etc/passwd | grep -v spool
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
lp:x:4:7:lp:/var/spool/lpd:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
O sed é um comando que serve para alterar uma stream de um arquivo ou de sua entrada-padrão (STDIN). Exemplo:
- echo "seja livre use linux" |sed -e s/linux/LINUX/ seja livre use LINUX
Esse comando procurou a expressão linux e a trocou para LINUX.
Agora vamos ver um exemplo bem mais útil, imagine que você precise enviar um e-mail personalizado para cada usuário agradecendo o seu empenho em um determinado projeto. Com o comando sed isso é bem fácil, precisamos editar o texto e no lugar do nome do usuário devemos colocar um marcador para cada substituição. Exemplo: edite um texto agradece.txt com o seguinte conteúdo:
Sr(a) USUARIO,
A Linux Corporation agradece o empenho oferecido ao projeto Software Livre.
Saiba que todos nós ganhamos com seu apoio...
Linus Torvalds
Depois que o texto estiver pronto, você poderá executar o seguinte comando:
# for usuario in ‘cat /etc/passwd |awk -F":" ‘{print $1}’‘; do sed -e s/USUARIO/$usuario/ agradece.txt| mail -s "Agradecimento" $usuario ;done
O marcador "USUARIO" será substituído pelo login de cada usuário e o resultado retornado pelo sed será conectado ao STDIN do mail. Esse exemplo funciona como uma mala-direta, mais adiante vamos utilizar o sed em scripts.
Para ver o resultado sem enviar o e-mail retire o comando mail e desvie a saída para um arquivo txt. Exemplo:
# for usuario in ‘cat /etc/passwd |awk -F":" ‘{print $1}’‘; do sed -e s/USUARIO/$usuario/ agradece.txt >$usuario.txt ;done
Vamos agora conhecer e praticar o uso do comando tr. Ele serve para alterar ou deletar caracteres de uma string. Exemplo:
- echo "seja livre use linux" | tr a-z A-Z SEJA LIVRE USE LINUX
Um bom exemplo do tr pode ser a conversão de nomes de arquivos de minúsculas para maiúsculas ou vice-versa.
[~/exemplo #]ls
aaa bbb ccc
- for arquivo in * ; do OLD=$arquivo ; NEW=‘echo $OLD |tr a-z A-Z‘; mv -f $OLD $NEW 2>/dev/null; done
[~/exemplo #]ls
AAA BBB CCC
Poderíamos ter substituído apenas um caractere, mas eu quis trocar todos para mostrar que podemos usar um range de caracteres, mas um range de dígitos também é aceito. Exemplo: 0-9.
O shell não possui internamente nenhuma função aritmética, para isso utilizamos os comandos auxiliares bc e expr. Se você precisa fazer cálculos de inteiros, pode utilizar o comando expr, mas se seu cálculo possui ponto flutuante, é necessário usar o bc. O awk também pode fazer cálculos, porém ele é um pouco pesado para ser utilizado somente nisso. Vamos ver alguns exemplos:
- expr 1 + 3
4
- expr 1+3
1+3
Note que para realizar cálculos com expr você precisa deixar um espaço em branco entre o operador e os algarismos.
- expr 5 * 2
expr:syntax error
- expr 5 \* 2
10
Observe que para realizar operações de multiplicação, temos de colocar uma barra invertida antes do operador *. Os operadores válidos para expr são:
/ divisão
% módulo
+ adição
- subtração
Para atribuir valores às variáveis utilize os caracteres de substituição de parâmetros.
- VALOR=‘expr 10 \* 2‘
- echo $VALOR
20
O bc calcula uma expressão através do STDIN. Exemplo:
- echo "13 / 2" |bc
6
Observe que o resultado foi inteiro (6). Para obter resultados com ponto flutuante, é preciso setar a escala de ponto decimal. Essa escala representa a quantidade de dígitos que queremos depois do ponto. Exemplo:
- echo "scale=2; 13 / 2" |bc
6.50
Também podemos atribuir os valores retornados para uma variável através de substituição de parâmetros.
- VALOR=‘echo "scale=2; 13 / 2" |bc‘
echo $VALOR
6.50
Até a próxima edição.
Veja também
Comments (0)
You don't have permission to comment on this page.