Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
* Programação Shell Semana de Ciência & Tecnologia Prof. Robson R. Vaz * Introdução 1 - Introdução Este documento visa dar uma pequena abordagem sobre programas shell e a linguagem de programação shell script. 2 - O que é shell ? O shell é um programa interpretador de instruções/comandos, escrito em diferentes versões e atuam como interface entre os usuários e o sistema operacional, executando comandos lidos da entrada padrão ou de um arquivo. Com o shell é possível implementar uma linguagem de programação, que dispõe de comandos de decisão, controle de fluxo, funções, etc, chamada shell script. O Linux possui diversos tipos de interpretadores de comandos e, a maioria deles, pode ser listado no arquivo /etc/shells da sua distribuição. * Tipos de Shell 2.1 Alguns tipos de shell Bash: Bourne-Again shell (padrão das distribuições Linux); Sh: Bourne shell; Csh: C shell; Ksh: Korn shell; 2.2 Diferenças entre os shells A sintaxe dos comandos internos (if, while, for, foreach, etc). Definição das variáveis (a=1, set a=1). Nas expressões. Os arquivos de inicialização (.profile, .bash_profile). Ver tabela ANEXO II. * Tipos de Shell 2.3 Características dos programas shell: São interpretadores. Não fazem parte do sistema operacional. São interface entre usuário e sistema operacional. Utilizados como linguagem de programação. Estão definidos no último campo do arquivo /etc/passwd. 2.4 O que é um Shell Script? É uma lista de comandos em um arquivo texto, que serão interpretados pelo shell. 2.5 Qual o objetivo de usar Shell Script? Simplificar a execução de múltiplos comandos. Realização de ciclos repetitivos de tarefas. Tirar partido dos potentes comandos existentes no Linux/Unix. * 2.6 Vantagens x Desvantagens Vantagens Linguagem interpretada (produtividade) Nativa do *n?x | *bsd (portabilidade) Visibilidade do ambiente (integração) Desvantagens Linguagem interpretada (performance) Não acessa ao hardware (como o C) Não tem acesso às GUIs (Graphical User Interface) * 3. Variáveis em Shell Num conceito simples podemos dizer que variáveis são objetos básicos manipulados por programas e shell scripts. Os nomes das variáveis são da responsabilidade do usuário/programador e normalmente designadas "strings" nas outras linguagens de programação. * 3.1 Critérios para criação de uma variável em shell nome a esquerda do sinal de igual e 1º caracter deve ser uma letra ou um underscore ("_"). Não pode haver espaço entre o nome e o valor atribuído à varialvel (a=10 ou _a=10). Restante do nome da variável pode ser constituído por letras, underscores ou algarismos. Não utilizar nomes de comandos para os nomes das variáveis. Não usar nomes de variáveis reservadas para o Shell (PATH,HOME...). * 3.2 Como criar variáveis? var1=abcdef789 _var2="minha variável" Como utilizar as variáveis "var1" e "_var2" que foram criadas? echo $var1 Mostrará ---> abcdef789 echo $_var2 Mostrará ---> minha variável * Exemplos de Variáveis Outros exemplos de criação de variável: evento="Semana de Ciência e Tecnologia" readyonly local = "UNIGRANRIO" ← erro não pode haver espaço. readonly local=UNIGRANRIO readonly local="Universidade do Grande Rio" -bash: local: readonly variable ← erro Obs.: Variáveis criadas “readonly”, não podem ser alteradas ou removidas. * Variáveis 3.3 Como vejo as variáveis criadas no ambiente shell? Utilize o comando “set”, em conjunto com o pipe “|” e um paginador (more/less). set | more 3.4 Como remover uma variável? Utilize o comando unset nome_da_variável. unset variavel Obs.: Variáveis criadas como “readonly” não são removidas. * 3.5 Variáveis pré-definidas e variáveis internas do SHELL São variáveis do shell que armazenam informações sobre a sessão corrente. Em geral, estas variáveis são criadas em arquivos de inicialização e, repassadas ao ambiente shell do usuário. Veja exemplo ao lado. Internas do Shell Atenção: Essas variáveis podem ser diferentes, ou seja, de acordo com o Shell utilizado. * Variáveis PS1 Exemplo para a variável PS1, que é uma variável do sistema e, qualquer valor que for dado a ela irá ficar como valor do prompt do usuário que você está logado. Alguns valores, como a seguir: \h Host da máquina \W Diretório Corrente \w Caminho completo do diretório corrente \u Nome do usuário \t Hora \\$ Fica $ se for usuário normal e # se for root Exemplo: export PS1="[\w/:\u:\t\\$]" * 4.Funções Conjunto de comandos, com a finalidade de executar determinada tarefa. O shell aceita declarações de funções dentro de um ambiente shell, não sendo possível exportar funções. Utilidade: Na execução de pequenas operações com um bom desempenho, visto que uma função não é um arquivo e, desta forma, não é submetida ao processo normal de tratamento de arquivo e sim, a um conjunto de instruções gravadas no próprio ambiente shell do usuário, da mesma forma que uma variável. Sintaxe: <nome-função>() { <comandos> <comandos> bloco de comandos <comandos> } * Funções - exemplo f_teste() { clear echo “funcao f_teste.” } Observação: A execução de uma função é pelo seu nome que neste caso é f_teste e, para remover uma função, utilize o comando “unset f_teste”. * 5. Criando um Shell Script O primeiro passo na criação de um shell script, é criarmos um arquivo de texto com os comandos necessários, para dizer ao shell, que o arquivo de texto é um script e deve ser interpretado por ele. Para isto, devemos escrever na 1ª linha o código #!, que é o “magic code”. A seguir a este código, deve-se indicar o interpretador, que no nosso caso será /bin/bash, seguido dos parâmetros de configuração se desejar. A seguir, um pequeno exemplo de um shell script que na tela mostre: Ola! Meu primeiro script!!! * 1.Edite um arquivo conforme exemplo abaixo (usaremos o editor vi). # vi primeiro.sh #!/bin/bash # Este caractere, indica ao shell, que esta linha e um comentário. clear # Limpar toda a tela. Comentários podem ser colocados apos um comando. # echo “Ola! Meu primeiro script!!!’ 2.Salve o arquivo editado. 3.Habilite permissão de execução para todos os usuários. # chmod a+x primeiro.sh 4.Executando o script criado. # sh primeiro.sh ou ./primeiro.sh * 5.1 Comandos Intrínsecos (internos) do Shell O shell possui diversos comandos próprios, distintos do Linux, porém alguns com nomes semelhantes. A principal diferença desses comandos em relação aos do sistema é que esses não criam novos processos, não aumentando o número geral de processos no sistema e são de execução mais rápida. Podemos dividir os comandos em dois grupos: Comandos de finalidade genérica Comandos utilizados para a construção as estruturas de controle * Comandos de finalidade genérica Comando cd - Troca o diretório de trabalho. Comando echo - Exibir/Mostra mensagens. Este comando é útil na construção de scripts para mostrar linhas de texto na tela para o usuário acompanhar sua execução. Obs.: A mensagem a ser exibida, deverá estar entre aspas duplas ( " ). echo "Alo mundo." Alo mundo. * Outros exemplos echo -e “Semana de Ciencia e Tecnologia.\n” echo -e “UNIGRANRIO – Universidade do Grande Rio.\n” echo “Sejam Bem-vindos!!!” Obs.: A opção “-e” habilita a interpretação de caracteres de escape (\n) na mensagem. Semana de Ciencia e Tecnologia. UNIGRANRIO - Universidade do Grande Rio Sejam Bem-vindos!!! * Outros exemplos unome="UNIGRANRIO – Universidade do Grande Rio" echo ${#UNOME} 39 unome="UNIGRANRIO - Universidade do Grande Rio." echo $unome | cut -c1-38 UNIGRANRIO - Universidade do Grande Ri echo ${unome:10} - Universidade do Grande Rio. Comando pwd - informa o nome do diretório de trabalho. pwd /home/suporte * Outros exemplos Comando exit - Faz o shell sair com um status de n. Se n é omitido, o status de saída é aquele do último comando executado. exit 1 Comando export - os nomes das variáveis são marcados para transporte automático para o ambiente dos processos filhos. Se não há argumentos, a lista das variáveis pertencentes ao ambiente de execução que será exportado, é impressa. sintaxe: export [nome...] Exemplo: export universidade=“Unigranrio” O exemplo acima exporta (globaliza) a variável “universidade”, com o valor igual à “Unigranrio”. * Outros exemplos Comando read - Captura dados do usuário e coloca numa variável. Exemplo: read nome read -p "Entre com seu nome :" nome echo "Eu sou o $nome e estudo na $universidade." sleep 5 clear * Outros exemplos Comando readonly - os nomes de parâmetros da lista são marcados como não alteráveis e os valores desses nomes não podem ser trocados por uma atribuição posterior. Se nenhum argumento for fornecido, é impressa a lista de todos os nomes marcados como não alteráveis. readonly meu_nome="Fulano de Tal" * Outros exemplos Comando set - lista as variáveis locais e globais no ambiente de shell. set HOME=/home/sop/curso HZ=50 IFS= MAILCHECK=600 OPTIND=1 PATH=:/usr/bin:/bin PS1=$ PS2=> SHELL=/bin/sh TERM=ansi TZ=BRASIL-3 * Outros exemplos Comando shift - desloca o parâmetro posicional $n+1 em $1, $n+2 em $2, e assim sucessivamente. shift [n] #/bin/bash clear echo “Antes do comando shift.” echo “Primeiro parametro eh:” $1 shift echo “Depois do comando shift.”: echo “Primeiro parametro eh:” $1 * Outros exemplos Comando test - avalia a expressão e retorna 0, se o seu valor for verdadeiro, e um valor diferente de 0 se for falso. test expressão Utilizar exemplo para o comando test * * Outros exemplos Comando unset - remove uma variável ou função. unset nome_da_variavel Comando sleep - introduz uma temporização em segundos. sleep n echo "AGUARDANDO 5 segundos."; sleep 5 * Como fazer aritmética ? Utilizando expr - os argumentos são avaliados como uma expressão e o resultado é impresso na saída padrão. Sintaxe: Exemplo: 7 resultado * Operadores =, >=, <=, != :retorna o resultado (0=falso, 1=verdadeiro) de uma comparação de inteiros se ambos os argumentos forem inteiros, caso contrário, retorna o resultado de uma comparação léxica. +, -, *, /, % :retorna o resultado da adição, subtração, multiplicação, divisão e resto da divisão de argumentos com valor inteiro. * Outros exemplos expr 10 / 5 2 expr 5 \* 10 50 expr 5 + 6 * 10 quando utilizar o curinga “*” para efetuar multiplicação, expr: syntax error expr 5 + 6 \* 10 devemos utilizar o “\” antes do “*”, para anulá-lo como curinga. 65 contador=1 contador=`expr $contador + 1` * Observe o exemplo a seguir e responda a=5 ; b=3 c=`expr $a + $b` d=`expr $a % $b` e=`expr $a \* $b` echo " c=$c - d=$d - e=$e " Qual o resultado para as variáveis “c, d, e” ? * 5.2 Comandos utilizados para construção das estruturas de controle Comando if, tratamento de alternativas. sintaxe: if lista de comandos 1 then lista de comandos 2 # obrigatório [else lista de comandos 3] # opcional fi A lista de comandos 1 é executada e, se sua condição de retorno for igual a 0, a lista de comandos 2 será executada. Caso contrário, será executada a lista de comandos 3. * 5.2 Comandos utilizados para construção das estruturas de controle Seja o conteúdo do arquivo “if.sh” a seguir. if test $1 = $2 then echo $1 e $2 são idênticos else echo $1 e $2 são diferentes fi * 5.2 Comandos utilizados para construção das estruturas de controle (2) Comando case, seleções: sintaxe: case variável in [padrão [| padrão...])lista de comandos ;; ] esac O caracter "|" simboliza o operador lógico OU. O comando case executa a lista de comandos associada ao primeiro padrão com o qual a variável se encaixa. A forma de expressar os padrões é a mesma usada para os identificadores de arquivo. * 5.2 Comandos utilizados para construção das estruturas de controle Veja o conteúdo do arquivo “case.sh” a seguir. case $1 in a) echo ocorrência de a ;; b|c) echo ocorrência de b ou c ;; ?) echo ocorrência de qualquer caracter diferente de a,b e c ;; *) echo ocorrência de qualquer cadeia com mais de um caracter ;; esac sh case.sh x será mostrado ocorrência de qualquer caracter diferente de a,b ou c sh case.sh bb será mostrado ocorrência de qualquer cadeia com mais de um caracter * (3) Comandos para Iterações (repetições) Existem duas categorias de iterações: . enumerativa . condicional (a) Comando for, iteração enumerativa for variavel [in lista_de_valores] do comando1 comando2 .... done * (3) Comandos para Iterações (repetições) - Toda vez que o comando for é executado, é feita a atribuição da variável com a próxima palavra da lista de palavras, após in. Se "in palavra..." é omitido, o comando for executa a lista de comandos, uma vez para cada parâmetro posicional. A execução termina quando não há mais palavras ou quando o parâmetro posicional é nulo. Veja o conteúdo do arquivo “for.sh” a seguir. for i in um dois tres do echo $i done * (b) Iterações condicionais Comando while: while lista de comandos1 do [lista de comandos2] done - O comando while executará repetidamente a lista de comandos 2, enquanto a condição de retorno do último comando da lista de comandos 1 for 0, caso contrário terminará. Veja o conteúdo do arquivo “while.sh” a seguir. while [ $# != 0 ] do echo $1 shift done * (b) Iterações condicionais Comando until: until lista de comandos 1 do [lista de comandos 2] done O comando until executará repetidamente a lista de comandos 2, enquanto a condição de retorno do último comando da lista de comandos 1 for diferente de 0, caso contrário terminará. * (b) Iterações condicionais Veja o conteúdo do arquivo “until.sh” abaixo. until [ $# = 0 ] do echo $1 shift done * (b) Iterações condicionais - Comando break - rompe a iteração em curso. - Comando continue - rompe a iteração em curso, e permite continuar no início do bloco corrente. Dá continuidade ao laço iniciado pelo “while”. * (b) Iterações condicionais while [ $# != 0 ] do if [ -f $1 ] then echo "O Arquivo $1 existe." shift continue fi case $1 in manga|abacaxi) echo "Que delícia !!!" ;; fim) break ;; esac shift done Veja o exemplo do arquivo “continue.sh” abaixo. * Obrigado Fim
Compartilhar