Buscar

Shell

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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais