A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Shell Script Prof. Rafael Paoliello Guimarães FAESA.

Apresentações semelhantes


Apresentação em tema: "Shell Script Prof. Rafael Paoliello Guimarães FAESA."— Transcrição da apresentação:

1 Shell Script Prof. Rafael Paoliello Guimarães FAESA

2 O que é o shell? Interpretador de comandos Interface entre o usuário e o kernel Pode ser programado Shell Script – Arquivo texto com seqüência de comandos a serem interpretados

3 Principais shells Bourne Shell (sh) – Shell padrão do UNIX Korn Shell (ksh) – É um upgrade do Bourne Shell C Shell (csh) – É o shell mais utilizado em ambientes BSD – A estrutura de sua linguagem é parecida com o C Bourne-Again Shell (bash) – Shell padrão do Linux – Quase 100% compatível com Bourne Shell Inclui as implementações do Korn Shell e inúmeros comandos do C Shell

4 Variáveis Identificadas pelo caracter $ Variáveis de ambiente são disponibilizadas pelo próprio sistema operacional – echo $PATH – echo $USER – echo $UID Para criar variáveis, basta atribuir um valor – NOME=“Rafael” – echo “Meu nome é ${NOME}” – DIR=`pwd` – echo “O diretório atual é ${DIR}” Sem espaços antes e depois do sinal de igualdade Uso opcional de chaves

5 Aspas e afins Aspas duplas – Imprime todo o conteúdo, interpretando variáveis echo “O usuário atual é $USER” – Se quisesse imprimir o caracter especial $ (ou qualquer outro caracter especial, precedê-lo por barra invertida ( \ ) echo “A variável que contém o usuário é \$USER” Aspas simples – Imprime todo o conteúdo, sem interpretar nada echo ´O usuário atual é $USER´ Acento grave ( ` ) – Executa o comando entre os acentos graves e imprime o resultado echo “O diretório atual é `pwd`” OBS OBS: Se o acento grave estiver entre aspas simples, o comando não é executado!

6 Redirecionamento Redirecionamento de saída Redirecionamento de entrada Redirecionamentos especiais <Obtém a entrada padrão a partir de um certo arquivo <<O chamado here document. Veremos mais tarde. |Redireciona a saída de um comando p/ entrada de outro teeCaptura a saída de um comando com pipe, copiando o que está entrando para a saída padrão e um arquivo >Redireciona saída para novo arquivo >>Redireciona saída, anexando a fim de arquivo existente 2>Redireciona erros gerados para um novo arquivo

7 Wildcards Asterisco ( * ) – Substitui por qualquer seqüência de caracteres ls arquivo* Interrogação ( ? ) – Substitui por qualquer caractere (apenas um) ls arquivo?.txt Colchetes ( [] ) – Substitui por qualquer caractere do conjunto ls arquivo[0-9].txt Chaves ( {} ) – Substitui por qualquer seqüência do conjunto ls arquivo-{jan,fever}eiro.txt

8 Um script shell Primeira linha deve indicar o shell que será utilizado para interpretar este script – Lista o conteúdo do diretório /tmp #!/bin/bash cd /tmp ls cd – – Salvar em um arquivo texto e dar permissão de execução chmod +x teste.sh Extensão geralmente utilizada para indicar que se trata de um script shell

9 Algumas variáveis em scripts $$ – Obtém o número do processo atual (geralmente utilizado para gerar um arquivo temporário) $0 $1 $2 $3... $9 ${10} ${11}... – Obtém parâmetros passados ao script por linha de comando $0 é o nome do script, $1 em diante são os parâmetros $* – Obtém todos os parâmetros passados ao script (sem $0) $# – Obtém o número de parâmetros passados (sem contar $0) $? – Obtém o retorno do último comando executado

10 GREP Global Regular Expression Print – Localiza cadeias de caracteres em uma entrada definida Ex: Verifica dados do usuário rsl grep rsl /etc/passwd grep rsl /etc/* Ex: Verifica processos do usuário rsl ps aux |grep rsl Ex: Listar apenas os subdiretórios do diretório atual ls –la |grep “^d” Ex: Verifica usuários que utilizam o bash grep “bash$” /etc/passwd

11 Exemplos Script que dado o nome de um usuário, exibe quantos processos este usuário está executando #!/bin/bash QTDE=`ps aux |grep “^$1” |wc -l` echo “O usuário $1 possui $QTDE processos ativos” Script que exibe o nome do usuário que se conectou por último e a lista dos processos ativos para este usuário #!/bin/bash USUARIO=`last |head -1 |cut –d´ ´ -f1` echo “Lista de processos do usuário $USUARIO:” ps aux |grep “^$USUARIO”

12 Exercício Crie um script que dado um usuário passado como parâmetro, exiba o seu UID (user ID), nome do seu grupo e seu GID (group ID). Cada um destes valores deve ser armazenado em uma variável e no final, deve-se imprimir a seguinte mensagem: – O UID do usuário XXX é 999. Ele faz parte do grupo YYY que tem como GID o número 000. id – OBS: Verifique como obter o UID, GID e grupo verificando a ajuda do comando id

13 Alguns outros comandos úteis cut – Parâmetros -f, -d e –c Awk (apenas como alternativa ao cut) – awk ´{print $1}´ head, tail – Parâmetro que indica número de linhas tr – [:alnum:], [:alpha:],[:blank:], [:cntrl:], [:digit:] – [:lower:], [:upper:], [:punct:] – \\, \b, \n, \r, \t – Parâmetro –d uniq

14 Expressões numéricas expr – expr 2 + 7 – expr 2 – 7 – expr 2 \* 7 – expr 2 / 7 – expr 2 % 7 bc – echo “(2 + 3) * 5” |bc – echo “33.333 * 3” |bc – echo “scale=2; 100/3” |bc – echo “3^2” |bc

15 Condicionais if – Testa se o retorno do comando teve sucesso $? = 0 if then else fi if then elif then else fi

16 Comando de teste test if test “$USER” != “root” then echo “Este script so pode ser executado por root” exit 1 fi ls -l /root Equivalente mais elegante: [ ] if [ “$USER” != “root” ] then echo “Este script so pode ser executado por root” exit 1 fi ls -l /root

17 Teste de arquivos -r arquivoVerifica se tem permissão de leitura -w arquivoVerifica se tem permissão de escrita -x arquivoVerifica se tem permissão de execução -f arquivoVerifica se o arquivo existe -d arquivoVerifica se é um diretório -u arquivoVerifica se o set UID está ativo -g arquivoVerifica se o set GID está ativo -k arquivoVerifica se o sticky bit está ativo -s arquivoVerifica se o tamanho do arquivo é maior do que zero Exemplo: if [ -f “$1” ] then echo “O arquivo $1 existe!” if [ -x “$1” ] ; then echo “E é executável!” fi

18 Comparações -eqVerifica se são iguais -neVerifica se são diferentes -gtVerifica se o 1º é maior que o 2º -geVerifica se 1º é maior ou igual a 2º -ltVerifica se o 1º é menor que o 2º -leVerifica se 1º é menor ou igual a 2º Exemplo: – Coloca dois parâmetros passados em ordem e se forem iguais, diz que são if [ $# -ne 2 ] ; then echo “Parametros insuficientes” else if [ $1 -gt $2 ] ; then echo “O primeiro é maior que o segundo” elif [ $1 –eq $2 ] ; then echo “O primeiro é igual ao segundo” else echo “O primeiro é menor que o segundo” fi

19 Negação e composição Negação de testes – Ex: Verificar se um arquivo não existe if [ ! -f “$1” ] ; then echo “Arquivo $1 não existe” fi Composição de testes – Ex: Verificar se duas condições são verdadeiras if [ -r “$1” -a -w “$1” ] ; then echo “O arquivo $1 possui permissão de leitura e escrita” fi – Ex: Verificar se pelo menos uma de duas condições é verdadeira if [ -r “$1” -o -w “$1” ] ; then echo “O arquivo $1 possui permissão de leitura ou de escrita” fi

20 Alternativas ao if Outra forma de composição de testes – && (equivalente ao -a) ou || (equivalente a -o) if [ -r “$1” ] && [ -w “$1” ] ; then echo “O arquivo $1 possui permissão de leitura e escrita” fi if [ -r “$1” ] || [ -w “$1” ] ; then echo “O arquivo $1 possui permissão de leitura ou de escrita” fi Uso de && e II como alternativa ao if [ -r “$1” ] && [ -w “$1” ] && echo “O arquivo $1 possui permissão de leitura e escrita” [ -r “$1” ] ||echo “O arquivo $1 não possui permissão de leitura”

21 O case Quando houver mais de três ifs (if... elif... elif... fi), o case se torna mais eficiente e mais estruturado case valor in padr1) ;; padr2) ;; esac

22 O case Exemplo – Dado um caracter recebido como parâmetro, verifica o seu tipo #!/bin/bash ERRO=0 # Verifica se só há um parametro if [ $# –ne 1 ] ; then echo “Erro! Uso correto: $0 caractere” ERRO=1 fi # Verifica se parâmetro só tem um caractere case $1 in ?) ;; *) echo “Erro! Parametro passado so pode ter um caractere” ERRO=2 ;; esac # Sai se houve algum erro if [ $ERRO –ne 0 ] ; then exit $ERRO fi # Verifica tipo do caractere de entrada case $1 in [a-z]) echo “Letra minúscula” ;; [A-Z]) echo “Letra maiúscula” ;; [0-9]) echo “Número” ;; *) echo “Caractere especial ;; esac

23 Exercício Escreva um script que dê bom dia, boa tarde ou boa noite de acordo com a hora apresentada pelo comando date – Dica: Dê um man date para ver como obter apenas a hora utilizando este comando

24 Loops com for Executa um laço, em cada execução assume um valor da seqüência for var in valor1 valor2 valor3... valorN do done – Exemplo: Gera múltiplos de 11 de 11 até 99: for i in 1 2 3 4 5 6 7 8 9 do echo $i$i done for (( i=1 ; i<=9 ; i++)) ; do echo $i$i done for i in `seq 9` do echo $i$i done EQUIVALENTE

25 Outro exemplo com for Obtendo seqüência de outros comandos for ARQ in `ls` ; do # Obtém nome do arquivo em minúsculas ARQMIN=`echo $ARQ |tr [A-Z] [a-z]` # Verifica se arquivo em minúsculas já existe if [ -f “$ARQMIN” ] ; then echo “Arquivo $ARQ não renomeado: $ARQMIN já existia!” else mv $ARQ $ARQMIN > /dev/null if [ $? -ne 0 ]; then echo “Arquivo $ARQ não renomeado: erro no mv!” fi done

26 Exercício Escreva um script que liste apenas os arquivos executáveis de um certo diretório passado como parâmetro


Carregar ppt "Shell Script Prof. Rafael Paoliello Guimarães FAESA."

Apresentações semelhantes


Anúncios Google