Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouVítor Gabriel Cordeiro Benevides Alterado mais de 8 anos atrás
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.