Esse conteúdo é uma breve explicação do que é o SHELL e como utilizá-lo, originalmente feito por Pedro H. P. Souza (@predoff) para ser apresentado na Tagview.
A apresentação foi feita utilizando o impress.js. Você pode conferir o resultado aqui.
Shell é uma interface que permite a interação do usuário com o sistema operacional (Kernel) através de linhas de comandos.
O primeiro shell Unix, o Thompson shell foi criado por Ken Thompson, uma das principal influência do UNIX. O SHELL que usamos normalmente é o bash, Bourne-again shell, escrito por Brian Fox para o Projeto GNU, isso quer dizer que se trata de um software livre.
Para vermos qual shell estamos utilizando digite: $ echo $SHELL
Listar shell disponíveis: $ cat /etc/shells
- Possui boas ferramentas para manipulação de arquivos e troca de dados de um programa para outro.
- Obtenção rápida de informações sobre o SO (Quick and dirty).
- Velocidade de execução lenta (Precisa abrir um novo processo quase toda vez que um comando é executado).
Para Sistemas Linux ou Mac OS basta abrir o Terminal para começar a usar o Shell. Já no caso de Windows, temos o ambiente Command.com, porém ele não oferece todas as funcionalidades atuais dos shells do Unix, para resolver essa limitação é necessário instalar outro shell, como por exemplo o Cygwin.
São variáveis geradas pelo sistema operacional ou pelo próprio usuário. Elas não possuem tipo, aceitam número, caracter, string.
Acessíveis em todos os SHELLS. Para listar as variáveis disponíveis digite $ env
ou $ printenv
Exemplos:
- PATH (Lista de caminhos de diretórios, para serem usados de fora da pasta corrente);
- HOME (Exibe o diretório raiz);
- SHELL (Shell padrão).
Acessível apenas no escopo definido. Para lista as variáveis locais digite $ set
.
Caso queira que essa variável seja acessível em um script use $ export
.
Criando variável: $ TESTE=1
Imprimir variável: $ echo $TESTE=1
Exemplo de export
:
$ export HELLO="oi"
$ sh hello.sh
O Shell disponibiliza comandos caso precise saber detalhes ou dúvidas de como utilizar certo comando. São eles:
man
ouinfo
: Exibe o manual do comando.whatis
: Exibe pequena descrição sobre o comando.apropos
: Busca na descrição (whatis) o termo pedido.whereis
: Exibe o diretório binário.type
: Exibe o tipo de comando (Ver mais sobre tipos de comandos).history
: Exibe últimos comandos executados.
Exemplos:
$ man ruby
$ apropos ruby
$ whereis ruby
Segue abaixo alguns atalhos úteis para serem utilizados no terminal:
- CTRL + L: Limpa a tela.
- CTRL + U: Limpa linha.
- CTRL + C: Cancela o comando que está sendo executado.
- CTRL + R: Procura por comandos no histórico.
- Tab: Auto-complete (não deixe de usar esse comando!!!!)
São palavras reservadas pelo Shell que não podem ser utilizadas para nomear variáveis e funções. Para lista: man builtin
São opções adicionadas ao comando para que executem algo especial. Não é possível a fusão de chaves que possuem parâmetro, ou mais de uma letra, ou quando chave é com menos menos.
Exemplos:
$ ls -l
$ ls -lh
$ ls -l -h
$ grep -r --color Shell .
Utilizando o caracter ponto e vírgula é possível concatenar comandos, ou seja, executar um após o outro.
Exemplo:
cd exercicios ; cat oi.txt ;
Conectar comandos é executar um comando baseado no resultado gerado de outro comando, mediante o uso do caracter pipe |
Curiosidade:
O conceito de conexão de comandos foi criado por Douglas Mcllroy, na década de 1950, e implementado no Unix por Ken Thompson. O próprio Douglas nunca conseguira implementá-lo em nenhum sistema e ficou maravilhado quando Thompson o fez em apenas uma noite.
Exemplo:
cat hello.sh | grep $
Uma operação recursiva ocorre quando ela varre diretórios e seus diretórios "filhos" recursivamente. Essa varredura deve ser para baixo, por isso seus diretórios "filhos". Dependendo do comando a recursividade é implementada de forma diferente.
Exemplos:
ls -R
grep -r --color Shell ../
São caracteres que podem ser utilizados como coringas para ajudar a trabalhar com nome de arquivos,
substituindo outros caracteres ou sequências de caracteres.
Os coringas disponíveis são o asterisco *
, interrogação ?
e colchetes []
Substitui 0 ou muitos caracteres
Exemplo:
$ ls *.sh
$ ls *.*
Substitui 1 caracter, é obrigatório ter esse caracter.
Exemplo:
$ cp teste.?? teste2.sh
Substitui um grupo de caracters. Você pode negar esse grupo utilizando !
Exemplos:
$ rm teste[1-9].sh
$ rm teste[!a-zA-Z].sh
Alias é uma forma de criar um atalho para simplificar um comando.
Exemplo:
$ alias grep="grep --color"
$ unalias grep # como remover um alias
Técnica para exportação do resultado de um comando para um arquivo externo. Por exemplo:
$ echo "oi" > log.txt
Para escrever no final do arquivo, ao invés de subscrever utilize dois <<
:
$ echo "tchau" >> log.txt
Esses comandos não salvam no arquivo externo as mensagens de erro, se quiser utilize o número 2 na frente:
$ ls xyz 2> log.txt
$ ls xyz 2>> log.txt
ls /etc | grep s.el
- &&: Sucesso na operação anterior.
- ||: Falha na operação anterior.
Exemplo:
if (false) then
echo "false is true"
else
echo "false is false"
fi
Comandos Unix retornam zero (0) quando executam com sucesso, ou seja, qualquer outro retorno é igual a false.
exit 0 # é true
exit 1 # é false
exit -1 # é false
for i in 1 2 3
do
echo "$i"
done
function hello_world {
echo "Olá"
}
O bash interpreta e executa os comandos desses arquivos quando uma nova janela do terminal é aberta.
Nesse arquivo você pode alterar variáveis, criar aliases, executar comandos, etc.
A diferença entre esses arquivos é que o .bashrc é executado sem a necessidade de login,
já o .bash_profile
é executado apenas com login e pode variar de acordo com o usuário.
Caso queira alterá-lo, ele fica localizado no diretório raiz (cd ~
).
Caso queira colocar em prática os conceitos apresentados aqui, faça os exercícios Outros exercícios e exemplos de shell disponíveis na web: