Primeiros passos em Shell Script Projeto Casa Brasil Oficina: Unidade CB de Imperatriz - MA TEC Daniela Montelo - MA/PA Roteiro PARTE 01 ➲ Ambientação ➲ Visão Geral: ambientes linux e shell ➲ Principais Shells ➲ Funcionamento do Shell ➲ Caracteres especiais para o Shell ➲ Dicas de Shell PARTE 02 ➲ Redirecionamento de comandos ➲ Caracteres de Ambiente ➲ Referências Ambientação Diálogo entreouvido entre um Linuxer e um empurrador de mouse: - Quem é o Bash? - O Bash é o filho mais novo da família Shell. - Pô cara! Estás a fim de me deixar maluco? Eu tinha uma dúvida e você me deixa com duas! - Não, maluco você já é há muito tempo. Desde que se decidiu a usar aquele sistema operacional que você tem que dar dez boots por dia e não tem domínio nenhum sobre o que esta acontecendo no seu computador. Mas deixa isso prá lá, vou te explicar o que é Shell e os componentes de sua família e ao final da explanação você dirá: "Meu Deus do Shell! Porque eu não optei pelo Linux antes?". Visão Geral ➲ Ambiente Linux Visão Geral ➲ Ambiente Shell Linux multiusuário; Arquivo /etc/passwd; Login – recebe shell; Segurança com shell; Shell – concha que envolve o S.O. Ambiente Shell ➲ /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh sshd:x:114:65534::/var/run/sshd:/usr/sbin/nologin debian:x:1000:1000:debian,,,:/home/debian:/bin/bash gilvan:x:1001:1000:,,,,:/home/gilvan:/bin/bash brunini:x:1002:1000:,,,,:/home/brunini:/bin/bash sacix1:x:1003:1003:,,,,:/home/sacix1:/bin/bash sacix2:x:1004:1004:,,,,:/home/sacix2:/bin/bash Principais Shells ➲ ➲ Principais Shells: sh (Bourne Shell), ksh (Korn Shell), bash (Bourne Again Shell) e csh (C Shell). SHELLs Bourne Shell (sh) - desenvolvido por Stephen Bourne da Bell Labs (da AT&T onde também foi desenvolvido o Unix), este foi durante muitos anos o Shell default do sistema operacional Unix. É também chamado de Standard Shell por ter sido durante vários anos o único e até hoje é o mais utilizado até porque ele foi portado para todos os ambientes Unix e distros Linux. Principais Shells ➲ SHELLs Korn Shell (ksh) - desenvolvido por David Korn, também da Bell Labs, é um superset do sh, isto é, possui todas as facilidades do sh e a elas agregou muitas outras. A compatibilidade total com o sh vem trazendo muitos usuários e programadores de Shell para este ambiente. Boune Again Shell (bash) - este é o Shell mais moderno e cujo número de adeptos mais cresce em todo o mundo, seja por ser o Shell default do Linux, seu sistema operacional hospedeiro, seja por sua grande diversidade de comandos, que incorpora inclusive diversos instruções características do C Shell. C Shell (csh) - desenvolvido por Bill Joy da Berkley University é o Shell mais utilizado em ambientes *BSD e Xenix. A estruturação de seus comandos é bem similar à da linguagem C. Seu grande pecado foi ignorar a compatibilidade com o sh, partindo por um caminho próprio. Além destes Shells existem outros, mas os trataremos genericamente por Shell. Funcionamento do Shell ➲ Shell – primeiro programa no login ➲ Interpreta comandos ➲ Poderosa linguagem com comandos de alto nível, que permite construção de loops (laços), de tomadas de decisão e de armazenamento de valores em variáveis ➲ Ordem de funcionamento do shell: Exame da linha de comando, Atribuição, Comando, Redirecionamento, Substituição de variáveis e meta caracteres, Passar linha de comando para o kernel. Exemplos ➲ Exemplos de funcionamento do shell: ls diretório, var = 100; var=100; echo var; echo $var Caracteres especiais para o Shell ➲ Caracteres para remoção do significado Apóstrofo ou plic ( ' ): $ ls nome*; $ ls 'nome*' Contrabarra ou barra invertida ( \ ): $ ls casa brasil; ls casa\ brasil $ cd /etc,$ echo '*', $ echo \*, $ echo * Aspas ( “ ): igual ao apóstrofo exceto que, se a cadeia entre aspas contiver um cifrão ($), uma crase (`), ou uma barra invertida (\), estes caracteres serão interpretados pelo Shell. Caracteres especiais para o Shell ➲ Caracteres para redirecionamento Comando: entrada, saída, erros Stdin – teclado, stdout – tela, stderr – tela $ cat, $cat > teste, $cat >> teste Redirecionamento da saída de erro padrão: 2> nome_arquivo Ex: $nano arquivo rm /tmp/arquivo$$ 2> /dev/null $ls naoexiste $ls naoexiste 2> arquivodeerros $cat arquivodeerros Dicas de Shell ➲ Dica # 1 ➲ O $$ contém o PID, isto é, o número do seu processo. Como o Linux é multiusuário, é bom anexar sempre o $$ ao nome dos dos arquivos que serão usados por várias pessoas para não haver problema de propriedade, isto é, caso você batizasse o seu arquivo simplesmente como seraqueexiste, o primeiro que o usasse (criando-o então) seria o seu dono e todos os outros ganhariam um erro quando tentassem gravar algo nele. Dica # 2 - Quem é esse tal de /dev/null? - Em Unix existe um arquivo fantasma. Chama-se /dev/null. Tudo que é mandado para este arquivo some. Assemelha-se a um Buraco Negro. No caso do exemplo, como não me interessava guardar a possível mensagem de erro oriunda do comando rm, redirecionei-a para este arquivo. É interessante notar que estes caracteres de redirecionamento são cumulativos, isto é, se no exemplo anterior fizéssemos: $ ls naoexiste 2>> arquivodeerros PARTE 02 ➲ ➲ Redirecionamento de comandos Caracteres de Ambiente Redirecionamento de comandos ➲ Redirecionamento de comandos cat < arquivo ftp -ivn hostremoto << fimftp user $Usuário $Senha binary get arquivoremoto fimftp ➲ $ ls | wc -l ➲ $ cat /etc/passwd |sort | lp Caracteres de Ambiente ➲ Caracteres de Ambiente $ who | wc -l $ echo "Existem who | wc -l usuários conectados" $ echo "Existem `who | wc -l` usuários conectados" $ echo Existem `who | wc -l` usuários conectados $ pwd ; cd /etc; pwd; cd -; pwd $ (pwd ; cd /etc ; pwd;) $ pwd ➲ ➲ ➲ ➲ ➲ ➲ Referências ➲ Livro de Shell em português, disponível em: http://twiki.softwarelivre.org/TWikiBar/WebHome#Livro_de_Shell_em_Portugu_s ➲ TwikiBar – wiki com materiais sobre shell, disponível em: http://twiki.softwarelivre.org/TWikiBar/WebHome ➲ NEVES, Júlio Cesar. Programação Shell Linux, 6ª edição, Ed. Brasport, 2006. ➲ Curiosidades: http://pt.wikipedia.org/wiki/JeanFran%C3%A7ois_Champollion