Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Curso de Shell - Aula 1

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    Curso de Shell - Aula 1

    Por: Alex Borro

    Introdução

    O que são os shell scripts? Shell scripts são conjuntos de comandos armazenados em um arquivo texto que são executados seqüencialmente. Nesta primeira parte, faremos uma introdução sobre o shell, o formato desses arquivos e variáveis de ambiente.

    O que é Shell

    Shell, ou interpretador de comandos, é o programa disparado logo após o login responsável por "pegar" os comandos do usuário, interpretá-los e executar uma determinada ação.

    Por exemplo, quando você escreve no console "ls" e pressiona , o shell lê essa string e verifica se existe algum comando interno (embutido no próprio shell) com esse nome. Se houver, ele executa esse comando interno. Caso contrário, ele vai procurar no PATH por algum programa que tenha esse nome. Se encontrar, ele executa esse programa, caso contrário, ele retorna uma mensagem de erro. Para cada terminal ou console aberto, existe um shell sendo executado. Quando você entra no seu Linux, ele apresenta o login, para digitar o Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... e a senha. Ao digitar um par usuário/senha correto, o Linux abre automaticamente um shell, que vai ficar esperando seus comandos. Veja o exemplo abaixo:

    Welcome to Linux Slackware 10.1 kernel 2.4.16.

    matrix login: neo
    Password:

    Linux 2.2.16.
    Last login: Mon Sep 25 10:41:12 -0300 2000 on tty1.
    No mail.

    neo@matrix:~$

    Essa ultima linha é o shell. Se você der o comando "ps", vai ver que um dos programas rodando é o seu shell:

    neo@matrix:~$ ps
    PID TTY TIME CMD
    164 tty2 00:00:00 bash
    213 tty2 00:00:00 ps
    neo@matrix:~$

    Ou seja, o shell utilizado nesse console é o bash, que está rodando com PID 164.

    Existem diversos tipos de shell: bash, csh, ksh, ash, etc. O mais utilizado atualmente é o bash (GNU Bourne-Again SHell). Por isso, tomaremos ele como referência.

    Resumindo essa seção, é Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar... saber que para cada terminal ou console aberto, tem-se um shell rodando. Assim, se você tem 3 xterms abertos na interface gráfica, vai ter um shell para cada xterm.

    Ao executar o shell script, o shell atual (no qual você deu o comando) abre um novo shell para executar o script. Assim, os scripts são executados em um shell próprio (a menos que se especifique, ao chamar o script, para executá-lo no shell atual). Isso será importante quando formos tratar de variáveis de ambiente.

    Variáveis do ambiente

    Uma variável é onde o shell armazena determinados valores para utilização posterior.

    Toda variável possui um nome e um valor associado a ela, podendo ser este último vazio. Para listar as variáveis atualmente definidas no shell digite o comando set .

    Para se definir uma variável, basta utilizar a síntaxe: nome_da_variável=valor . Por exemplo, queremos definir uma variável chamada "cor" com o valor de "azul":

    neo@matrix:~$ cor=azul

    Para utilizar o valor de uma variável, é só colocar um sinal de "$" seguido do nome da variável - o shell automaticamente substitui pelo valor da variável:

    neo@matrix:~$ echo cor
    cor
    neo@matrix:~$ echo $cor
    azul

    Em alguns casos, é aconselhável colocar o nome da variável entre chaves ({}). Por exemplo, se eu quero imprimir "azul-escuro", como faria? Simplesmente echo $cor-escuro ?? Não funcionaria, pois o bash vai procurar uma variável de nome "cor-escuro". Portanto, temos que colocar o nome "cor" entre chaves para delimitar o nome da variável:

    neo@matrix:~$ echo ${cor}-escuro
    azul-escuro

    Algumas variáveis já são predefinidas no shell, como o PATH, que, como foi dito antes, armazena o caminho dos programas. Por exemplo, a minha variável PATH contém:

    neo@matrix:~$ echo $PATH
    /usr/local/bin:/usr/bin: /bin: /usr/X11R6/bin: /usr/openwin/bin: /usr/games: /opt/kde/bin: /usr/share/texmf/bin: /etc/script

    Ou seja, quando digito um comando, como "ls", o shell vai começar a procurá-lo em /usr/local/bin, se não encontrá-lo, vai procurar em /usr/bin e assim por diante. Repare que os diretórios são separados por um sinal de dois pontos (.

    É importante destacar que o shell possui várias variáveis pré-definidas, ou seja, que possuem um significado especial para ele, entre elas: PATH, PWD, PS1, PS2, USER e UID.

    Assim, quando iniciamos um novo shell (ao executar o nosso script), essas variáveis especiais são "herdadas" do shell pai (o que executou o shell filho). Outras variáveis definidas pelo usuário, como a variável "cor" não são passadas do shell pai para o filho.

    Quando o script terminar, o seu shell (shell filho) simplesmente desaparece e com ele também as suas variáveis, liberando o espaço ocupado na memória.

    Formato dos arquivos de Shell Script

    A primeira linha de todo shell script deve começar com algo do tipo: #!/bin/bash , a qual indica com qual shell deverá ser executado o script.Nesse exemplo, estamos falando para o shell atual executar o script com o shell /bin/bash.Se quisermos que o nosso script seja executado com o shell csh, devemos colocar nessa primeira linha: #!/bin/csh .

    Como usaremos o bash como nosso shell de referência, todas as linhas dos nossos scripts começarão com #!/bin/bash

    Digamos que você executa freqüentemente o comando: find / -name file -print , que procura na raiz (/) por um arquivo de nome "file". Só que é chato ficar digitando esse comando toda vez que se quer procurar um arquivo.

    Então vamos criar um shell script que contenha esse comando. Vamos chamar esse shell script de "procura". Seu conteúdo fica assim:

    #!/bin/bash
    find / -name file -print

    Pronto. Tornemos agora o arquivo executável: chmod 755 ./procura . Porém, ao tentar executar o nosso script, teremos um problema.

    ./procura

    Este script irá procurar por um arquivo chamado "file".Como especificar qual arquivo queremos procurar? Seria ideal executarmos o nosso script seguido do nome do arquivo que queremos procurar.

    Por exemplo, queremos saber onde está o arquivo "netscape": ./procura netscape . É ai que entram as "variáveis de parâmetro". Vamos substituir no nosso script a linha find / -name file -print por find / -name $1 -print .

    Quando o bash lê a variável "$1", ele a substitui pelo primeiro parâmetro passado na linha de comando para o nosso script. Então, se executamos ./procura netscape , a variável "$1" será substituída por "netscape", como a gente queria. Repare que a variável "$2" conteria o segundo parâmetro passado para o script e assim por diante.

    Sendo assim, qualquer comando colocado abaixo de find seria executado após ele. Esse é o essencial do shell script: poder automatizar a execução de programas e comandos como se estivessem sendo digitados diretamente no console ou terminal.

    Conclusão

    Na próxima aula do nosso curso de shell script iremos aprender alguns comandos especiais para tornar nossos script mais poderosos, fazendo coisas mais elaboradas do que apenas executar programas seqüencialmente. Entre eles, podemos destacar os comandos de laço, como "if", "for", "while", "case" etc.
    Mesmo longe, eu estou perto. Guia do Hacker 4ever.
X
Working...
X