Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
unix:shell_basico [2008/05/09 17:18] – external edit 127.0.0.1 | unix:shell_basico [2020/08/18 22:16] (atual) – edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== UNIX: Uso básico do Shell ====== | ||
+ | |||
+ | ===== O shell ===== | ||
+ | |||
+ | O //shell// é o programa que permite a interação do usuário com o sistema, em modo texto. Em UNIX existem vários tipos de //shell//, com funcionalidades diversas. Os mais conhecidos são: | ||
+ | |||
+ | * //Bourne shell// (sh): o mais antigo, está presente em quase todos os sistemas, pois é necessário para diversas operações administrativas. | ||
+ | * //C shell// (csh): de sintaxe mais simples, é mais fácil de usar e por isso preferido pelos usuários iniciantes. É o //shell// default do sistema // | ||
+ | * //Korn shell// (ksh): mistura características de ambos os anteriores. Muito usado em ambientes IBM e HP. | ||
+ | * //BASH Shell// (bash): // | ||
+ | |||
+ | Neste curso estaremos usando o //shell// chamado **bash**. Para informações específicas sobre esse **shell** consulte sua página de manual ('' | ||
+ | |||
+ | ===== A linha de comando ===== | ||
+ | |||
+ | O uso do //shell// se baseia em comandos digitados em uma linha de comando. Os comandos têm normalmente a seguinte sintaxe: | ||
+ | |||
+ | '' | ||
+ | |||
+ | Por exemplo: | ||
+ | |||
+ | < | ||
+ | $ ls -l /etc | ||
+ | </ | ||
+ | |||
+ | Cada comando possui suas opções, que podem ser conhecidas através da página de manual respectiva. Ao receber um comando digitado pelo usuário, o //shell// executa as seguintes ações, em sequência: | ||
+ | |||
+ | - ler a linha de comando e quebrá-la em palavras | ||
+ | - armazenar a linha no histórico | ||
+ | - resolver variáveis de ambiente | ||
+ | - resolver aliases de comandos | ||
+ | - resolver // | ||
+ | - lançar cada um dos comandos com seus parâmetros | ||
+ | - esperar o fim dos comandos | ||
+ | - voltar ao início | ||
+ | |||
+ | Essas ações são executadas repetidamente até o encerramento do //shell//, seja pela morte do processo ou pelo comando '' | ||
+ | |||
+ | ===== Wildcards ===== | ||
+ | |||
+ | // | ||
+ | |||
+ | '' | ||
+ | |||
+ | < | ||
+ | $ ls -l /usr/bin/c* | ||
+ | </ | ||
+ | |||
+ | Idem, arquivos cujo nome contém a //string// '''' | ||
+ | |||
+ | < | ||
+ | $ ls -l / | ||
+ | </ | ||
+ | |||
+ | Idem, arquivos cujo nome contém as letras '' | ||
+ | |||
+ | < | ||
+ | $ ls -l / | ||
+ | </ | ||
+ | |||
+ | ''?'' | ||
+ | |||
+ | < | ||
+ | $ ls -l /etc/??? | ||
+ | </ | ||
+ | |||
+ | Idem, arquivos cujo nome contém '' | ||
+ | |||
+ | < | ||
+ | $ ls -l /etc/?a* | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | < | ||
+ | $ ls -l / | ||
+ | </ | ||
+ | |||
+ | Idem, arquivos contendo dois dígitos consecutivos: | ||
+ | |||
+ | < | ||
+ | $ ls -l / | ||
+ | </ | ||
+ | |||
+ | '' | ||
+ | |||
+ | < | ||
+ | $ rm / | ||
+ | </ | ||
+ | |||
+ | Idem, para remover arquivos contendo as strings '' | ||
+ | |||
+ | < | ||
+ | $ rm / | ||
+ | </ | ||
+ | |||
+ | ===== Variáveis ===== | ||
+ | |||
+ | O //shell// permite a criação de variáveis para armazenar valores durante uma sessão de trabalho ou em scripts. Existem dois tipos de variáveis: locais e exportáveis ou variáveis de ambiente. | ||
+ | |||
+ | As variáveis exportáveis ou de ambiente: são acessíveis a todos os comandos lançados pelo //shell// (são transferidas a todos os processos filhos daquele //shell//). Normalmente são escritas em letras maiúsculas. Para criar uma variável de ambiente basta executar '' | ||
+ | |||
+ | < | ||
+ | $ export JDKHOME=/ | ||
+ | $ echo $JDKHOME | ||
+ | $ unset JDKHOME | ||
+ | </ | ||
+ | |||
+ | Para acessar o conteúdo de uma variável basta utilizar o caractere $ antes do nome da variável. Um outro exemplo de utilização: | ||
+ | |||
+ | < | ||
+ | $ export JDKHOME=/ | ||
+ | $ echo ${JDKHOME} | ||
+ | $ unset JDKHOME | ||
+ | </ | ||
+ | |||
+ | Algumas variáveis de ambiente exportáveis têm valor pré-definido pelo //shell//, e são importantes para o funcionamento normal da sessão de trabalho. Vejamos as principais (a lista de variáveis exportáveis pode ser consultada através do comando '' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | As variáveis locais são acessíveis somente dentro do //shell// onde foram criadas. Para criar uma variável local basta fazer '' | ||
+ | |||
+ | < | ||
+ | $ nome=joao | ||
+ | $ echo $nome | ||
+ | $ touch $nome.txt | ||
+ | $ unset nome | ||
+ | $ nomes=( joao maria pedro antonio ) | ||
+ | $ echo ${nomes[2]} | ||
+ | $ mkdir ${nomes[3]} | ||
+ | $ unset nomes | ||
+ | </ | ||
+ | |||
+ | As variáveis locais podem armazenar listas de valores, úteis sobretudo na construção de // | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Vejamos alguns exemplos: | ||
+ | |||
+ | < | ||
+ | $ nome=( joao maria pedro antonio luis ) | ||
+ | $ echo $nome | ||
+ | joao | ||
+ | $ echo ${nome[3]} | ||
+ | antonio | ||
+ | $ echo ${#nome[@]} | ||
+ | 5 | ||
+ | $ echo ${#nome} | ||
+ | 4 | ||
+ | </ | ||
+ | |||
+ | ===== Aliases ===== | ||
+ | |||
+ | O //shell// permite facilmente a criação de novos comandos ou a redefinição de comandos já existentes, através de aliases. Por exemplo, para criar um alias '' | ||
+ | |||
+ | < | ||
+ | $ alias copy=' | ||
+ | </ | ||
+ | |||
+ | Assim, '' | ||
+ | |||
+ | < | ||
+ | $ alias ola=' | ||
+ | </ | ||
+ | |||
+ | Para desativar um alias basta usar o comando '' | ||
+ | |||
+ | < | ||
+ | $ unalias ola | ||
+ | </ | ||
+ | |||
+ | Os aliases existentes na sessão podem ser consultados usando o comando '' | ||
+ | |||
+ | ===== Histórico ===== | ||
+ | |||
+ | Todos os comandos executados em uma sessão são memorizados pelo //shell//, e podem ser consultados e reexecutados quando desejado. Para consultar o histórico basta executar o comando '' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ===== Configuração ===== | ||
+ | |||
+ | Ao ser lançado, o //shell// lê arquivos de configuração que contém comandos para definir o ambiente de trabalho de cada usuário. A sintaxe dos arquivos de configuração é bastante simples, similar à sintaxe das linhas de comando. O //Shell Bash// lê os arquivos de configuração, | ||
+ | |||
+ | * ''/ | ||
+ | * '' | ||
+ | * ''/ | ||
+ | * '' | ||
+ | |||
+ | Para criar variáveis e aliases permanentes, | ||
+ | |||
+ | < | ||
+ | alias ola=' | ||
+ | </ | ||
+ | |||
+ | no arquivo '' | ||
+ | |||
+ | ===== Exercícios ===== | ||
+ | |||
+ | - Crie aliases para os comandos '' | ||
+ | - Coloque uma mensagem de boas-vindas na inicialização do //shell//, com o conteúdo abaixo. Para as linhas de data e hora, consulte as páginas de manual dos comandos '' | ||
+ | |||
+ | < | ||
+ | Ola usuário joão | ||
+ | Seja bem-vindo à máquina server1 | ||
+ | Data: 07/04/1999 | ||
+ | Horário: 19:35:42 | ||
+ | </ | ||
+ | |||