Você está na página 1de 16

Shell Introduo

O Shell o interpretador de comandos do Linux, responsvel por converter o vocabulrio utilizado pelo usurio em instrues que o computador entenda. Fica entre o usurio e o ncleo do sistema operacional (kernel), formando uma concha, da o nome Shell, servindo assim, como uma interface para o usurio. Quando um comando digitado, o Shell executa as seguintes aes: substituio de variveis; expanso de metacaracteres; tratamento dos redirecionamentos de entrada e sada; Pipelines; substituio de comandos.

Existem diversos tipos de Shell e cada um deles oferece um conjunto de caractersticas e recursos diferentes. Os mais utilizados so: Bourne Shell (sh), desenvolvido por Steven Bourne nos AT&T Bell Laboratories; C Shell (csh), desenvolvido por Bill Joy na Universidade da Califrnia; Korn Shell (ksh), desenvolvido por David G. Korn nos AT&T Bell Laboratories. Como o Shell no faz parte do sistema operacional propriamente dito, o usurio pode escolher o Shell que desejar. O IBM AIX utiliza o ksh como Shell padro j o Linux usa o sh como padro. Quando o usurio entra em um sistema operacional UNIX, o Shell iniciado em seu terminal e um prompt de linha de comando indica ao usurio o prximo comando a ser executado. Por exemplo, no caso do Bourne Shell o prompt o smbolo $, seguido de um espao em branco (pode ter antes do $ o diretrio corrente do usurio). O Shell, alm de ser um interpretador de comandos, tambm pode ser utilizado como uma linguagem de programao, oferecendo comandos que permitem programar de maneira estruturada, como estruturas condicionais e de repetio, etc. alm, de permitir tambm a definio de variveis. Usurios podem combinar seqncias de comandos, para serem executados na ordem em que forem declarados, criando assim, os chamados scripts, que seriam equivalentes aos arquivos .bat do DOS. Scripts normalmente so utilizados para realizar tarefas que so executadas diariamente no sistema, como por exemplo, para criar novos usurios, reiniciar servios do sistema, realizar back-up, etc.

Variveis Shell
Varivel o lugar onde se pode armazenar alguma informao. As informaes guardadas numa varivel podem ser acessadas atravs da referncia ao nome da varivel. So similares a uma varivel algbrica, pois possuem um nome com um valor associado. Algumas variveis podem ser definidas pelo usurio.

Prof. Leticia, Flvio, Marcelo

1/16

Shell
Nome de uma Varivel Os nomes das variveis podem ter qualquer tamanho e devem comear com um caracter alfanumrico, seguido por qualquer um dos caracteres: [_ a-z A-Z 0-9] Definindo uma varivel: Uma varivel pode ser definida simplesmente atribuindo um valor ao seu nome: nome_da_varivel=valor_da_varivel Exemplos: diretorio=/home/aluno X=20 Obs.: No pode haver espaos entre o nome da varivel o sinal de = e o valor atribudo a ela. Listando a varivel e valores associados: $ set $ env - mostra as variveis locais e as do ambiente - mostra as variveis do ambiente

Obtendo o valor associado a uma varivel Para acessar essas variveis, pode-se digitar o nome da varivel precedido por um sinal de cifro: $ echo $varivel Exemplo: $echo $X O Shell pesquisa o nome e retorna o valor associado a varivel. Este procedimento chamado de substituio de variveis. O Shell executa a substituio de variveis em toda a linha de comando que contenha o smbolo $, associado a um nome vlido de varivel.

Removendo o valor de uma varivel $ unset varivel

Para armazenar variveis, o Shell possui duas reas de memria: a rea local de dados e o ambiente. Local Por default, quando uma varivel Shell definida, alocado espao na rea local de dados. As variveis dessa rea so privativas do Shell corrente. Sendo assim, processos filhos de um Shell no conhecem as varveis locais do processo pai, a menos que essas variveis sejam exportadas. Assim, utilizando-se o comando export, possvel mover as variveis existentes na memria local de dados para o ambiente.
Prof. Leticia, Flvio, Marcelo

2/16

Shell
Ambiente So variveis especiais que so definidas para o usurio. Podem ser alteradas para customizar o ambiente do usurio. Algumas delas so: HOME - diretrio de trabalho do usurio

LOGNAME - login do usurio PATH PS1 PS2 TERM etc. - lista de diretrios - prompt primrio - prompt secundrio - tipo de terminal

Para ilustrar, o conceito de varivel local X varivel ambiente pode-se: 1) Criar uma varivel local $x=10 2) Verificar seu contedo echo $x 3) Criar um shell filho sh 4) verificar mais uma vez o valor da varivel. 5) Agora o valor nulo, pois a varivel no foi exportada. echo $x 6) Retornar para o shell pai exit 7) Exportar a varivel (move a varivel da rea local para a rea do ambiente) export x 8) Criar um shell filho sh 9) Verificar o contedo da varivel (que no ser mais nula). echo $x

Prof. Leticia, Flvio, Marcelo

3/16

Shell Comandos Agrupados em um Arquivo Script


Utilizando o editor de textos, por exemplo o vi, pode-se criar um arquivo contendo uma seqncia de comandos que depois pode ser executado com a chamada ao arquivo. Exemplo: $ vi script01 #!/bin/bash # Apresenta na tela o texto: Bom Trabalho! clear echo "Bom Trabalho!" A linha #!/bin/bash define o tipo de Shell que est sendo utilizado. O script01 ir limpar a tela e apresentar a mensagem Bom Trabalho!. Ao terminar de escrever um arquivo script deve-se torn-lo executvel: $ chmod u+x script01 Para execut-lo: $ ./script01 Obs.: o ./ ir indicar que o arquivo est no diretrio local. Comentrio num script Comentrios so especificados pelo caracter # no incio da linha Script02 #!/bin/bash # Informa a quantidade de usurios definidos no sistema. cut -f1,7 -d: /etc/passwd | sort > temp cat temp | uniq | wc -l Script03 #!/bin/bash # Apresenta a quantidade de arquivos do diretrio # onde o usurio se encontra (diretrio corrente) echo "Voc tem `ls|wc l` arquivos no diretrio corrente `pwd`:" date echo echo -e "Seu username is: `whoami` \n" echo -e "Seu diretrio corrente : \c" pwd Obs.: As plics (crase) faz com que o comando entre elas seja executado, ao invs do texto ser escrito na tela.

Prof. Leticia, Flvio, Marcelo

4/16

Shell
Script04 #!/bin/bash # Apresenta a data, a hora, o username e o diretrio corrente echo "A data e hora de hoje :" date echo echo -e "Seu username is: `whoami` \n" echo -e "Seu diretrio corrente : \c" pwd Variveis em um Script Variveis podem ser utilizadas em um script com a mesma notao da definio de variveis apresentada anteriormente. Assim como, variveis j definidas no ambiente do usurio tambm podem ser utilizadas. Script05 #!/bin/bash # Apresenta a mensagem do boavindas seguido do nome do usurio # e informa o diretrio onde o usurio se encontra echo "Benvindo ao sistema" $USER echo "Seu diretrio home " $HOME O comando read pode ser utilizado, para que o valor da varivel seja atribudo em tempo de execuo. Script06 #!/bin/bash # Le o nome do usurio e apresenta mensagem de Bom trabalho # seguido do nome do usurio echo "Entre com seu nome" read nome echo "Bom trabalho $nome"

Prof. Leticia, Flvio, Marcelo

5/16

Shell
Passagem de Argumentos na Linha de Comandos possvel passar um argumento na chamada a um script (na linha de comandos). Basta digitar-se: $ script argumento argumento argumento ... Em um script as variveis $$, $#, $* $0, $1, etc. fazem referncia aos argumentos passados na linha de comandos, conforme a seguir: Varivel $$ $# $* $0 $1 $2 Script07 #!/bin/bash # Mostra as variveis passadas como parmetros na linha de comandos echo "O numero de argumentos e $#" echo "Eles sao: $*" echo "O primeiro e $1" echo "O nome deste script e $0" echo "O PID deste processo e $$" Script08 #!/bin/bash # Informa, dado o LOGNAME de um usurio, # quantas vezes este usurio est logado. # Usando who, grep e wc times=$(who | grep $1 | wc -l) echo "$1 est logado $times vezes." Operadores Operadores aritmticos e de atribuio tambm podem ser utilizados para em expresses. So eles: Operador + * / = Operao Soma Subtrao Multiplicao Diviso Atribuio Identificao do processo (PID) Quantidade de argumentos na linha de comandos Todos os argumento passados na linha de comandos Nome do script Primeiro argumento Segundo argumento. E assim por diante. Argumento

Prof. Leticia, Flvio, Marcelo

6/16

Shell

Script09 #!/bin/bash # Apresenta o resultado da soma de duas variais lidas do teclado echo "Entre com o primeiro valor " read x echo "Entre com o segundo valor" read y res=`expr $x + $y` echo "Resultado da soma: $res" Obs.: Alguns caracteres de acentuao tem significado especial para o Shell. Colocar um smbolo entre acentos agudos disabilita o smbolo, entre aspas disabilita alguns, mas no outros. A expresso a ser realizada deve estar entre plics, e precedida de expr. O caracter ` (plic), diz ao Shell para executar o comando entre plics como um subshell e substituir o valor resultante no lugar do comando.

Script10 #!/bin/bash # Apresenta o tempo gasto para percorrer uma distncia # a uma determinada velocidade # Apresenta o uso de uma expresso que utiliza um caracter especial # / - sendo usada numa expresso como operador de diviso echo "Entre com a distancia percorrida" read dist echo "Entre com a velocidade em km por h" read vel tempo=`expr $dist \/ $vel` echo "Voce levou $tempo hora(s)" Obs.: O \ foi utilizado antes dos operadores de diviso e multiplicao, pois estes so caracteres de especiais no Linux e no script o que se deseja que funcionem como operadores.

Prof. Leticia, Flvio, Marcelo

7/16

Shell
Estruturas de Condio etc. O Linux possui estruturas de condio assim como qualquer linguagem do tipo C, Pascal, Estrutura Se se condio ento expresso fim-se if [ condio ] then expresso fi Se...seno se teste ento expresso seno expresso fim-se if [ teste ] then expresso else expresso fi Ses Aninhados se teste1 ento expresso1 seno se teste2 ento expresso2 seno expresso3 fim-se fim-se fi fi if [ teste1 ] then expresso1 elif [ teste2 ] then expresso2 else expresso3 Estrutura Shell

Prof. Leticia, Flvio, Marcelo

8/16

Shell
Script11 #!/bin/bash # Uso do comando if... then... else... echo "Entre com o primeiro valor " read x echo "Digite o operador" read op echo "Entre com o segundo valor" read y if [ $op = "+" ] then res=`expr $x + $y` echo "Resultado: $res" else echo "Nao sei fazer esta conta" fi

Caso caso varivel seja valor1: comandos1 valor2: comandos2 ... valorn: comandosn seno: comandos fim-caso ;; *) comandos ;; esac ;; ... valorn) comandosn case varivel in valor1) comandos1

Prof. Leticia, Flvio, Marcelo

9/16

Shell
Script12 #!/bin/bash # Simula uma calculadora # Uso do case echo "Digite o primeiro operando" read op1 echo "Digite o sinal" read op echo "Digite o segundo operando" read op2 case $op in +) res=`expr $op1 + $op2` echo "Resultado $res" ;; -) res=`expr $op1 - $op2` echo "Resultado $res" ;; /) res=`expr $op1 \/ $op2` echo "Resultado $res" ;; x) res=`expr $op1 \* $op2` echo "Resultado $res" ;; *) echo "Operador invalido" ;; esac

Teste de Condio No ncleo de cada estrutura de controle existe um teste condicional. Todos os comandos do Shell devem retornar um zero (0) quando tiverem sucesso e um valor no-zero (geralmente 1 ou 1) quando falharem. Testando arquivos -s arq -r arq -w arq -x arq -f arq -d arq -c arq -b arq -p arq -u arq -g arq
Prof. Leticia, Flvio, Marcelo

Arquivo no est vazio Arquivo pode ser lido Arquivo pode ser escrito Arquivo executvel Arquivo existe e normal Arquivo um diretrio Arquivo especial (caracter) Arquivo especial (bloco) Arquivo um pipe nomeado Arquivo SUID Arquivo SGID

10/16

Shell

Testando seqncias de caracteres -z str str -n str str1 = str2 str1 != str2 String vazia String vazia String no vazia Igualdade Desigualdade Testando inteiros i1 -eq i2 i1 -ne i2 i1 -gt i2 i1 -ge i2 i1 -lt i2 i1 -le i2 Igualdade Desigualdade Maior Maior ou igual Menor Menor ou igual Operadores lgicos true false ! cond c1 -a c2 c1 -o c2 Verdadeiro Falso Negao Conjuno Disjuno

O teste de uma condio no Bourne Shell deve ficar entre colchetes e estes devem ser precedidos e seguidos de um espao em branco. [ condio ] Assim como [ ], o expr avalia argumentos e retorna verdadeiro ( 0 ) ou falso ( 1 ) para comparaes. Caso contrrio, expr retorna um valor numrico de uma avaliao aritmtica. if [ $a eq $b ] Script13 #!/bin/bash # Se o arquivo existir mostra seu contedo na tela. # Se o arquivo no existir, ele criado. # Uso do teste de arquivos echo "Informe o nome do arquivo" read arquivo if [ -r $arquivo ] then echo "O contedo do arquivo :" echo cat $arquivo else echo "Digite o contedo do arquivo <CRTL> <D> p/ gravar" cat > $arquivo fi
Prof. Leticia, Flvio, Marcelo

ou

if expr $a = $b

11/16

Shell
Repetio Estrutura Repetio Condicional enquanto condio faa comandos fim-enquanto while [ condio ] do comandos done repita comandos at que condio until [ condio ] do comandos done Repetio Pr-determinada para varivel valorinicial at valor final faa comandos fim-para for varivel in lista do comandos done Obs.: os valores contidos em lista so atribudos varivel um de cada vez; caso no seja especificado lista, sero atribudos cada um dos par Estrutura Shell

Prof. Leticia, Flvio, Marcelo

12/16

Shell
Script14 #!/bin/bash # Simula uma calculadora, que executa as 4 operaes aritmticas. # O script executa a calculadora enquanto o usurio desejar # Uso do while opcao="s" while [ $opcao = "s" ] do echo "Digite o primeiro operando" read op1 echo "Digite o sinal" read op echo "Digite o segundo operando" read op2 case $op in +) res=`expr $op1 + $op2` ;; -) res=`expr $op1 - $op2` ;; /) res=`expr $op1 \/ $op2` ;; x) res=`expr $op1 \* $op2` ;; *) echo "Operador invalido" exit -1 ;; esac echo "Resultado $res" echo "Deseja continuar" read opcao done Script15 #!/bin/bash # Apresenta o contedo dos diretrios passados como parmetros # na linha de comandos # Uso do for for file in $* do ls $file done

Prof. Leticia, Flvio, Marcelo

13/16

Shell
Script16 #!/bin/bash # Informa o nmero de arquivos existentes nos diretrios passados # como parmetros na linha de comandos # Uso do for for file in * do echo "$file possui: `wc $file`" done Script17 #!/bin/bash ls a* > arq.a for i in `cat arq.a` do echo Arquivo $i removido rm $i done possvel o uso das estruturas (repetio e condio) em conjunto ou mesmo aninhadas. Script19 #!/bin/bash # Usando o if aninhado num for for file in * do if [ ! -d $file ] then echo "wc $file gives" wc $file else echo "$file is a directory" fi done Script20 #!/bin/bash # Usando um case aninhado num for cd for file in .?* do #agora verifica alguns arquivos comuns case $file in .kshrc) echo "Voce tem um arquivo de set-up Korn Shell";; .newsrc) echo " Voce tem um arquivo de news";; .Xdefaults) echo " Voce tem um arquivo de X resource";; .profile) echo " Voce tem um arquivo de login shell ";; esac done

Prof. Leticia, Flvio, Marcelo

14/16

Shell
possvel ainda, fazer uso de loop infinito. Para sair do loop pode-se usar o break. Script21 #!/bin/bash # Apresenta a hora, como se fosse um relgio while true do echo -e "A data e: `date` \c\r" done Script22 #!/bin/bash # Verifica e informa o momento em que o usurio aluno1 # se conecta no sistema while [ ! `who | grep aluno1` ] do sleep 60 done echo "O usuario aluno1 acaba de entrar no sistema" s vezes o processamento ter que continuar sem processar algo. O comando continue realiza essa tarefa: Script23 #!/bin/bash while [ 1 ] do echo "Entre com o nome do arquivo" read nomearq if [ -r $nomearq ] then cat $nomearq else continue fi echo "Processando o arquivo $nomearq" done

Prof. Leticia, Flvio, Marcelo

15/16

Shell
XARGS, REPEAT e FIND O comando XARGS simplifica a implementao de loops quando se precisa executar apenas um comando com uma lista de arquivos. Como exemplo: ls | xargs -n100 rm -f Nesse caso o comando xargs executar o comando rm para os cem primeiros arquivos listados pelo comando ls. Xargs pega linhas de entrada e executa comandos, substituindo as linhas de entrada onde for especificado. J o comando find , pesquisa para baixo a partir de um diretrio especificado e executa comandos especificados pelo usurio, substituindo nomes de arquivos ou diretrios dentro do comand, exemplo: cd $HOME find . type d -exec chmod 770 {} \; Esse comando troca a permisso de todos subdiretrios do diretrio HOME do usurio.

Prof. Leticia, Flvio, Marcelo

16/16

Você também pode gostar