Skip to content

SHELL SCRIPT

bash
####REVISÃO COMANDO#####

echo $0 ou echo $SHELL # Mostra qual shell está sendo utilizado

ps axu # Mostra todos os processos

echo -n # Mostra o texto e não quebra a linha

echo -e #Habilita aceitar opções de tabulação

#tr - Substitui ou deleta strings
cat alunos.txt | tr a-z A-Z #==> altera tudo pra maíusculo
cat alunos.txt | tr aei AEI #=> Troca pra maiusculo apenas as vogais
cat alunos2.txt | tr ' ' '\t' | cat -A #=> Altera espaços por tab. O cat -A mostra os espaços e tab's do arquivo
cat alunos2.txt | tr -d aei #=> deleta as vogais aei.
echo "shell script" | tr -s l #=> comprime caracteres repetidos. -s =shring. ==> nesse caso ele só vai deixar 1 l no shell

#cut - Recorta partes do texto
cat alunos2.txt | cut -c1-5 #=> Mostra apenas os caracteres de 1-5 de cada linha
cat alunos2.txt | cut -c1,5,6 #=> Mostra os caracteres 1,5 e 6 de cada linha
cat alunos2.txt | cut -c5- #=> Mostra do caractere 5 pra frente em cada linha
cat alunos2.txt | cut -c-5 #=> Mostra até o caractere 5. Nada mais pra frente disso.
cat alunos2.txt | cut -d" " -f1 #=> Mostra apenas a primeira coluna. O -d é de delimitar, no caso espaço é o delimitador do exemplo, mas pode ser tab, etc.
cat alunos2.txt | cut -d" " -f1,3 #=> idem acima mas mostra o campo 1 e 3, caso ele exista.
cat alunos2.txt | cut -d" " -f-2 #Mostra até o campo 2. caso tenha mais de 2 colunas já não mostra
cat /etc/passwd | cut -d":" -f1,5 #Mostra os campos 1 e 5 do passwd, usando delimitador :

# diff => compara diferença entre arquivos e diretórios
diff arquivo1 arquivo2 #=> mostra as diferenças do conteudo dos 2 arquivos. Considera espaços em branco
diff -d diretorio1 diretorio2 #=> Mostra as diferenças entre 2 diretórios

#grep => Procura um conteúdo em uma string de texto.
egrep #Aceita regex extendidas
fgrep #Não aceita regex.
grep Claudia alunos2.txt #=> Retorna as linhas que tem o nome Claudia no arquivo
grep Claudia alunos* #=> Retorna as linhas em todos os arquivos que iniciam com "alunos".
grep Usuario1 alunos* #=> Retorna todas as linhas que contém a palavra Usuario1
grep "Usuario1 Lucas" alunos*  #=> Retorna a string completa "Usuario1 Lucas". Mesmo que tenha varios Usuario1
grep -i ADEMAR alunos* #=> Retorna o nome Usuario1 ignorando o case-sensitive
grep -c Ana alunos.txt #=> Conta quantas ocorrências a palavra Ana aparece no arquivo. Só trás o número.
grep -c Ana alunos* #=> Conta as ocorrências por arquivo, pois o * pode trazer varios alunos.txt alunos2, alunos3, etc
grep -v Ana alunos.txt #=> Retorna todas as linhas que não possui a palavra Ana. Ele tira toda linha
grep -r Ana * # Procura recursivamente a palavra ana no diretório e em todos os subdiretórios
grep -lr Ana * # Retorna os arquivos apenas e não as linhas que possuem a string. No caso retorna os arquivos que dão match com a consulta.
grep -A3 Carlos alunos2.txt # Procura o nome Carlos e retorna 3 linhas depois(abaixo) da ocorrência. UTIL PARA LOGS
grep -B3 Carlos alunos2.txt # Procura o nome Carlos e retorna 3 linhas antes(acima) da ocorrência. UTIL PARA LOGS

#sed => Filtra e faz transformações de texto.
sed '1,3 d' alunos2.txt # Deleta da linha 1 à linha3 do arquivo.(Não deleta conteúdo do arquivo. Ele só apresenta o conteúdo do arquivo com as linhas deletadas
sed '/Usuario1/d' # Deleta todas as linhas que tenham usuario1
sed 's/Usuario1/Jose/g' # Substitui Usuario1 por José. O g é de global
echo "Usuario1 lucas da silva" | sed 's/Usuario1/Jose/g' # Idem acima porém com comando de entrada usando |
echo "Usuario1 lucas da silva" | sed 's/ //g' # Tira os espaços. Texto fica todo colado.

#find => Procura arquivos e diretórios
find ./ -name alunos*  #=> procura recursivamente o arquivos que inicia com alunos*
find ./ -user usuario1 -name alunos2.txt #Retorna tudo que o usuário do arquivo for usuario1 e o nome do arquivo for alunos2.txt
find ./ -name "alunos*" -exec ls -l {} \; # Faz o comando ls em todos os arquivos encontrados pelo find no diretorio e subdiretorios. Obrigatório por o -exec <comando> e o {} \. O {} é um placeholder. O \ é um terminador pro find saber qdo acabar o comando.

#date => mostra o horário do sistema
date +%H # Mostra hora (24h)
date +%H%M%S #Mostra horas minutos e segundos

#seq => Mostra uma sequencia de números
seq 10 #=>Gera numeros de 1 a 10
seq 5 12 #=> Gera numeros de 5 até 12.
seq 10 2 20 #=> Gera numeros do 10 até o 20, incrementando de 2 em 2. e.g: 10 12 14 16 18 20

#expr => faz operações aritméticas.(calc)
expr 5 + 2 # = 7
expr 5 - 2 # = 3
expr 4 / 2 # = 2
expr 3 "*" 3 # = 9

#bc = Faz operações aritmeticas usando como saídas do echo.
echo "(3+2)*5" | bc #25

Execução sequencial de comandos

bash
cat alunox.txt | wc -l #=> Joga a saida do cat para o wc -l

data; echo Linux ; ls #Executa um comando atrás do outro de forma independente.

cd .. ; ls -l #=> executa o comando ls -l no diretório anterior. você faz a troca do diretório e o ls -l em um comando

( cd .. ; ls -l ) #=> executa o comando ls -l no diretório anterior sem sair do diretório atual.

Upload file

PROPÓSITO

Ter à mão a sintaxe dos comandos de manipulação de texto — tr, cut e afins — com um exemplo de cada opção.

Quando usar: Ao escrever ou ler um script e precisar lembrar o que uma flag faz.

Pré-requisitos: Nenhum. É material de consulta.