Escolar Documentos
Profissional Documentos
Cultura Documentos
O primeiro Shell disponível para Unix foi o Bourne Shell (sh), hoje
substituído em muitos sistemas pelo Bourne Again Shell (bash). Depois do
Bourne Shell muitos outros shells foram desenvolvidos, como o Korn Shell
(ksh) e o C Shell (csh) entre outros.
Scripts em Shell são excelentes em sistemas onde não podemos assumir a pré
existência de outras linguagens, como Python ou Perl ou mesmo em scripts
que rodam durante o start-up do sistemas operacional para levantar os serviços
necessários e fazer as configurações dos usuários. Também são uma ótima
pedida em situações simples para administradores, instaladores e como
ferramenta didática para programadores iniciantes. Sistemas Shell mais
complexos podem arriscar sua portabilidade, pois existem diferenças de
implementação entre os shells existentes (Bash, Korn, C) além da
possibilidade da não existência de um determinado comando no sistema que
executará sua aplicação.
Controle de Jobs;
Funções;
Alias;
Redirecionamento;
Histórico de comandos;
Editor de comandos;
Auto-Completar;
O Bash, como hell padrão do projeto GNU atende a todos estes requisitos do
padrão Posix e as qualidades de um shell moderno listadas acima.
Apesar do Bash ser o shell padrão do Linux, diversos outros podem existir na
instalação. O shell padrão de cada usuário é definido no arquivo /etc/passwd:
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
thiago:x:500:500::/home/thiago:/bin/bash
$
Se você, por alguma razão, preferir outro shell ao bash pode alterar o shell
padrão do seu usuário com o comando chsh:
$chsh thiago
Alterando o interpretador de comandos para o usu��ário thiago.
Senha:
Novo interpretador de comandos [/bin/bash]: /bin/ksh
Interpretador de comandos alterado.
Depois saia do shell com o comando logout e log no sistema novamente. Veja
o seu novo shell:
$ echo $SHELL
/bin/ksh
$
E no arquivo /etc/passwd
$ grep thiago /etc/passwd
thiago:x:500:500::/home/thiago:/bin/ksh
$
Exemplo:
$ ls -la $HOME
total 40
drwx------ 3 thiago thiago 4096 Mai 4 11:28 .
drwxr-xr-x 4 root root 4096 Mai 3 16:15 ..
-rw------- 1 thiago thiago 2155 Mai 4 13:02 .bash_history
-rw-r--r-- 1 thiago thiago 33 Mai 3 16:15 .bash_logout
-rw-r--r-- 1 thiago thiago 176 Mai 3 16:15 .bash_profile
-rw-r--r-- 1 thiago thiago 124 Mai 3 16:15 .bashrc
drwxr-xr-x 4 thiago thiago 4096 Mai 3 16:15 .mozilla
-rw------- 1 thiago thiago 134 Mai 4 13:02 .sh_history
-rw-r--r-- 1 thiago thiago 658 Mai 3 16:15 .zshrc
$ cd /etc
$ pwd
/etc
$
Quando você precisar executar uma sequência muito grande de comandos
podemos utilizar o caractere \ para fazer quebra de linha e facilitar a leitura da
linha ou script:
# ls -lR /etc > | wc -l
2570
#
Se houver apenas uma possibilidade de comando, ela irá aparecer na tela após
o tab:
$ calle <tab>
$ caller
exemplo:
$ echo "Usuario:home_dir:login_shell";grep thiago /etc/passwd
|cut -d: -f1,6-7
&& echo "estatus do comando: $?"
Usuario:home_dir:login_shell
thiago:/home/thiago:/bin/bash
estatus do comando: 0
$
Perceba: uma vez que a execução do comando anterior teve sucesso o valor de
$? foi setado para zero. Caso eu utilize um comando incorreto, inexistente ou
que eu não tenho permissão $? receberá um valor diferente de 0.
exemplo:
$ comando_inexistente ; echo "Erro $?"
-bash: comando_inexistente: command not found
Erro 127
$ rm / || echo "Erro. $?"
rm: cannot remove directory `/': �� um diretório
Erro. 1
$ rm -rf /root || echo "Erro: $?"
rm: cannot chdir from `.' to `/root': Permissão negada
Erro: 1
Neste exemplo você pode ver o comando pode ser executado dentro de $( ),
em $( ls *.pl ). Da mesma maneira que fosse uma variável, mas o valor não é
atribuído a nenhuma variável real.
Agora que eu sei quais os subdiretórios diretamente abaixo, basta clicar a seta
para cima que o shell vai colocar o comando anterior ls /var na linha de
comando e eu só preciso digitar a pasta que quero listar, abaixo de /var. Assim
eu só vou digitar /www pois ls /var foi posto no meu prompt pelo histórico:
$ ls /var/www
cgi-bin htdocs kumera-0.3.tar.gz library news tools
data index.html lib media teste.asp
Isto se torna extremamente útil quando estamos lidando com comandos muito
extensos que possuem diversos pipes, argumentos muito longos, etc... e
iremos executar comandos diferentes com argumentos repetidos ou
argumentos diferentes com o mesmo comando.
Configuração do Histórico