Sistemas‎ > ‎Linux‎ > ‎

Shell Script

Fonte: http://aurelio.net/shell/canivete.html
Fonte: http://aurelio.net/shell/miniman/

Canivete Suíço do Shell (Bash)

Aurélio Marinho Jargas

2003-2010

Este Canivete Suíço do Shell é um apêndice do meu livro Shell Script Profissional. O livro é enorme, são quase 500 páginas de puro shell, explicado de maneira clara e didática. Você vai dominar o assunto, além de aprender a escrever programas de verdade em vez de meros scripts toscos. Sou escritor e ganho a vida com meus livros, então comprando o livro você também me ajuda a manter esse site no ar e assim eu continuo escrevendo para você ler. Combinado? :)
  1. Operadores
  2. Redirecionamento
  3. Variáveis especiais
  4. Expansão de variáveis
  5. Blocos e agrupamentos
  6. if, for, select, while, until, case
  7. Opções do comando test ou [
  8. Escapes especiais para usar no prompt (PS1)
  9. Escapes reconhecidos pelo comando echo
  10. Formatadores do comando date
  11. Formatadores do comando printf
  12. Letras identificadoras de arquivos no comando ls -l
  13. Curingas para nomes de arquivo (glob)
  14. Curingas para os itens do comando case
  15. Sinais para usar com trap/kill/killall
  16. Códigos de retorno de comandos
  17. Códigos de cores (ANSI)
  18. Os metacaracteres das expressões regulares
  19. Metacaracteres que são diferentes nos aplicativos
  20. Caracteres ASCII imprimíveis (ISO-8859-1) - texto
  21. Caracteres ASCII imprimíveis (ISO-8859-1) - imagem
  22. Códigos prontos para copiar e colar
  23. Atalhos da linha de comando (set -o emacs)
  24. A caixa de ferramentas do shelleiro

1. Operadores

Operadores Aritméticos
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo
** Exponenciação
Operadores de Atribuição
= Atribui valor a uma variável
+= Incrementa a variável por uma constante
-= Decrementa a variável por uma constante
*= Multiplica a variável por uma constante
/= Divide a variável por uma constante
%= Resto da divisão por uma constante
++ Incrementa em 1 o valor da variável
-- Decrementa em 1 o valor da variável
Operadores Relacionais
== Igual
!= Diferente
> Maior
>= Maior ou Igual
< Menor
<= Menor ou Igual
Operadores Lógicos
&& E lógico (AND)
|| OU lógico (OR)
Operadores de BIT
<< Deslocamento à esquerda
>> Deslocamento à direita
& E de bit (AND)
| OU de bit (OR)
^ OU exclusivo de bit (XOR)
~ Negação de bit
! NÃO de bit (NOT)
Operadores de BIT (atribuição)
<<= Deslocamento à esquerda
>>= Deslocamento à direita
&= E de bit
|= OU de bit
^= OU exclusivo de bit

2. Redirecionamento

Operador Ação
< Redireciona a entrada padrão (STDIN)
> Redireciona a saída padrão (STDOUT)
2> Redireciona a saída de erro (STDERR)
>> Redireciona a saída padrão, anexando
2>> Redireciona a saída de erro, anexando
| Conecta a saída padrão com a entrada padrão de outro comando
2>&1 Conecta a saída de erro na saída padrão
>&2 Conecta a saída padrão na saída de erro
>&- Fecha a saída padrão
2>&- Fecha a saída de erro
3<>arq Conecta o descritor de arquivos 3 ao arquivo 'arq'
<<FIM Alimenta a entrada padrão (Here Document)
<<-FIM Alimenta a entrada padrão, cortando TABs
<(cmd) A saída do comando 'cmd' é um arquivo: diff <(cmd1) <(cmd2)
>(cmd) A entrada do comando 'cmd' é um arquivo: tar cf >(bzip2 -c >file.tbz) $dir

3. Variáveis especiais

Variável Parâmetros Posicionais
$0 Parâmetro número 0 (nome do comando ou função)
$1 Parâmetro número 1 (da linha de comando ou função)
... Parâmetro número N ...
$9 Parâmetro número 9 (da linha de comando ou função)
${10} Parâmetro número 10 (da linha de comando ou função)
... Parâmetro número NN ...
$# Número total de parâmetros da linha de comando ou função
$* Todos os parâmetros, como uma string única
$@ Todos os parâmetros, como várias strings protegidas
Variável Miscelânia
$$ Número PID do processo atual (do próprio script)
$! Número PID do último job em segundo plano
$_ Último argumento do último comando executado
$? Código de retorno do último comando executado

4. Expansão de variáveis

Sintaxe Expansão Condicional
${var:-texto} Se var não está definida, retorna 'texto'
${var:=texto} Se var não está definida, defina-a com 'texto'
${var:?texto} Se var não está definida, retorna o erro 'texto'
${var:+texto} Se var está definida, retorna 'texto', senão retorna o vazio
Sintaxe Expansão de Strings
${var} É o mesmo que $var, porém não ambíguo
${#var} Retorna o tamanho da string
${!var} Executa o conteúdo de $var (igual 'eval \$$var')
${!texto*} Retorna os nomes de variáveis começadas por 'texto'
${var:N} Retorna o texto à partir da posição 'N'
${var:N:tam} Retorna 'tam' caracteres à partir da posição 'N'
${var#texto} Corta 'texto' do início da string
${var##texto} Corta 'texto' do início da string (* guloso)
${var%texto} Corta 'texto' do final da string
${var%%texto} Corta 'texto' do final da string (* guloso)
${var/texto/novo} Substitui 'texto' por 'novo', uma vez
${var//texto/novo} Substitui 'texto' por 'novo', sempre
${var/#texto/novo} Se a string começar com 'texto', substitui 'texto' por 'novo'
${var/%texto/novo} Se a string terminar com 'texto', substitui 'texto' por 'novo'

5. Blocos e agrupamentos

Sintaxe Descrição Exemplo
"..." Protege uma string, mas reconhece $, \ e ` como especiais "abc"
'...' Protege uma string completamente (nenhum caractere é especial) 'abc'
$'...' Protege uma string completamente, mas interpreta \n, \t, \a, etc $'abc\n'
`...` Executa comandos numa subshell, retornando o resultado `ls`
{...} Agrupa comandos em um bloco { ls ; }
(...) Executa comandos numa subshell ( ls )
$(...) Executa comandos numa subshell, retornando o resultado $( ls )
((...)) Testa uma operação aritmética, retornando 0 ou 1 ((5 > 3))
$((...)) Retorna o resultado de uma operação aritmética $((5+3))
[...] Testa uma expressão, retornando 0 ou 1 (alias do comando 'test') [ 5 -gt 3 ]
[[...]] Testa uma expressão, retornando 0 ou 1 (podendo usar && e ||) [[ 5 > 3 ]]

6. if, for, select, while, until, case

if for / select while / until case
if COMANDO
then
...
elif COMANDO
then
...
else
...
fi
for VAR in LISTA
do
...
done

ou:

for ((exp1;exp2;exp3))
while COMANDO
do
...
done
case $VAR in
txt1) ... ;;
txt2) ... ;;
txtN) ... ;;
*) ... ;;
esac

7. Opções do comando test ou [

Comparação Numérica
-lt É menor que (LessThan)
-gt É maior que (GreaterThan)
-le É menor igual (LessEqual)
-ge É maior igual (GreaterEqual)
-eq É igual (EQual)
-ne É diferente (NotEqual)
Comparação de Strings
= É igual
!= É diferente
-n É não nula
-z É nula
Operadores Lógicos
! NÃO lógico (NOT)
-a E lógico (AND)
-o OU lógico (OR)
Testes em arquivos
-b É um dispositivo de bloco
-c É um dispositivo de caractere
-d É um diretório
-e O arquivo existe
-f É um arquivo normal
-g O bit SGID está ativado
-G O grupo do arquivo é o do usuário atual
-k O sticky-bit está ativado
-L O arquivo é um link simbólico
-O O dono do arquivo é o usuário atual
-p O arquivo é um named pipe
-r O arquivo tem permissão de leitura
-s O tamanho do arquivo é maior que zero
-S O arquivo é um socket
-t O descritor de arquivos N é um terminal
-u O bit SUID está ativado
-w O arquivo tem permissão de escrita
-x O arquivo tem permissão de execução
-nt O arquivo é mais recente (NewerThan)
-ot O arquivo é mais antigo (OlderThan)
-ef O arquivo é o mesmo (EqualFile)

8. Escapes especiais para usar no prompt (PS1)

Escape Lembrete Expande para...
\a Alerta Alerta (bipe)
\d Data Data no formato "Dia-da-semana Mês Dia" (Sat Jan 15)
\e Escape Caractere Esc
\h Hostname Nome da máquina sem o domínio (dhcp11)
\H Hostname Nome completo da máquina (dhcp11.empresa)
\j Jobs Número de jobs ativos
\l Tty Nome do terminal corrente (ttyp1)
\n Newline Linha nova
\r Return Retorno de carro
\s Shell Nome do shell (basename $0)
\t Time Horário no formato 24 horas HH:MM:SS
\T Time Horário no formato 12 horas HH:MM:SS
\@ At Horário no formato 12 horas HH:MM am/pm
\A At Horário no formato 24 horas HH:MM
\u Usuário Login do usuário corrente
\v Versão Versão do Bash (2.00)
\V Versão Versão+subversão do Bash (2.00.0)
\w Working Dir Diretório corrente, caminho completo ($PWD)
\W Working Dir Diretório corrente, somente o último (basename $PWD)
\! Histórico Número do comando corrente no histórico
\# Número Número do comando corrente
\$ ID Mostra "#" se for root, "$" se for usuário normal
\nnn Octal Caractere cujo octal é nnn
\\ Backslash Barra invertida \ literal
\[ Escapes Inicia uma seqüência de escapes (tipo códigos de cores)
\] Escapes Termina uma seqüência de escapes

9. Escapes reconhecidos pelo comando echo

Escape Lembrete Descrição
\a Alerta Alerta (bipe)
\b Backspace Caractere Backspace
\c EOS Termina a string
\e Escape Caractere Esc
\f Form feed Alimentação
\n Newline Linha nova
\r Return Retorno de carro
\t Tab Tabulação horizontal
\v Vtab Tabulação vertical
\\ Backslash Barra invertida \ literal
\nnn Octal Caractere cujo octal é nnn
\xnn Hexa Caractere cujo hexadecimal é nn

10. Formatadores do comando date

Formato Descrição
%a Nome do dia da semana abreviado (Dom..Sáb)
%A Nome do dia da semana (Domingo..Sábado)
%b Nome do mês abreviado (Jan..Dez)
%B Nome do mês (Janeiro..Dezembro)
%c Data completa (Sat Nov 04 12:02:33 EST 1989)
%y Ano (dois dígitos)
%Y Ano (quatro dígitos)
%m Mês (01..12)
%d Dia (01..31)
%j Dia do ano (001..366)
%H Horas (00..23)
%M Minutos (00..59)
%S Segundos (00..60)
%s Segundos desde 1º de Janeiro de 1970
%% Um % literal
%t Um TAB
%n Uma quebra de linha

11. Formatadores do comando printf

Formato Descrição
%d Número decimal
%o Número octal
%x Número hexadecimal (a-f)
%X Número hexadecimal (A-F)
%f Número com ponto flutuante
%e Número em notação científica (e+1)
%E Número em notação científica (E+1)
%s String

12. Letras identificadoras de arquivos no comando ls -l

Letra Lembrete Tipos de Arquivo (primeiro caractere)
- - Arquivo normal
d Directory Diretório
l Link Link simbólico
b Block Dispositivo de blocos (HD)
c Char Dispositivo de caracteres (modem serial)
s Socket Socket mapeado em arquivo (comunicação de processos)
p Pipe FIFO ou Named Pipe (comunicação de processos)
Letra Lembrete Permissões do Arquivo (próximos nove caracteres)
- - Permissão desativada
r Read Acesso de leitura
w Write Acesso de escrita
x eXecute Acesso de execução (ou acesso ao diretório)
X eXecute Acesso ao diretório somente
s Set ID Usuário/grupo para execução (SUID, SGID) - permissão 'x' ativada
S Set ID Usuário/grupo para execução (SUID, SGID) - permissão 'x' desativada
t sTicky Usuários só apagam seus próprios arquivos - permissão 'x' ativada
T sTicky Usuários só apagam seus próprios arquivos - permissão 'x' desativada

13. Curingas para nomes de arquivo (glob)

Curinga Casa com... Exemplo
* Qualquer coisa *.txt
? Um caractere qualquer arquivo-??.zip
[...] Qualquer um dos caracteres listados [Aa]rquivo.txt
[^...] Qualquer um caractere, exceto os listados [^A-Z]*.txt
{...} Qualquer um dos textos separados por vírgula arquivo.{txt,html}

14. Curingas para os itens do comando case

Curinga Casa com... Exemplo
* Qualquer coisa *.txt) echo ;;
? Um caractere qualquer arquivo-??.zip) echo ;;
[...] Qualquer um dos caracteres listados [0-9]) echo ;;
[^...] Qualquer um caractere, exceto os listados [^0-9]) echo ;;
...|... Qualquer um dos textos separados por | txt|html) echo ;;

15. Sinais para usar com trap/kill/killall

# Linux Cygwin SystemV AIX HP-UX Solaris BSD/Mac
1 HUP HUP HUP HUP HUP HUP HUP
2 INT INT INT INT INT INT INT
3 QUIT QUIT QUIT QUIT QUIT QUIT QUIT
4 ILL ILL ILL ILL ILL ILL ILL
5 TRAP TRAP TRAP TRAP TRAP TRAP TRAP
6 ABRT ABRT IOT LOST ABRT ABRT ABRT
7 BUS EMT EMT EMT EMT EMT EMT
8 FPE FPE FPE FPE FPE FPE FPE
9 KILL KILL KILL KILL KILL KILL KILL
10 USR1 BUS BUS BUS BUS BUS BUS
11 SEGV SEGV SEGV SEGV SEGV SEGV SEGV
12 USR2 SYS SYS SYS SYS SYS SYS
# Linux Cygwin SystemV AIX HP-UX Solaris BSD/Mac
13 PIPE PIPE PIPE PIPE PIPE PIPE PIPE
14 ALRM ALRM ALRM ALRM ALRM ALRM ALRM
15 TERM TERM TERM TERM TERM TERM TERM
16 - URG USR1 URG USR1 USR1 URG
17 CHLD STOP USR2 STOP USR2 USR2 STOP
18 CONT TSTP CHLD TSTP CHLD CHLD TSTP
19 STOP CONT PWR CONT PWR PWR CONT
20 TSTP CHLD WINCH CHLD VTALRM WINCH CHLD
21 TTIN TTIN URG TTIN PROF URG TTIN
22 TTOU TTOU IO TTOU IO IO TTOU
23 URG IO STOP IO WINCH STOP IO
24 XCPU XCPU TSTP XCPU STOP TSTP XCPU
# Linux Cygwin SystemV AIX HP-UX Solaris BSD/Mac
25 XFSZ XFSZ CONT XFSZ TSTP CONT XFSZ
26 VTALRM VTALRM TTIN - CONT TTIN VTALRM
27 PROF PROF TTOU MSG TTIN TTOU PROF
28 WINCH WINCH VTALRM WINCH TTOU VTALRM WINCH
29 IO LOST PROF PWR URG PROF INFO
30 PWR USR1 XCPU USR1 LOST XCPU USR1
31 SYS USR2 XFSZ USR2 - XFSZ USR2
32 - - - PROF - WAITING -
33 - - - DANGER - LWP -
34 - - - VTALRM - FREEZE -
35 - - - MIGRATE - THAW -
36 - - - PRE - CANCEL -
37 - - - - - LOST -

Como obter a listagem: trap -l, kill -l ou killall -l
Veja também: man 7 signal

16. Códigos de retorno de comandos

Código Significado Exemplo
0 Nenhum erro, execução terminou OK echo
1 A maioria dos erros comuns na execução echo $((1/0))
2 Erro de uso em algum 'builtin' do Shell -
126 Comando não executável (sem permissão) touch a ; ./a
127 Comando não encontrado ("command not found") echooo
128 O parâmetro para o 'exit' não é um decimal exit 1.0
128+n 128 + código do sinal que o matou kill -9 $PPID #exit 137
130 O programa interrompido com o Ctrl+C (128 + 2) -
255 Parâmetro para o 'exit' não está entre 0 e 255 exit -1

17. Códigos de cores (ANSI)

Cor Letra Fundo
Preto 30 40
Vermelho 31 41
Verde 32 42
Amarelo 33 43
Azul 34 44
Rosa 35 45
Ciano 36 46
Branco 37 47
Atributo Valor
Reset 0
Negrito 1
Sublinhado 4
Piscando 5
Reverso 7
Exemplos: ESC [ <N>;<N> m
Texto normal (desliga cores) ESC[m
Negrito ESC[1m
Amarelo ESC[33;1m
Fundo azul, letra cinza ESC[44;37m
Vermelho piscando ESC[31;5m
Na linha de comando
echo -e '\e[33;1m amarelo \e[m'
echo -e '\033[33;1m amarelo \033[m'

18. Os metacaracteres das expressões regulares

Meta Nome Descrição
. Ponto Curinga de um caractere
[] Lista Casa qualquer um dos caracteres listados
[^] Lista negada Casa qualquer caractere, exceto os listados
? Opcional A entidade anterior pode aparecer ou não (opcional)
* Asterisco A entidade anterior pode aparecer em qualquer quantidade
+ Mais A entidade anterior deve aparecer no mínimo uma vez
{,} Chaves A entidade anterior deve aparecer na quantidade indicada
^ Circunflexo Casa o começo da linha
$ Cifrão Casa o fim da linha
\b Borda Limita uma palavra (letras, números e sublinhado)
\ Escape Escapa um meta, tirando seu poder
| Ou Indica alternativas (usar com o grupo)
() Grupo Agrupa partes da expressão, é quantificável e multinível
\1 Retrovisor Recupera o conteúdo do grupo 1
\2 Retrovisor Recupera o conteúdo do grupo 2 (segue até o \9)
.* Curinga Casa qualquer coisa, é o tudo e o nada
?? Opcional NG Idem ao opcional comum, mas casa o mínimo possível
*? Asterisco NG Idem ao asterisco comum, mas casa o mínimo possível
+? Mais NG Idem ao mais comum, mas casa o mínimo possível
{}? Chaves NG Idem às chaves comuns, mas casa o mínimo possível

19. Metacaracteres que são diferentes nos aplicativos

Programa Opc Mais Chaves Borda Ou Grupo
awk ? + - - | ()
ed \? \+ \{,\} \b \| \(\)
egrep ? + {,} \b | ()
emacs ? + - \b \| \(\)
expect ? + - - | ()
find ? + - \b \| \(\)
gawk ? + {,} \<\> | ()
grep \? \+ \{,\} \b \| \(\)
mawk ? + - - | ()
perl ? + {,} \b | ()
php ? + {,} \b | ()
python ? + {,} \b | ()
sed \? \+ \{,\} \<\> \| \(\)
vim \= \+ \{,} \<\> \| \(\)

20. Caracteres ASCII imprimíveis (ISO-8859-1) - texto

$ zzascii
32 64 @ 96 ` 162 ¢ 194 Â 226 â
33 ! 65 A 97 a 163 £ 195 Ã 227 ã
34 " 66 B 98 b 164 ¤ 196 Ä 228 ä
35 # 67 C 99 c 165 ¥ 197 Å 229 å
36 $ 68 D 100 d 166 ¦ 198 Æ 230 æ
37 % 69 E 101 e 167 § 199 Ç 231 ç
38 & 70 F 102 f 168 ¨ 200 È 232 è
39 ' 71 G 103 g 169 © 201 É 233 é
40 ( 72 H 104 h 170 ª 202 Ê 234 ê
41 ) 73 I 105 i 171 « 203 Ë 235 ë
42 * 74 J 106 j 172 ¬ 204 Ì 236 ì
43 + 75 K 107 k 173 205 Í 237 í
44 , 76 L 108 l 174 ® 206 Î 238 î
45 - 77 M 109 m 175 ¯ 207 Ï 239 ï
46 . 78 N 110 n 176 ° 208 Ð 240 ð
47 / 79 O 111 o 177 ± 209 Ñ 241 ñ
48 0 80 P 112 p 178 ² 210 Ò 242 ò
49 1 81 Q 113 q 179 ³ 211 Ó 243 ó
50 2 82 R 114 r 180 ´ 212 Ô 244 ô
51 3 83 S 115 s 181 µ 213 Õ 245 õ
52 4 84 T 116 t 182 ¶ 214 Ö 246 ö
53 5 85 U 117 u 183 · 215 × 247 ÷
54 6 86 V 118 v 184 ¸ 216 Ø 248 ø
55 7 87 W 119 w 185 ¹ 217 Ù 249 ù
56 8 88 X 120 x 186 º 218 Ú 250 ú
57 9 89 Y 121 y 187 » 219 Û 251 û
58 : 90 Z 122 z 188 ¼ 220 Ü 252 ü
59 ; 91 [ 123 { 189 ½ 221 Ý 253 ý
60 < 92 \ 124 | 190 ¾ 222 Þ 254 þ
61 = 93 ] 125 } 191 ¿ 223 ß 255 ÿ
62 > 94 ^ 126 ~ 192 À 224 à
63 ? 95 _ 161 ¡ 193 Á 225 á

21. Caracteres ASCII imprimíveis (ISO-8859-1) - imagem

22. Códigos prontos para copiar e colar

Condicionais com o IF
if [ -f "$arquivo" ]; then echo 'Arquivo encontrado'; fi
if [ ! -d "$dir" ]; then echo 'Diretório não encontrado'; fi
if [ $i -gt 5 ]; then echo 'Maior que 5'; else echo 'Menor que 5'; fi
if [ $i -ge 5 -a $i -le 10 ]; then echo 'Entre 5 e 10, incluindo'; fi
if [ $i -eq 5 ]; then echo '=5'; elif [ $i -gt 5 ]; then echo '>5'; else echo '<5'; fi
if [ "$USER" = 'root' ]; then echo 'Oi root'; fi
if grep -qs 'root' /etc/passwd; then echo 'Usuário encontrado'; fi
Condicionais com o E (&&) e OU (||)
[ -f "$arquivo" ] && echo 'Arquivo encontrado'
[ -d "$dir" ] || echo 'Diretório não encontrado'
grep -qs 'root' /etc/passwd && echo 'Usuário encontrado'
cd "$dir" && rm "$arquivo" && touch "$arquivo" && echo 'feito!'
[ "$1" ] && param=$1 || param='valor padrão'
[ "$1" ] && param=${1:-valor padrão}
[ "$1" ] || { echo "Uso: $0 parâmetro" ; exit 1 ; }
Adicionar 1 à variável $i
i=$(expr $i + 1)
i=$((i+1))
let i=i+1
let i+=1
let i++
Loop de 1 à 10
for i in 1 2 3 4 5 6 7 8 9 10; do echo $i; done
for i in $(seq 10); do echo $i; done
for ((i=1;i<=10;i++)); do echo $i; done
i=1 ; while [ $i -le 10 ]; do echo $i ; i=$((i+1)) ; done
i=1 ; until [ $i -gt 10 ]; do echo $i ; i=$((i+1)) ; done
Loop nas linhas de um arquivo ou saída de comando
cat /etc/passwd | while read LINHA; do echo "$LINHA"; done
grep 'root' /etc/passwd | while read LINHA; do echo "$LINHA"; done
while read LINHA; do echo "$LINHA"; done < /etc/passwd
while read LINHA; do echo "$LINHA"; done < <(grep 'root' /etc/passwd)
Curingas nos itens do comando case
case "$dir" in /home/*) echo 'dir dentro do /home';; esac
case "$user" in root|joao|maria) echo "Oi $user";; *) echo "Não te conheço";; esac
case "$var" in ?) echo '1 letra';; ??) echo '2 letras';; ??*) echo 'mais de 2';; esac
case "$i" in [0-9]) echo '1 dígito';; [0-9][0-9]) echo '2 dígitos';; esac
Caixas do Dialog
dialog --calendar 'abc' 0 0 31 12 1999
dialog --checklist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off
dialog --fselect /tmp 0 0
(echo 50; sleep 2; echo 100) | dialog --gauge 'abc' 8 40 0
dialog --infobox 'abc' 0 0
dialog --inputbox 'abc' 0 0
dialog --passwordbox 'abc' 0 0
dialog --menu 'abc' 0 0 0 item1 'desc1' item2 'desc2'
dialog --msgbox 'abc' 8 40
dialog --radiolist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off
dialog --tailbox /tmp/arquivo.txt 0 0
dialog --textbox /tmp/arquivo.txt 0 0
dialog --timebox 'abc' 0 0 23 59 00
dialog --yesno 'abc' 0 0
Dica1: dialog ... && echo 'Apertou OK/Yes' || echo 'Apertou Cancel/No'
Dica2: resposta=$(dialog --stdout --TIPODACAIXA 'abc' ...)

23. Atalhos da linha de comando (set -o emacs)

Atalho Descrição Tecla Similar
Ctrl+A Move o cursor para o início da linha Home
Ctrl+B Move o cursor uma posição à esquerda
Ctrl+C Envia sinal EOF() para o sistema
Ctrl+D Apaga um caractere à direita Delete
Ctrl+E Move o cursor para o fim da linha End
Ctrl+F Move o cursor uma posição à direita
Ctrl+H Apaga um caractere à esquerda Backspace
Ctrl+I Completa arquivos e comandos Tab
Ctrl+J Quebra a linha Enter
Ctrl+K Recorta do cursor até o fim da linha
Ctrl+L Limpa a tela (igual ao comando clear)
Ctrl+N Próximo comando
Ctrl+P Comando anterior
Ctrl+Q Destrava a shell (veja Ctrl+S)
Ctrl+R Procura no histórico de comandos
Ctrl+S Trava a shell (veja Ctrl+Q)
Ctrl+T Troca dois caracteres de lugar
Ctrl+U Recorta a linha inteira
Ctrl+V Insere caractere literal
Ctrl+W Recorta a palavra à esquerda
Ctrl+X Move o cursor para o início/fim da linha (2x) Home/End
Ctrl+Y Cola o trecho recortado

24. A caixa de ferramentas do shelleiro

Comando Função Opções úteis
cat Mostra arquivo -n, -s
cut Extrai campo -d -f, -c
date Mostra data -d, +'...'
diff Compara arquivos -u, -Nr, -i, -w
echo Mostra texto -e, -n
find Encontra arquivos -name, -iname, -type f, -exec, -or
fmt Formata parágrafo -w, -u
grep Encontra texto -i, -v, -r, -qs, -n, -l, -w -x, -A -B -C
head Mostra Início -n, -c
od Mostra Caracteres -a, -c, -o, -x
paste Paraleliza arquivos -d, -s
printf Mostra texto nenhuma
rev Inverte texto nenhuma
sed Edita texto -n, -f, s/isso/aquilo/, p, d, q, N
seq Conta Números -s, -f
sort Ordena texto -n, -f, -r, -k -t, -o
tac Inverte arquivo nenhuma
tail Mostra Final -n, -c, -f
tee Arquiva fluxo -a
tr Transforma texto -d, -s, A-Z a-z
uniq Remove duplicatas -i, -d, -u
wc Conta Letras -c, -w, -l, -L
xargs Gerencia argumentos -n, -i



miniman

Aurélio Marinho Jargas

2009


Você também boceja quando lê aquelas chatíssimas man pages? Milhares de opções, explicações confusas, textos em inglês, formatação arcaica, chato, chato, chato.

Que tal uma versão rápida, resumida, com tabelas que listam somente as opções mais utilizadas dos comandos mais utilizados?

Esta é a miniman, a sua "mini man page", para aqueles momentos de pressa em que você precisa lembrar daquela opção mágica daquele comandinho safado.

Estas tabelas fazem parte do meu livro Shell Script Profissional, estão no Apêndice D — Caixa de ferramentas (páginas 425 a 456). O livro é um estudo aprofundado do Shell e suas ferramentas. Fiz questão de escrevê-lo numa linguagem direta, clara e didática, para ser BEM DIFERENTE dos textos chatos das man pages! :)

Veja também: Canivete Suíço do Shell

Quer sugerir outras opções ou comandos novos? Fala que eu te escuto

cat

Opção Lembrete Descrição
-n Number Numera as linhas (Formato: Espaços, Número, TAB, Linha)
-s Squeeze Remove as linhas em branco excedentes

cut

Opção Lembrete Descrição
-d Delimiter Escolhe o delimitador (o padrão é o TAB)
-f Field Mostra estes campos (veja tabela seguinte)
-c Chars Mostra estes caracteres (veja tabela seguinte)
-f e -c Abrange Significa
2,5 2 5 O segundo e o quinto
2-5 2 3 4 5 Do segundo ao quinto
2- 2 3 4 5 … Do segundo em diante
-5 1 2 3 4 5 Até o quinto
2,5- 2 5 6 7 … O segundo e do quinto em diante
2,3,5-8 2 3 5 6 7 8 O segundo, o terceiro e do quinto ao oitavo

date

Opção Lembrete Descrição
-d Date Especifica a data (Ex.: tomorrow, 2 days ago, 5 weeks)
+%?
Formato da data – veja tabela seguinte (Ex.: %Y-%m-%d)
Formato Descrição do caractere de formatação
%a Nome do dia da semana abreviado (Dom..Sáb)
%A Nome do dia da semana (Domingo..Sábado)
%b Nome do mês abreviado (Jan..Dez)
%B Nome do mês (Janeiro..Dezembro)
%c Data completa (Sat Nov 04 12:02:33 EST 1989)
%y Ano (dois dígitos)
%Y Ano (quatro dígitos)
%m Mês (01..12)
%d Dia (01..31)
%j Dia do ano (001..366)
%H Horas (00..23)
%M Minutos (00..59)
%S Segundos (00..60)
%s Segundos desde 1º de Janeiro de 1970
%% Um % literal
%t Um TAB
%n Uma quebra de linha

diff

Opção Lembrete Descrição
-u Unified Formato unificado (com contexto e os sinais de + e -)
-C Context Indica a quantidade de linhas usadas para o contexto
-r Recusive Varre todo o diretório
-N New file Considera arquivos não-encontrados como vazios
-i Ignore case Ignora a diferença entre maiúsculas e minúsculas
-w White space Ignora a diferença de linhas e espaços em branco

echo

Opção Lembrete Descrição
-n Newline Não quebra a linha no final
-e Escape Interpreta os escapes especiais (ver tabela seguinte)
Escape Lembrete Descrição
\a Alert Alerta (bipe)
\b Backspace Caractere Backspace
\c EOS Termina a string
\e Escape Caractere Esc
\f Form feed Alimentação
\n Newline Linha nova
\r Return Retorno de carro
\t Tab Tabulação horizontal
\v Vtab Tabulação vertical
\\ Backslash Barra invertida \ literal
\nnn Octal Caractere cujo octal é nnn
\xnn Hexa Caractere cujo hexadecimal é nn

find

Opção Descrição
-name Especifica o nome do arquivo (ou *parte* dele)
-iname Ignora a diferença entre maiúsculas e minúsculas no nome
-type Especifica o tipo do arquivo (f=arquivo, d=diretório, l=link)
-mtime Mostra os arquivos modificados há N dias
-size Mostra os arquivos que possuem o tamanho especificado
-user Mostra os arquivos de um usuário específico
-ls Mostra os arquivos no mesmo formato do comando ls
-printf Formatação avançada para mostrar os nomes dos arquivos
-exec Executa um comando com os arquivos encontrados
-ok Executa um comando com os arquivos encontrados, com confirmação
-and, -or E, OU lógico para as condições
-not Inverte a lógica da expressão
Detalhes das opções -exec e -ok
A string {} representa o nome do arquivo encontrado
O comando deve ser passado sem aspas
O comando deve ser terminado por um ponto-e-vírgula escapado \;
Tem que ter um espaço antes do ponto-e-vírgula escapado
Mover os arquivos .txt para .txt.old: find . -name '*.txt' -exec mv {} {}.old \;

fmt

Opção Lembrete Descrição
-w Width Define o número máximo de colunas (o padrão é 75)
-u Uniform Remove espaços excedentes

grep

Opção Lembrete Descrição
-i Ignore case Ignora a diferença entre maiúsculas e minúsculas
-v Invert Mostra as linhas que não casam com o padrão
-r Recursive Varre subdiretórios também
-q Quiet Não mostra as linhas que encontrar (usar com o test)
-s Silent Não mostra os erros (usar com o test)
-n Number Mostra também o número da linha
-c Count Conta o número de linhas encontradas
-l Filename Mostra apenas o nome o arquivo que casou
-w Word O padrão é uma palavra inteira, e não parte dela
-x Full line O padrão é uma linha inteira, e não parte dela
-A After Mostre N linhas de contexto depois do padrão
-B Before Mostre N linhas de contexto antes do padrão
-C Context Mostre N linhas de contexto antes e depois do padrão
As identidades do grep
grep Procura por uma expressão regular básica
egrep ou grep -E Procura por uma expressão regular estendida
fgrep ou grep -F Procura por uma string
Metacaracteres
Expressão regular básica ^ $ . * [ \? \+ \| \( \) \{ \}
Expressão regular estendida ^ $ . * [ ? + | ( ) { }

head

Opção Lembrete Descrição
-n Lines Mostra as N primeiras linhas (o padrão é 10)
-c Char Mostra os N primeiros caracteres (incluindo \n)

od

Opção Lembrete Descrição
-a Name Mostra os nomes dos caracteres
-c ASCII Mostra os caracteres ASCII
-o Octal Mostra os códigos em octal
-x Hexa Mostra os códigos em hexadecimal

paste

Opção Lembrete Descrição
-d Delimiter Escolhe o delimitador (o padrão é o TAB)
-s Serial Transforma todas as linhas em apenas uma

printf

Formato Lembrete Descrição
%d Decimal Número decimal
%o Octal Número octal
%x Hexa Número hexadecimal (a-f)
%X Hexa Número hexadecimal (A-F)
%f Float Número com ponto flutuante
%e
Número em notação científica (e+1)
%E
Número em notação científica (E+1)
%s String String

sed

Opção Lembrete Descrição
-n Not print Só mostra a linha caso usado o comando p
-e Expression Especifica os comandos de edição
-f File Lê os comandos de edição de um arquivo
Comando Lembrete Ação
s/// Substitute Troca um texto por outro
p Print Mostra a linha na saída
l List Mostra a linha na saída, com \t, \a, …
d Delete Apaga a linha
q Quit Sai do sed
r Read Lê o conteúdo de um arquivo
N Next line Junta a próxima linha com a atual
Endereço Abrange…
1 A primeira linha
1,5 Da primeira linha até a quinta
5,$ Da quinta linha até a última
/sed/ A(s) linha(s) que contém a palavra “sed”
5,/sed/ Da quinta linha até a linha que contém “sed”
/sed/,/grep/ Da linha que contém “sed” até a que contém “grep”
1,5! Todas as linhas, exceto da primeira a quinta
/sed/! A(s) linha(s) que não contém a palavra “sed”
s/// Exemplo Descrição
g s/a/b/g Modificador Global, para trocar todas as ocorrências
p s/a/b/gp Modificador Print, para mostrar o texto substituído
& s/./& / Expande para todo o trecho casado na primeira parte
\1 s/\(.\)/\1 / Expande para o conteúdo do primeiro grupo marcado com \(…\)

seq

Opção Lembrete Descrição
-s Separator Define o separador (o padrão é \n)
-f Format Define o formato do número (o padrão é %g)

sort

Opção Lembrete Descrição
-n Numeric Ordena numericamente (o padrão é alfabeticamente)
-r Reverse Reverte a ordenação (de Z para A, de 9 para 0)
-f Ignore case Ignora a diferença entre maiúsculas e minúsculas
-k Key Ordena pela coluna N (a primeira é 1)
-t Separator Escolhe o separador para o -k (o padrão é o TAB)
-o Output Grava a saída no arquivo especificado

tail

Opção Lembrete Descrição
-n Lines Mostra as N últimas linhas (o padrão é 10)
-c Char Mostra os N últimos caracteres (incluindo \n)
-f Follow Monitora o arquivo ad infinitum

tee

Opção Lembrete Descrição
-a Append Anexa ao final do arquivo (o padrão é sobrescrever)

tr

Opção Lembrete Descrição
-s Squeeze Espreme caracteres iguais consecutivos para apenas um
-d Delete Apaga todos os caracteres listados
-c Complement Inverte a lista de caracteres (-c 0-9 é similar a [^0-9])
Argumento Engloba
abc “a” e “b” e “c”
a7z “a” e “7” e “z”
a-z de “a” até “z”
0-7 de zero a sete

uniq

Opção Lembrete Descrição
-i Ignore case Ignora a diferença entre maiúsculas e minúsculas
-d Duplicate Mostra apenas as linhas que são repetidas
-u Unique Mostra apenas as linhas que não são repetidas

wc

Opção Lembrete Descrição
-c Char Conta o número de caracteres (bytes)
-w Word Conta o número de palavras
-l Line Conta o número de linhas
-L Longest Mostra o tamanho da linha mais comprida

xargs

Opção Lembrete Descrição
-n Number Use N argumentos por linha de comando
-i Replace Troca a string {} pelo argumento da vez




ċ
canivete-shell.pdf
(169k)
Silvio Garbes,
12 de mai de 2010 04:32
Comments