Fonte: http://aurelio.net/shell/canivete.htmlFonte: http://aurelio.net/shell/miniman/
Canivete Suíço do Shell (Bash)
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
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
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 |
|
 Updating...
canivete-shell.pdf (169k) Silvio Garbes, 12 de mai. de 2010 04:32
|