Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

shell script, Notas de estudo de Sistemas de Informação

Scripts shell

Tipologia: Notas de estudo

2010

Compartilhado em 29/12/2010

luis-barbosa-dos-santos-12
luis-barbosa-dos-santos-12 🇧🇷

4.9

(10)

7 documentos

1 / 14

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Programando em shell−script
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Pré-visualização parcial do texto

Baixe shell script e outras Notas de estudo em PDF para Sistemas de Informação, somente na Docsity!

Table of Contents

Programando em shell−script............................................................................................................................

1. Primeira parte, uma introdução............................................................................................................

2. Segunda parte, se aprofundando mais!................................................................................................

i

Fácil, hein? A primeira linha indica que todas as outras linhas abaixo deverão ser executadas pelo bash (que se

localiza em /bin/bash), e a segunda linha imprimirá na tela a frase "Nossa! Estou vivo!", utilizando o comando

echo, que serve justamente para isto. Como você pôde ver, todos os comandos que você digita diretamente na

linha de comando, você poderá incluir no seu shell script, criando uma série de comandos, e é essa

combinação de comandos que forma o chamado shell script. Tente também dar o comando 'file arquivo' e veja

que a definição dele é de Bourne−Again Shell Script (Bash Script).

Contudo, para o arquivo poder se executável, você tem de atribuir o comando de executável para ele. E como

citamos anteriormente, o comando chmod se encarrega disto:

$ chmod +x arquivo

Pronto, o arquivo poderá ser executado com um simples "./arquivo".

Conceito de Variáveis em shell script

Variáveis são caracteres que armazenam dados, uma espécie de atalho. O bash reconhece uma variável

quando ela começa com $, ou seja, a diferença entre 'palavra' e '$palavra' é que a primeira é uma palavra

qualquer, e a outra uma variável. Para definir uma variável, utilizamos a seguinte sintaxe:

variavel="valor"

O 'valor' será atribuído a 'variável '. Valor pode ser uma frase, números, e até outras variáveis e comandos. O

valor pode ser expressado entre as aspas (""), apóstrofos ('') ou crases (``). As aspas vão interpretar as

variáveis que estiverem dentro do valor, os apóstrofos lerão o valor literalmente, sem interpretar nada, e as

crases vão interpretar um comando e retornar a sua saída para a variável. Vejamos exemplos:

$ variavel="Eu estou logado como usuário $user" $ echo $variavel Eu estou logado como usuário cla

Programando em shell−script 2

$ variavel='Eu estou logado como usuário $user' $ echo $variavel Eu estou logado como usuário $user

$ variavel="Meu diretório atual é o pwd" $ echo $variavel Meu diretório atual é o /home/cla

Se você quiser criar um script em que o usuário deve interagir com ele, é possível que você queira que o

próprio usuário defina uma variável, e para isso usamos o comando read, que dará uma pausa no script e

ficarará esperando o usuário digitar algum valor e teclar enter. Exemplo:

echo "Entre com o valor para a variável: " ; read variavel (O usuário digita e tecla enter, vamos supor que ele digitou 'eu sou um frutinha') echo $variavel eu sou um frutinha

Controle de fluxo com o if

Controle de fluxo são comandos que vão testando algumas alternativas, e de acordo com essas alternativas,

vão executando comandos. Um dos comandos de controle de fluxo mais usados é certamente o if, que é

baseado na lógica "se acontecer isso, irei fazer isso, se não, irei fazer aquilo". Vamos dar um exemplo:

if [ −e $linux ] then echo 'A variável $linux existe.' else echo 'A variável $linux não existe.' fi

O que este pedaço de código faz? O if testa a seguinte expressão: Se a variável $linux existir, então (then) ele

diz que que existe com o echo, se não (else), ele diz que não existe. O operador −e que usei é pré−definido, e

você pode encontrar a listagem dos operadores na tabela:

Programando em shell−script 3

read Captura dados do usuário e coloca numa variável

exit Finaliza o script

sleep Dá uma pause de segundos no script

clear Limpa a tela

stty Configura o terminal temporariamente

tput Altera o modo de exibição

if Controle de fluxo que testa uma ou mais expressões

case

Controle de fluxo que testa várias expressões ao mesmo

tempo

for Controle de fluxo que testa uma ou mais expressões

while Controle de fluxo que testa uma ou mais expressões

E assim seja, crie seus próprios scripts e facilite de uma vez só parte de sua vida no Linux!

2. Segunda parte, se aprofundando mais!

Falamos sobre o conceito da programação em Shell Script, e demos o primeiro passo para construir nossos

próprios scripts. Agora vamos nos aprofundar nos comandos mais complicados, aprendendo a fazer

programas ainda mais úteis. Nestes comandos estão inclusos o case e os laços for, while e until. Além disso,

vamos falar de funções e, por último, teremos um programa em shell script.

Case

O case é para controle de fluxo, tal como é o if. Mas enquanto o if testa expressões não exatas, o case vai agir

de acordo com os resultados exatos. Vejamos um exemplo:

case $1 in parametro1) comando1 ; comando2 ;; parametro2) comando3 ; comando4 ;;

2. Segunda parte, se aprofundando mais! 5

*) echo "Você tem de entrar com um parâmetro válido" ;; esac

Aqui aconteceu o seguinte: o case leu a variável $1 (que é o primeiro parâmetro passado para o programa), e

comparou com valores exatos. Se a variável $1 for igual à "parametro1", então o programa executará o

comando1 e o comando2; se for igual à "parametro2", executará o comando3 e o comando4, e assim em

diante. A última opção (*), é uma opção padrão do case, ou seja, se o parâmetro passado não for igual a

nenhuma das outras opções anteriores, esse comando será executado automaticamente.

Você pode ver que, com o case fica muito mais fácil criar uma espécie de "menu" para o shell script do que

com o if. Vamos demonstrar a mesma função anterior, mas agora usando o if:

if [ −z $1 ]; then echo "Você tem de entrar com um parâmetro válido" exit elif [ $1 = "parametro1" ]; then comando comando elif [ $1 = "parametro2" ]; then comando comando else echo "Você tem de entrar com um parâmetro válido" fi

Veja a diferença. É muito mais prático usar o case! A vantagem do if é que ele pode testar várias expressões

que o case não pode. O case é mais prático, mas o if pode substituí−lo e ainda abrange mais funções. Note

que, no exemplo com o if, citamos um "comando" não visto antes: o elif − que é uma combinação de else e if.

Ao invés de fechar o if para criar outro, usamos o elif para testar uma expressão no mesmo comando if.

For

2. Segunda parte, se aprofundando mais! 6

O while testa continuamente uma expressão, até que ela se torne falsa. Exemplo:

variavel="valor" while [ $variavel = "valor" ]; do comando comando done

O que acontece aqui é o seguinte: enquanto a "$variavel" for igual a "valor", o while ficará executando os

comandos 1 e 2, até que a "$variavel" não seja mais igual a "valor". Se no bloco dos comandos a "$variavel"

mudasse, o while iria parar de executar os comandos quando chegasse em done, pois agora a expressão

$variavel = "valor" não seria mais verdadeira.

Until

Tem as mesmas características do while, a única diferença é que ele faz o contrário. Veja o exemplo abaixo:

variavel="naovalor" until [ $variavel = "valor" ]; do comando comando done

Ao invés de executar o bloco de comandos (comando1 e comando2) até que a expressão se torne falsa, o until

testa a expressão e executa o bloco de comandos até que a expressão se torne verdadeira. No exemplo, o bloco

de comandos será executado desde que a expressão $variavel = "valor" não seja verdadeira. Se no bloco de

comandos a variável for definida como "valor", o until pára de executar os comandos quando chega ao done.

Vejamos um exemplo para o until que, sintaticamente invertido, serve para o while também:

var= count=

2. Segunda parte, se aprofundando mais! 8

until [ $var = "0" ]; do comando comando if [ $count = 9 ]; then var= fi count=expr $count + 1 done

Primeiro, atribuímos à variável "$var" o valor "1". A variável "$count" será uma contagem para quantas vezes

quisermos executar o bloco de comandos. O until executa os comandos 1 e 2, enquanto a variável "$var" for

igual a "0". Então usamos um if para atribuir o valor 0 para a variável "$var", se a variável "$count" for igual

a 9. Se a variável "$count" não for igual a 0, soma−se 1 a ela. Isso cria um laço que executa o comando 10

vezes, porque cada vez que o comando do bloco de comandos é executado, soma−se 1 à variável "$count", e

quando chega em 9, a variável "$var" é igualada a zero, quebrando assim o laço until.

Usando vários scripts em um só

Pode−se precisar criar vários scripts shell que fazem funções diferentes, mas, e se você precisar executar em

um script shell um outro script externo para que este faça alguma função e não precisar reescrever todo o

código? É simples, você só precisa incluir o seguinte comando no seu script shell:

. bashscript

Isso executará o script shell "bashscript2" durante a execução do seu script shell. Neste caso ele será

executado na mesma script shell em que está sendo usado o comando. Para utilizar outra shell, você

simplesmente substitui o "." pelo executável da shell, assim:

sh script tcsh script

Nessas linhas o script2 será executado com a shell sh, e o script3 com a shell tcsh.

2. Segunda parte, se aprofundando mais! 9

#!/bin/bash

Exemplo Final de Script Shell

Principal() { echo "Exemplo Final sobre o uso de scripts shell" echo "−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−" echo "Opções:" echo echo "1. Trasformar nomes de arquivos" echo "2. Adicionar um usuário no sistema" echo "3. Deletar um usuário no sistema" echo "4. Fazer backup dos arquivos do /etc" echo "5. Sair do exemplo" echo echo −n "Qual a opção desejada? " read opcao case $opcao in

  1. Transformar ;;
  2. Adicionar ;;
  3. Deletar ;;
  4. Backup ;;
  5. exit ;; *) "Opção desconhecida." ; echo ; Principal ;; esac } Transformar() { echo −n "Para Maiúsculo ou minúsculo? [M/m] " read var if [ $var = "M" ]; then echo −n "Que diretório? " read dir for x in /bin/ls $dir; do y=echo $x | tr '[:lower:]' '[:upper:]' if [! −e $y ]; then mv $x $y fi done elif [ $var = "m" ]; then

2. Segunda parte, se aprofundando mais! 11

echo −n "Que diretório? " read dir for x in /bin/ls $dir; do y=echo $x | tr '[:upper:]' '[:lower:]' if [! −e $y ]; then mv $x $y fi done fi } Adicionar() { clear echo −n "Qual o nome do usuário a se adicionar? " read nome adduser nome Principal } Deletar() { clear echo −n "Qual o nome do usuário a deletar? " read nome userdel nome Principal } Backup() { for x in /bin/ls /etc; do cp −R /etc/$x /etc/$x.bck mv /etc/$x.bck /usr/backup done } Principal

Hugo Cisneiros, hugo_arroba_devin_ponto_com_ponto_br

2. Segunda parte, se aprofundando mais! 12