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 |
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 |
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 a partir da posição 'N' |
${var:N:tam} |
Retorna 'tam' caracteres a 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' |
${var^} |
Converte para maiúscula o primeiro caractere |
${var^^} |
Converte para maiúscula todos os caracteres |
${var,} |
Converte para minúscula o primeiro caractere |
${var,,} |
Converte para minúscula todos os caracteres |
${var~} |
Inverte maiúscula/minúscula do primeiro caractere |
${var~~} |
Inverte maiúscula/minúscula de todos os caracteres |
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 ]] |
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) |
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 |
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 |
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 |
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 |
O item anterior pode aparecer ou não (opcional) |
* |
Asterisco |
O item anterior pode aparecer em qualquer quantidade |
+ |
Mais |
O item anterior deve aparecer no mínimo uma vez |
{,} |
Chaves |
O item anterior deve aparecer na quantidade indicada {mín,máx} |
^ |
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 |
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' ...) |
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 |
|
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 |