- Operações Básicas
1.1. Operações com Arquivo
1.2. Operações com Texto
1.3. Operações com Diretório
1.4. SSH, Informações do Sistema & Operações de Rede
1.5. Operações de Monitoramento de Processos - Programação Básica com Shell
2.1. Variáveis
2.2. Array
2.3. Manipulação de String
2.4. Outros Truques com Strings
2.5. Funções
2.6. Condicionais
2.7. Loops
2.8. Regex
2.9. Pipes - Truques
- Depuração
O comando export mostra todas as variáveis de ambiente. Caso você queira obter detalhes de uma variável específica, use echo $NOME_DA_VARIAVEL.
exportExemplo:
$ export
AWS_HOME=/Users/tuxmarrento/.aws
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LESS=-R
$ echo $AWS_HOME
/Users/tuxmarrento/.awsO comando whatis mostra a descrição dos comandos de usuário, system calls, funções de biblioteca e outros, extraídos das páginas de manual.
whatis alguma_coisaExemplo:
$ whatis bash
bash (1) - GNU Bourne-Again SHellO comando whereis busca por executáveis, source files e páginas de manual, usando uma base de dados construída pelo sistema automaticamente.
whereis nomeExemplo:
$ whereis php
/usr/bin/phpO comando which busca por executáveis nos diretórios especificados pela variável de ambiente PATH. Este comando vai mostrar o caminho completo do(s) executável(eis).
which nome_do_programaExemplo:
$ which php
/c/xampp/php/phpO comando clear limpa o conteúdo da janela.
| cat | chmod | chown | cp | diff | file | find | gzip | gzcat | gunzip | head |
| less | lpq | lpr | lprm | ls | more | mv | rm | tail | touch |
O comando cat pode ser usado, no UNIX ou no Linux, para os seguintes propósitos:
- Imprimir arquivos de textos na tela;
- Copiar arquivos de texto;
- Combinar arquivos de texto;
- Criar novos arquivos de texto.
cat nome_do_arquivo
cat arquivo1 arquivo2
cat arquivo1 arquivo2 > nome_do_arquivo_combinado
cat < arquivo1 > arquivo2 #copia o arquivo1 para o arquivo2O comando chmod, acrônimo para "change mode" (alterar modo), permite que você altere as permissões de leitura, escrita e execução dos seus arquivos e pastas. Para mais informações a respeito desse comando, acesse este link.
chmod -opcoes nome_do_arquivoO comando chown, acrônimo para "change owner" (alterar proprietário), permite que você altere o proprietário de um determinado arquivo ou pasta, o qual pode ser um usuário ou um grupo. O uso básico é simples: primeiro vem o usuário (proprietário) e depois o grupo, delimitado por dois pontos.
chown -opcoes usuario:grupo nome_do_arquivoO comando cp copia um arquivo de um local para outro.
cp nome_do_arquivo1 nome_do_arquivo2Em que nome_do_arquivo1 é o caminho do arquivo original e nome_do_arquivo2 é o caminho para o destino da cópia do arquivo.
O comando diff compara arquivos e lista suas diferenças.
diff nome_do_arquivo1 nome_do_arquivo2O comando file determina o tipo do arquivo.
file nome_do_arquivoExemplo:
$ file index.html
index.html: HTML document, ASCII textO comando find encontra arquivos no diretório.
find diretorio opcoes parametroExemplo:
$ find . -name README.md
$ find /home/user1 -name '*.png'O comando gzip compacta arquivos.
gzip nome_do_arquivoO comando gzcat permite verificar o conteúdo no arquivo compactado pelo gzip sem precisar descompactá-lo.
gzcat nome_do_arquivoO comando gunzip descompacta arquivos compactados pelo gzip.
gunzip nome_do_arquivoO comando head exibe as primeiras 10 linhas de um arquivo.
head nome_do_arquivoO comando less exibe o conteúdo de um arquivo, ou da saída de um comando, em uma página por vez. Ele é similar ao more, mas possui recursos mais avançados, permitindo navegar tanto para frente quanto para trás, através do arquivo.
less nome_do_arquivoO comando lpq exibe a fila de impressão.
lpqExemplo:
$ lpq
Rank Owner Job File(s) Total Size
active tuxmarrento 59 README.md 399360 bytes
1st tuxmarrento 60 (stdin) 0 bytesO comando lpr imprime um arquivo.
lpr nome_do_arquivoO comando lprm remove algo da fila de impressão, usando o "número" (ID) do trabalho verificado na coluna "job" do comando lpq.
lprm id_do_trabalhoO comando ls lista o conteúdo de um diretório. lspossui várias opções: -l lista os arquivos em formato estendido, o qual contém o tamanho exato do arquivo, o proprietário, quem tem a permissão para vê-lo e quando foi a última modificação; -a lista todos os arquivos, incluindo os ocultos. Para mais informações a respeito desse comando, acesse este link.
ls opcaoExemplo:
$ ls -la rwxr-xr-x 33 tuxmarrento staff 1122 Mar 27 18:44 . drwxrwxrwx 60 tuxmarrento staff 2040 Mar 21 15:06 .. -rw-r--r--@ 1 tuxmarrento staff 14340 Mar 23 15:05 .DS_Store -rw-r--r-- 1 tuxmarrento staff 157 Mar 25 18:08 .bumpversion.cfg -rw-r--r-- 1 tuxmarrento staff 6515 Mar 25 18:08 .config.ini -rw-r--r-- 1 tuxmarrento staff 5805 Mar 27 18:44 .config.override.ini drwxr-xr-x 17 tuxmarrento staff 578 Mar 27 23:36 .git -rwxr-xr-x 1 tuxmarrento staff 2702 Mar 25 18:08 .gitignore
O comando more exibe a primeira parte de um arquivo (mova a exibição com a tecla de espaço e digite "q" para sair). É uma versão mais antiga e simplificada do less, visto acima.
more nome_do_arquivoO comando mv move um arquivo de um lugar para outro..
mv nome_do_arquivo1 nome_do_arquivo2Em que nome_do_arquivo1 é o caminho do arquivo original e nome_do_arquivo2 o caminho para o destino do arquivo.
O comando mv também pode ser usado para renomear um arquivo.
mv nome_antigo novo_nomeEm que nome_antigo é o caminho do arquivo e novo_nome é o novo nome com o mesmo caminho para o arquivo; caso a linha de comando esteja executando no diretório onde está o arquivo, basta usar somente o nome, dispensando o caminho.
O comando rm remove o arquivo. O uso desse comando com um diretório retorna um erro:
rm: diretorio: is a directory
Para remover um diretório, deve-se acrescentar a opção -r, a qual remove o conteúdo do diretório recursivamente. Opcionalmente, pode-se usar a flag -f para forçar a exclusão, i.e., sem quaisquer confirmações etc.
rm nome_do_arquivoO comando tail exibe as últimas 10 linhas de um arquivo. Use -f para exibir os dados apensados (appended: anexados ao final), à medida em que o arquivo cresce.
tail nome_do_arquivoO comando touch atualiza registros de data e hora de acesso e modificação do seu arquivo. Se o arquivo não existir, ele será criado.
touch nome_do_arquivoExemplo:
$ touch trick.md| awk | cut | echo | grep | egrep | fgrep | fmt | nl | sed | sort |
| tr | uniq | wc |
O comando awk é o comando mais útil para manipular arquivos de texto. Ele opera em um arquivo inteiro, linha por linha. Por padrão, ele usa espaçoes em branco para separar os campos. A sintaxe mais comum para o comando awk é:
awk '/parametro_de_busca/ { operacao_a_se_realizar_se_o_parametro_for_confirmado; }' arquivo_para_analisarPara fins de exemplo, vamos pegar o seguinte arquivo /etc/passwd. Aqui estão os dados de amostra que este arquivo contém:
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
Então, agora vamos usar um comando para extrair somente o nome de usuário a partir desse arquivo, em que -F especifica a base onde nós vamos separar os campos. No nosso caso, é :. O trecho { print $1 } significa extrair o campo correspondente.
awk -F':' '{ print $1 }' /etc/passwdDepois de executar o comando acima, você vai obter a seguinte saída:
root
daemon
bin
sys
sync
Para mais detalhes a respeito do uso de awk, acesse o link.
O comando cut remove seções de cada linha de arquivos.
exemplo.txt
o garoto de gorro vermelho foi ao parque brincarexibir as colunas 2, 6, e 9 com espaço como separador
cut -d " " -f2,6,9 exemplo.txtgaroto foi brincarO comando echo exibe uma linha de texto.
exibir "Olá, Mundo"
echo Olá, MundoOlá, Mundo!exibir "Olá, Mundo" com novas linhas entre as palavras
echo -ne "Olá,\nMundo\n"Olá,
MundoO comando grep procura texto dentro dos arquivos. Pode-se usá-lo para buscar linhas de texto equivalentes a uma ou mais expressões regulares e extrair somente as linhas correspondentes.
grep parametro nome_do_arquivoExemplo:
$ grep admin /etc/passwd
_kadmin_admin:*:218:-2:Kerberos Admin Service:/var/empty:/usr/bin/false
_kadmin_changepw:*:219:-2:Kerberos Change Password Service:/var/empty:/usr/bin/false
_krb_kadmin:*:231:-2:Open Directory Kerberos Admin Service:/var/empty:/usr/bin/falsePode-se forçar o grep a ignorar maiúsculas, usando a opção -i.
Com -r, pode-se buscar todos os arquivos dentro de um diretório específico, por exemplo:
$ grep -r admin /etc/E a opção -w pode ser usada para buscar somente palavras. Para mais detalhes a respeito do comando grep, acesse o link.
O comando egrep imprime na tela as linhas correspondentes a um parâmetro - Expressão Estendida (alias para: 'grep -E')
exemplo.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.exiba as linhas que contenham "Lorem" ou "dolor".
egrep '(Lorem|dolor)' exemplo.txtou
grep -E '(Lorem|dolor)' exemplo.txtLorem ipsum
dolor sit amet,
et dolore magna
duo dolores et ea
sanctus est Lorem
ipsum dolor sitO comando fgrep imprime na tela as linhas que correspondam a um parâmetro, exibindo o parâmetro correspondente fixado (alias para: 'grep -F')
exemplo.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
foo (Lorem|dolor)
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.Econtre a exata string '(Lorem|dolor)' em exemplo.txt
fgrep '(Lorem|dolor)' exemplo.txtou
grep -F '(Lorem|dolor)' exemplo.txtfoo (Lorem|dolor) O comando fmt é um ótimo formatador simples de texto.
exemplo.txt (com uma única linha)
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.edite as linhas de exemplo.txt para o comprimento de 20 caracteres
cat exemplo.txt | fmt -w 20Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.O comando nl enumera linhas de arquivos.
exemplo.txt
Lorem ipsum
dolor sit amet,
consetetur
sadipscing elitr,
sed diam nonumy
eirmod tempor
invidunt ut labore
et dolore magna
aliquyam erat, sed
diam voluptua. At
vero eos et
accusam et justo
duo dolores et ea
rebum. Stet clita
kasd gubergren,
no sea takimata
sanctus est Lorem
ipsum dolor sit
amet.mostre exemplo.txt com linhas numeradas
nl -s". " exemplo.txt 1. Lorem ipsum
2. dolor sit amet,
3. consetetur
4. sadipscing elitr,
5. sed diam nonumy
6. eirmod tempor
7. invidunt ut labore
8. et dolore magna
9. aliquyam erat, sed
10. diam voluptua. At
11. vero eos et
12. accusam et justo
13. duo dolores et ea
14. rebum. Stet clita
15. kasd gubergren,
16. no sea takimata
17. sanctus est Lorem
18. ipsum dolor sit
19. amet.O comando sed é um editor de fluxo que filtra e transforma o texto.
exemplo.txt
Olá isso é um teste 1 2 3 4substitua todos os espaçoes por hífens
sed 's/ /-/g' exemplo.txtOlá-isso-é-um-teste-1-2-3-4substitua todos os dígitos por "d"
sed 's/[0-9]/d/g' exemplo.txtOlá isso é um teste d d d dO comando sort organiza as linhas de arquivos de texto.
exemplo.txt
f
b
c
g
a
e
dorganize exemplo.txt
sort exemplo.txta
b
c
d
e
f
grandomize um exemplo.txt organizado
sort example.txt | sort -Rb
f
a
c
d
g
eO comando tr substitui ou deleta caracteres.
exemplo.txt
Olá Mundo Foo Bar Baz!substitua todas as minúsculas por maiúsculas
cat exemplo.txt | tr 'a-z' 'A-Z' OLÁ MUNDO FOO BAR BAZ!substitua todos os espaços por novas linhas
cat exemplo.txt | tr ' ' '\n'Olá
Mundo
Foo
Bar
Baz!O comando uniq sinaliza ou omite linhas repetidas.
exemplo.txt
a
a
b
a
b
c
d
cmostre somente uma linha de cada repetição de linhas em exemplo.txt (primeiro você precisa organizá-lo, caso contrário ele não encontrará as repetições)
sort exemplo.txt | uniqa
b
c
dusando a opção -c ou --count, mostre somente uma linha de cada repetição de linhas e diga quantas ocorrências delas foram encontradas
sort exemplo.txt | uniq -c 3 a
2 b
2 c
1 doutras opções para o comando uniq são:
-dou--repeated: Exibe somente linhas que são repetidas;-iou--ignore-case: Ignora maiúsculas ao comparar as linhas;-uou--unique: Exibe somente as linhas sem repetição;
O comando wc conta a quantidade de linhas, palavras e caracteres existente em um arquivo.
wc nome_do_arquivoExemplo:
$ wc exemplo.txt
7459 15915 398400 exemplo.txtOnde 7459 é o total de linhas, 15915 é o total de palavras e 398400 é o total de caracteres.
Pode-se ainda filtrar a saída por opções:
-cou--bytes: imprime na tela o número de bytes;-mou--chars: imprime na tela o número de caracteres;-lou--lines: imprime na tela o número de linhas;-wou--words: imprime na tela o número de palavras;
| cd | mkdir | pwd |
O comando cd muda de um diretório para outro.
$ cdmove para o diretório HOME. Esse comando aceita um nome opcional, o qual pode ser o caminho para esse diretório, mudando você para ele.
cd nome_do_diretorioMude para o diretório anterior:
cd -Mude para o diretório acima:
cd ..O comando mkdir cria um novo diretório.
mkdir nome_do_diretorioPode-se usá-lo para criar múltiplos diretórios de uma só vez dentro do diretório corrente.
mkdir nome_do_diretorio1 nome_do_diretorio2 nome_do_diretorio3Também pode-se usá-lo para criar uma árvore de diretórios — com diretórios "pais" como subdiretórios — ao mesmo tempo, com a opção -p ou --parents. Por exemplo, caso você queira criar um diretório chamado "projeto1" dentro de um novo subdiretório em "/exemplos/bash/projetos/", você poderia executar:
mkdir -p /exemplos/bash/projetos/projeto1ou
mkdir --parents /exemplos/bash/projetos/projeto1Caso qualquer um dos diretórios nessa árvore de diretórios não exista, ele será criado também.
Imprime na tela em qual diretório você está no momento.
pwd| bg | cal | date | df | dig | du | fg | finger | jobs | last |
| man | passwd | ping | ps | quota | scp | ssh | top | uname | uptime |
| w | wget | whoami | whois | sync | curl |
O comando bg lista trabalhos parados ou em backdround; reinicia um trabalho parado em segundo plano (background).
O comando cal mostra o calendário do mês.
O comando date mostra o dia e a hora correntes.
O comando df mostra o uso do disco.
O comando dig obtém a informação DNS para um domínio.
dig dominio.comO comando du mostra o uso de disco por um arquivo ou diretório. Para mais informações a respeito do comando du, acesse o link
du opcao arquivo|diretorioAlgumas opções:
-h(leitura humanizada) mostra as informações em kilobytes (K), megabytes (M) ou gigabytes (G).-s(supresso ou sumarizado) mostra o uso total de disco por um diretório e suprime informações de subdiretórios. Exemplo:
du -sh imagens
1.4M imagensO comando fg exibe o trabalho mais recente em primeiro plano (foreground).
O comando finger mostra informações sobre o usuário
finger usuarioO comando jobs lista os trabalhos que estão executando no segundo plano e indica o número (ID) do trabalho.
O comando last lista os últimos logins de um usuário específico.
last nomeDeUsuarioO comando man exibe o manual de um determinado comando.
man comandoO comando passwd permite mudar a senha do usuário logado.
O comando ping realiza o ping para o endereço indicado e mostra os resultados.
ping hostO comando ps lista os processos em atividade.
Com a opção -u, pode-se filtrar por usuário, ao indicá-lo:
ps -u nomeDeUsuarioUse as flags -ef: e para todos os processos e f para lista completa.
ps -efO comando quota mostra qual a sua cota de uso de disco.
quota -vO comando scp permite a transferência de arquivos entre um host local e um host remoto; ou entre dois hosts remotos.
copiar de um host local para um host remoto
scp arquivo_original usuario@host:diretorio/arquivo_alvocopiar de um host remoto para um host local
scp usuario@host:diretorio/arquivo_original arquivo_alvopara diretórios, como o -cp
scp -r usuario@host:diretorio/diretorio_original diretorio_alvoEsse comando também aceita uma opção -P que pode ser usada para conectar a uma porta específica.
scp -P porta usuario@host:diretorio/arquivo_original arquivo_alvoO ssh (SSH client) é um programa para conectar-se e executar comandos em uma máquina remota.
ssh usuario@hostEsse comando também aceita uma opção -p que pode ser usada para conectar a uma porta específica.
ssh -p porta usuario@hostO comando top exibe os processos ativos no sistema.
O comando uname exibe as informações do kernel.
uname -aO comando uptime exibe o tempo corrente de atividade.
O comando w exibe quem está logado.
Com a sintaxe w opcoes usuario, pode-se:
-hou--no-header: suprimir a informação do cabeçalho, mostrando apenas os detalhes do usuário;-sou--short: exibir uma saída de formato curto, omitindo o tempo de login, as colunas JCPU e PCPU;-uou--no-current: ignorar o processo atual, ver o tempo ocioso e o que o usuário está fazendo;-iou--ip-addr: forçar a exibição de endereços IP, em vez de nomes de host, no campo FROM;-oou--old-style: usar o formato de saída antigo, imprimindo na tela espaços em branco para tempos ociosos inferiores a um minuto.
O comando wget baixa um arquivo.
wget arquivoO comando whoami retorna o usuário atualmente logado.
O comando whois obtém a informação whois para um domínio.
whois dominioO comando rsync faz o mesmo trabalho do comando scp, mas transfere somente arquivos modificados. Muito útil quando se transfere o mesmo diretório para ou de um sevidor várias vezes.
rsync diretorio_original usuario@host:diretorio_alvo
rsync usuario@host:diretorio_original diretorio_alvoCurl é uma ferramenta em linha de comando para requisitar ou enviar dados usando sintaxe URL. Muito útil para sistemas em que você tem somente um terminal disponível para fazer várias requisições.
curl urlAlgumas opções são:
-Xou--requestpara especificar qual método você gostaria de invocar (GET, POST, DELETE, ...);-d <dados>ou--data <dados>para dados de POST request em um determinado URL.
| kill | killall | &; | nohup |
O comando kill encerra o processo usando o PID (Process IDentifier) que você informa.
kill PIDO comando killall encerra todos os processos com o nome.
killall nomeDoProcessoO símbolo & instrui o comando a executar como um processo em segundo plano num subshell.
comando &nohup significa "No Hang Up". Ele permite executar comandos, processos ou scripts que podem continuar sendo executados em segundo plano após você sair de um shell.
nohup comandoCombine-o com & para criar processos em segundo plano.
nohup comando &A primeira linha que você vai escrever em um arquivo com script bash se chama shebang. Em qualquer script, essa linha determina qual interpretador será utilizado para rodar o executável sem precisar digitar sh, bash, python, php etc. previamente no terminal.
#!/usr/bin/env bashEste modelo acima utiliza env com a finalidade de localizar o interpretador Bash através da variável de ambiente $PATH, sem precisar especificar o caminho exato. Ao especificar o caminho em absoluto — com #!/usr/bin/bash — reduz-se a portabilidade do script, enquanto usar env previne erros que podem decorrer de alguma alteração de localização ou de nome do executável Bash.
Criar variáveis com Bash é similar a outras linguagens. Não existem tipos de dados. Uma variável em Bash pode conter um número, um caracter, uma string de caracteres etc.. Não é necessário declarar uma variável, bastando assinalar um valor para que a sua referência seja criada.
Exemplo:
str="Olá, Mundo"A linha acima cria uma variável str e assinala "Olá, Mundo" como valor para ela. O valor da variável é referenciado colocando um $no início do nome da variável.
Exemplo:
echo $strSaída:
Olá, MundoAssim como outras linguagens, o Bash também possui arrays. Um array é uma variável que contém múltiplos valores. Não existe um limite máximo para o tamanho do array. Em Bash, o primeiro elemento de um array é indexado como elemento 0. Existem muitas formas para criar arrays em Bash, conforme a seguir.
Exemplos:
array[0]=val
array[1]=val
array[2]=val
array=([2]=val [0]=val [1]=val)
array=(val val val)Para exibir um valor de um índice específico, use a seguinte sintaxe:
${array[i]} # em que i é o índiceSe nenhum índice for fornecido, o elmento 0 do array é assumido. Para saber quantos valores exisetem no array, use a seguinte sintaxe:
${#array[@]}O Bash também oferece suporte a condições ternárias. Veja alguns exemplos:
${varname:-word} # se o varname existe e não for nulo, retorna o seu valor; caso contrário, retorna word.
${varname:=word} # se o varname existe e não for nulo, retorna o seu valor; caso contrário, define-o como word e retorna o seu valor.
${varname:+word} # se o varname existe e não for nulo, retorna o seu valor; caso contrário, returna null.
${varname:offset:length} # realiza a expansão de substring. Retorna a substring de $varname, começando no ponto de expansão e indo até o final dos caracteres.Veja algumas das formas de sintaxe para manipular strings:
${variavel#parametro} # se o parâmetro corresponder ao início do valor da variável, exclui a parte mais curta que corresponde e retorna o restante.
${variavel##parametro} # se o parâmetro corresponder ao início do valor da variável, exclui a parte mais longa que corresponde e retorna o restante.
${variavel%parametro} # se o parâmetro corresponder ao final do valor da variável, exclui a parte mais curta que corresponde e retorna o restante.
${variavel%%parametro} # se o parâmetro corresponder ao final do valor da variável, exclui a parte mais longa que corresponde e retorna o restante.
${variavel/parametro/string} # a correspondência com o parâmetro mais longa na variável é substituída pela string. Apenas a primeira correspondência é substituída.
${variavel//parametro/string} # a correspondência com o parâmetro mais longa na variável é substituída pela string. Todas as correspondências são substituídas.
${#varname} # retorna o comprimento do valor da variável como uma sequência de caracteres.O Bash oferece vários truques de atalho para fazer diversas coisas com strings.
${variavel,,} # isso converte todas as letras da variável em minúsculas.
${variavel^^} # isso converte todas as letras da variável em maiúsculas.
${variavel:2:8} # isso retorna uma substring de uma string, começando no caractere de índice 2 (strings começam no índice 0, como explicitado acima, então esse é o terceiro caractere); a substring terá 8 caracteres, então isso retornaria uma string composta do 3º ao 11º caractere.Aqui estão alguns truques úteis para combinar parâmetros:
if [[ "$variavel" == *subString* ]] # isso retorna true se a subString fornecida estiver na variável.
if [[ "$variavel" != *subString* ]] # isso retorna true se a subString fornecida não estiver na variável.
if [[ "$variavel" == subString* ]] # isso retorna true se a variável começa com a subString fornecida.
if [[ "$variavel" == *subString ]] # isso retorna true se a variável termina com a subString fornecida.O truque acima pode ser encurtado usando uma instrução case e a palavra-chave INT:
case "$var" in
inicio*)
# a variável começa com "inicio"
;;
*subString*)
# a subString está na variável
;;
*outraSubString*)
# uma outraSubString está na variável
;;
esacComo em quase toda linguagem de programação, você pode usar funções para agrupar trechos de código de forma mais lógica ou praticar a divina arte da recursão. Declarar uma função é apenas uma questão de escrever function minha_func { meu_codigo }. Chamar uma função é como chamar outro programa: basta escrever o nome dela.
function nome() {
comandos shell
}Exemplo:
#!/bin/bash
function ola {
echo mundo!
}
ola
function diga {
echo $1
}
diga "ola mundo!"Ao executar o exemplo acima, a função ola retornará "mundo!". As duas funções ola e diga acima são estruturalmente idênticas. A principal diferença é que a função diga imprime o primeiro argumento recebido. Argumentos, dentro de funções, são tratados da mesma maneira que argumentos fornecidos ao script.
A instrução condicional em Bash é similar a outras linguagens de programação. As condições têm muitas formas, como a mais básica: a expressão if seguida da instrução then, em que a instrução só é executada se a expressão for verdadeira.
if [ expressao ]; then
será executado somente se a expressao for true
else
será executado se a expressao for false
fiÀs vezes, as condições se tornam confusas, então você pode escrever a mesma condição usando as instruções case.
case expressao in
parametro1 )
instrucoes ;;
parametro2 )
instrucoes ;;
...
esacExemplos de expressão:
instrucao1 && instrucao2 # ambas instruções são true
instrucao1 || instrucao2 # ao menos uma instrução é true
str1=str2 # str1 corresponde à str2
str1!=str2 # str1 não corresponde à str2
str1<str2 # str1 é menor que str2
str1>str2 # str1 é maior que str2
-n str1 # str1 é não nula (tem um comprimento maior que 0)
-z str1 # str1 é nula (tem comprimento 0)
-a arquivo # o arquivo existe
-d arquivo # o arquivo existe e é um diretório
-e arquivo # o arquivo existe; o mesmo que -a
-f arquivo # o arquivo existe e é regulare (i.e., não é um diretório ou outro tipo especial de arquivo)
-r arquivo # você tem permissão de leitura
-s arquivo # o arquivo existe e não está vazio
-w arquivo # você tem permissão de escrita
-x arquivo # você tem permição de execução do arquivo, ou permissão de busca pelo diretório, caso seja um
-N arquivo # o arquivo foi modificado desde a última leitura
-O arquivo # seu próprio arquivo
-G arquivo # o ID de grupo do arquivo corresponde ao seu
arquivo1 -nt arquivo2 # arquivo1 é mais novo do que o arquivo2
arquivo1 -ot arquivo2 # arquivo1 é mais velho do que o arquivo2
-lt # menor que
-le # menor que ou igual a
-eq # igual a
-ge # maior que ou igual a
-gt # maior que
-ne # não igual aExistem três tipos de Loop em Bash. for, while e until.
Sintaxe for:
for nome in [lista]
do
instrucoes que podem usar $nome
doneou ainda:
for (( inicializacao ; condicao final ; atualizacao ))
do
instrucoes
doneSintaxe de while:
while condicao; do
instrucoes
doneSintaxe de until:
until condicao; do
instrucoes
doneExiste uma ferramenta poderosa para manipular e buscar texto. Aqui estão alguns exemplos de expressões regulares que usam cada metacharacter:
| `.` ponto | `*` asterisco | `+` plus | `?` interrogação | `|` pipe | `[]` classe caracter | `[^]` classe caracter recusado | `()` agrupamento | `{}` quantificador | `\` escape |
Corresponde a qualquer caracter, exceto uma nova linha.
grep h.t arquivo.txtSaída:
hat
hot
hitCorresponde a zero ou mais ocorrências do caracter ou grupo precedente.
grep ab*c arquivo.txtSaída:
ac
abc
abbc
abbbcCorresponde a uma ou mais ocorrências do caracter ou grupo precedente.
grep ab+c arquivo.txtSaída:
abc
abbc
abbbc
abbbbcCorresponde a zero ou uma ocorrência do caracter ou grupo precedente.
grep ab?c arquivo.txtSaída:
ac
abcCorresponde ao parâmetro à esquerda ou ao parâmetro à direita.
egrep "gato|cachorro" arquivo.txtSaída:
gato
cachorroCorresponde a quaisquer caracteres que estão entre os colchetes.
[aeiou] # vai corresponder a qualquer vogal
[a-z] # vai corresponder a qualquer letra minúsculaCorresponde a quaisquer caracteres que não estão entre os colchetes.
[^aeiou] # vai corresponder a qualquer consoante
[^a-z] # vai corresponder a qualquer caracter que não seja letra minúsculaAgrupa vários tokens juntos e cria um grupo de captura.
egrep "(ab)+" arquivo.txtSaída:
ab
abab
abababCorresponde a um número específico de ocorrências de um caracter ou grupo precedente.
egrep "a{3}" arquivo.txtSaída:
aaa
aaaa
aaaaaRemove o significado especial no Bash do próximo caractere para preservar seu valor literal, exceto para o caracter n, com o qual cria uma nova linha na combinação \n.
egrep "a\+" arquivo.txtSaída:
a+Mais detalhes a respeito do escape podem ser encontrados no link
Vários comandos podem ser vinculados um ao outro através de um pipe, |. Um | enviará a saída padrão (standard-output) do comando A para a entrada padrão (standard-input) do comando B.
Os pipes também podem ser usados com os símbolos |&. Essa combinação enviará o standard-output e o erro padrão (standard-error) do comando A para o standard-input do comando B.
Execute nano ~/.bash_profile e adicione a seguinte linha:
alias dockerlogin='ssh www-data@tuxmarrento.local -p2222' # adiciona seu alias ao arquivo .bash_profileExecute nano ~/.bashrc e adicione a seguinte linha:
export hotellogs="/workspace/hotel-api/storage/logs"Agora você pode executar source ~/.bash_profile e usar o caminho salvo chamando-o como uma variável:
source ~/.bashrc
cd $hotellogsIsso remonta ao tempo em que ainda não se podia confiar na tecla de seta para cima, mas ainda pode ser útil para executar o último comando do seu histórico.
!!Um erro comum é esquecer de usar sudo como prefixo de um comando que requer execução privilegiada. Em vez de digitar o comando inteiro novamente, você pode:
sudo !!Isso corrigiria um mkdir qualquerdir com sudo mkdir qualquerdir.
Torne seus scripts bash mais robustos realizando limpezas de forma confiável.
function final {
# sua limpeza aqui; por exemplo, encerrar qualquer fork de processo
jobs -p | xargs kill
}
trap final EXITQuando você faz export FOO=BAR, a sua variável é exportada apenas no shell atual e todos os seus filhos. Para persistir em outras sessões, você pode simplesmente anexar ao seu arquivo ~/.bash_profile o comando para exportar suas variáveis.
echo export FOO=BAR >> ~/.bash_profileVocê pode acessar os seus scripts facilmente criando um diretório bin em seu diretório home com mkdir ~/bin. Agora, todos os scripts que você colocar nessa pasta poderão ser acessados em qualquer diretório.
Se você não conseguir acessar, tente acrescentar o código abaixo ao seu arquivo ~/.bash_profile e depois execute source ~/.bash_profile.
# defina o PATH para incluir o bin privado do usuário, se existir
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fiVocê pode depurar facilmente o script bash passando diferentes opções para o comando bash. Por exemplo:
-nnão executará comandos e verificará apenas erros de sintaxe;-vmostrará os comandos antes de executá-los;-xmostrará os comandos após o processamento da linha de comando.
bash -n nomeDoScript
bash -v nomeDoScript
bash -x nomeDoScript- Identificou algum erro ou problema? Por favor, relate. Saiba como.
- Abra um pull request com aprimoramentos. Saiba como.
- Compartilhe!
