You are on page 1of 23

Programando em shell script - Devin http://www.devin.com.

br/shell_script/

Tutoriais
Dicas
Linux
Servidores
Internet
Programação
Programas

Programação
28 1
09 de agosto de 2004

Programando em shell script

179

671,007
891 5 34 15 85

Índice de Conteúdo

Primeira parte, uma


introdução
Conceito de
Variáveis em shell

1 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

script
Controle de fluxo
com o if
Outras alternativas
Segunda parte, se
aprofundando mais!
case
for
while
until
Usando vários
scripts em um só
Variáveis especiais
Funções
Exemplo Final
Terceira parte, janelas
graficas

Primeira parte, uma introdução


Quem usa Linux conhece bem o prompt de comando sh, ou variações como o bash. O ue
muita gente não sabe é que o sh ou o bash têm uma “poderosa” linguagem de script
embutido nelas mesmas – shell script. Diversas pessoas utilizam-se desta linguagem
para facilitar a realização de inúmeras tarefas administrativas no Linux, ou até mesmo
criar seus próprios programinhas. Patrick Volkerding, criador da distribuição Slackware,
utiliza esta linguagem para toda a instalação e configuração de sua distribuição. Você
poderá criar scripts para automar as tarefas diárias de um servidor, para efetuar backup
automático regularmente, procurar textos, criar formatações, e muito mais. Para você
ver como esta linguagem pode ser útil, vamos ver alguns passos introdutórios sobre ela.

Interpretadores de comandos são programas feitos para intermediar o usuário e seu


sistema. Através destes interpretadores, o usuário manda um comando, e o
interpretador o executa no sistema. Eles são a “Shell” do sistema Linux. Usaremos o
interpretador de comandos bash, por ser mais “extenso” que o sh, e para que haja uma
melhor compreensão das informações obtidas aqui, é bom ter uma base sobre o conceito
de lógica de programação.

Uma das vantagens destes shell scripts é que eles não precisam ser compilados, ou seja,
basta apenas criar um arquivo texto qualquer, e inserir comandos à ele. Para dar à este
arquivo a definição de “shell script”, teremos que incluir uma linha no começo do
arquivo (#!/bin/bash) e torná-lo “executável”, utilizando o comando chmod. Vamos
seguir com um pequeno exemplo de um shell script que mostre na tela: “Nossa! Estou
vivo!”:

1 #!/bin/bash
2 echo 'Nossa! Estou vivo!'

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 é

2 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

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:

1 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

$ 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

3 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

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:

1 if [ -e $linux ]
2 then
3 echo 'A variável $linux existe.'
4 else
5 echo 'A variável $linux não existe.'
6 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:

-eq Igual
-ne Diferente
-gt Maior
-lt Menor
-o Ou
-d Se for um diretório
-e Se existir
-z Se estiver vazio
-f Se conter texto
-o Se o usuário for o dono
-r Se o arquivo pode ser lido
-w Se o arquivo pode ser alterado
-x Se o arquivo pode ser executado

Outras alternativas

Existem inúmeros comandos no Linux, e para explicar todos, teríamos de publicar um


verdadeiro livro. Mas existem outras possibilidades de aprendizado desta língua, que
também é usado em todas as programações. Primeiro de tudo você pode dar uma olhada
na manpage do bash (comando man bash), que disponibilizará os comandos embutidos
no interpretador de comandos. Uma das coisas essencias para o aprendizado é sair
coletando exemplos de outros scripts e ir estudando-os minuciosamente. Procure
sempre comandos e expressões novas em outros scripts e em manpages dos comandos.
E por último, mas não o menos importante, praticar bastante!

Na tabela a seguir, você pode encontrar uma listagem de comandos para usar em seu
shell script:

4 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

echo Imprime texto na tela


read Captura dados do usuário e coloca numa variável
exit Finaliza o script
sleep Dá uma pausa em 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!

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:

1 case $1 in
2 parametro1) comando1 ; comando2 ;;
3 parametro2) comando3 ; comando4 ;;
4 *) echo "Você tem de entrar com um parâmetro válido" ;;
5 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:

01 if [ -z $1 ]; then
02 echo "Você tem de entrar com um parâmetro válido"
03 exit
04 elif [ $1 = "parametro1" ]; then
05 comando1

5 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

06 comando2
07 elif [ $1 = "parametro2" ]; then
08 comando3
09 comando4
10 else
11 echo "Você tem de entrar com um parâmetro válido"
12 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

O laço for vai substituindo uma variável por um valor, e vai executando os comandos
pedidos. Veja o exemplo:

1 for i in *
2 do
3 cp $i $i.backup
4 mv $i.backup /usr/backup
5 done

Primeiramente o laço for atribuiu o valor de retorno do comando “*” (que é equivalente
a um ls sem nenhum parâmetro) para a variável $i, depois executou o bloco de
comandos. Em seguida ele atribui outro valor do comando “*” para a variável $1 e
reexecutou os comandos. Isso se repete até que não sobrem valores de retorno do
comando “*”. Outro exemplo:

1 for original in *; do
2 resultado=`echo $original |
3 tr '[:upper:]' '[:lower:]'`
4
5 if [ ! -e $resultado ]; then
6 mv $original $resultado
7 fi
8 done

Aqui, o que ocorre é a transformação de letras maiúsculas para minúsculas. Para cada
arquivo que o laço lê, uma variável chamada $resultado irá conter o arquivo em letras
minúsculas. Para transformar em letras minúsculas, usei o comando tr. Caso não exista
um arquivo igual e com letras minúsculas, o arquivo é renomeado para o valor da
variável $resultado, de mesmo nome, mas com letras minúsculas.

Como os exemplos ilustram, o laço for pode ser bem útil no tratamento de múltiplos
arquivos. Você pode deixá-los todos com letras minúsculas ou maiúsculas sem precisar
renomear cada um manualmente, pode organizar dados, fazer backup, entre outras
coisas.

while

6 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

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

1 variavel="valor"
2 while [ $variavel = "valor" ]; do
3 comando1
4 comando2
5 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:

1 variavel="naovalor"
2 until [ $variavel = "valor" ]; do
3 comando1
4 comando2
5 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:

01 var=1
02 count=0
03 until [ $var = "0" ]; do
04 comando1
05 comando2
06 if [ $count = 9 ]; then
07 var=0
08 fi
09 count=`expr $count + 1`
10 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.

7 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

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:

1 . bashscript2

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 script2
tcsh script3

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

Variáveis especiais

$0 Nome do script que está sendo executado


$1-$9 Parâmetros passados à linha de comando
$# Número de parâmetros passados
Valor de retorno do último comando ou de todo o shell script. (o comando “exit
$?
1″ retorna o valor 1)
$$ Número do PID (Process ID)

Você também encontra muitas variáveis, já predefinidas, na página de manual do bash


(comando “man bash”, seção Shell Variables).

Funções

Funções são blocos de comandos que podem ser definidos para uso posterior em
qualquer parte do código. Praticamente todas as linguagens usam funções que ajudam a
organizar o código. Vejamos a sintaxe de uma função:

1 funcao() {
2 comando1
3 comando2
4 [...]
5 }

Fácil de entender, não? A função funcionará como um simples comando próprio. Você
executa a função em qualquer lugar do script shell, e os comandos 1, 2 e outros serão
executados. A flexibilidade das funções permite facilitar a vida do programador, como no
exemplo final.

Exemplo Final

8 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

Agora vamos dar um exemplo de um programa que utilize o que aprendemos com os
artigos.

01 #!/bin/bash
02 # Exemplo Final de Script Shell
03 #
04
05 Principal() {
06 echo "Exemplo Final sobre o uso de scripts shell"
07 echo "------------------------------------------"
08 echo "Opções:"
09 echo
10 echo "1. Trasformar nomes de arquivos"
11 echo "2. Adicionar um usuário no sistema"
12 echo "3. Deletar um usuário no sistema"
13 echo "4. Fazer backup dos arquivos do /etc"
14 echo "5. Sair do exemplo"
15 echo
16 echo -n "Qual a opção desejada? "
17 read opcao
18 case $opcao in
19 1) Transformar ;;
20 2) Adicionar ;;
21 3) Deletar ;;
22 4) Backup ;;
23 5) exit ;;
24 *) "Opção desconhecida." ; echo ; Principal ;;
25 esac
26 }
27
28 Transformar() {
29 echo -n "Para Maiúsculo ou minúsculo? [M/m] "
30 read var
31 if [ $var = "M" ]; then
32 echo -n "Que diretório? "
33 read dir
34
35 for x in `/bin/ls` $dir; do
36 y=`echo $x | tr '[:lower:]' '[:upper:]'`
37 if [ ! -e $y ]; then
38 mv $x $y
39 fi
40 done
41
42 elif [ $var = "m" ]; then
43 echo -n "Que diretório? "
44 read dir
45
46 for x in `/bin/ls` $dir; do
47 y=`echo $x | tr '[:upper:]' '[:lower:]'`
48 if [ ! -e $y ]; then
49 mv $x $y
50 fi
51 done
52
53 fi
54 }
55
56 Adicionar() {
57 clear

9 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

58 echo -n "Qual o nome do usuário a se adicionar? "


59 read nome
60 adduser nome
61 Principal
62 }
63
64 Deletar() {
65 clear
66 echo -n "Qual o nome do usuário a deletar? "
67 read nome
68 userdel nome
69 Principal
70 }
71
72 Backup() {
73 for x in `/bin/ls` /etc; do
74 cp -R /etc/$x /etc/$x.bck
75 mv /etc/$x.bck /usr/backup
76 done
77 }
78
79 Principal

Terceira parte, janelas graficas


Nos dois topicos anteriores, vimos algumas coisas básicas e lógicas de programação em
shell no Linux. Agora para completar, darei aqui dicas de como usar janelas gráficas em
seus shell scripts. Isso mesmo, janelas que rodam no ambiente gráfico, utilizadas
facilmente em seu shell script. Com esse recurso, vai ser possível deixar o seu programa
bem amigável.

Não vai ser preciso saber muita coisa de programação em shell, pois é muito simples.
Através do programa Xdialog, você poderá criar os mais variados tipos de janelas para o
programa: caixas de texto, seleçÕes, radios, etc. O Xdialog é uma idéia que vem do
dialog/cdialog, um programa para console que gera “janelas” no console (aquelas da
instalação do Slackware) usando a biblioteca ncurses. O Xdialog ao invés de usar a
biblioteca ncurses, usa a Xlib para criar as janelas no ambiente gráfico.

Primeiro de tudo será necessário você obter o Xdialog no seu sistema. Não é comum o
Xdialog estar incluso nas distribuições, então você terá de pegar e compilar o programa.
Obtenha o programa no CD da Revista ou visite o endereço oficial do Xdialog, que é
http://xdialog.free.fr. Aqui eu peguei o arquivo Xdialog-1.4.5.tar.bz2, e agora vamos aos
passos básicos para instalar ele. Primeiro descompacte-o com o comando bunzip2
Xdialog-1.4.5.tar.bz2, e logo em seguida tar xpvf Xdialog-1.4.5.tar. Um diretório
chamado Xdialog-1.4.5 será criado, e entrando nele você estará pronto para compilá-lo e
instalá-lo. Para fazer isso use os comandos ./configure, depois make e por último make
install. No passo do make install, o binário do Xdialog será colocado em /usr/local/bin.
Pronto, agora você já poderá utilizar o Xdialog através de qualquer shell script.

E agora vamos à ação! Como aprendemos nos artigos anteriores, em shell script é só
colocar o comando dentro do arquivo que ele já vai ser executado quando o script for
executado. Então só o que temos de aprender aqui é como usar o Xdialog. Vamos ver um
primeiro exemplo:

1 #!/bin/bash
2

10 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

3 Xdialog --title "Exemplo número 1!" --center --stdout --yesno \


4 "Isto é legal?" \
5 0 0
6
7 echo $?

Como você pôde ver, o programa Xdialog gerou uma janela com título “Exemplo número
1!”, perguntando “Isto é legal?” e com opções de Sim e Não. Note que a \ (barra) serve
para indicar à shell para continuar o comando da linha seguinte, então estas três linhas
são que nem uma só. Como último comando do exemplo dado, temos o echo $?, que eu
coloquei apenas para indicar qual foi o retorno da pergunta. Caso o usuário apertou em
Sim, o retorno vai ser 0, e se apertou em Não, vai ser 1. Podemos usar este retorno para
controlar o que o usuário escolher. Vejamos um exemplo:

1 Xdialog --title "Exemplo número 2!" --center --stdout --yesno \


2 "Neste exemplo, vamos ver o que você quer fazer. Você deseja continuar com o p
3 0 0
4
5 if [ $? = "0" ]; then
6 echo "Que bom! Você continuou o programa! Parabéns!"
7 elif [ $? = "1" ]; then
8 echo "Você saiu do programa..."
9 fi

Viu como funciona? Agora vamos ver outros recursos que o Xdialog pode oferecer. Eu
vou dar vários exemplos aqui e sair comentando cada opção. Você precisará praticar
bastante e conhecer as várias opções. Primeiro vamos gerar uma simples mensagem pro
usuário ver:

1 Xdialog --title "Aviso" --center --stdout --msgbox \


2 "Este programa é apenas um exemplo para você ver como o Xdialog \
3 \nfunciona. Apropósito, se você praticar bastante pode criar \
4 \nprogra mas incríveis e facilmente, que daria muito mais \
5 \ntrabalho fazendo em outras linguagens." \
6 0 0

O usuário aperta Ok e o shell script continua normalmente. No primeiro exemplo eu usei


a opção –yesno que gerava o sim e não. Agora usei o –msgbox. Mas e se você quiser que
o usuário digite algo e isto seja gravado em um arquivo por exemplo? Vamos ver este
exemplo:

1 Xdialog --title "Que Anime que você mais gosta?" --center --inputbox \
2 "Se você sabe o que é Anime, e gosta, qual o seu preferido?\n \
3 Sua resposta será gravada no arquivo resposta." \
4 0 0 2 > resposta

Depois que o usuário preenche o campo e dá Ok, a resposta que este usuário digitou
será gravada no arquvio resposta. Isto ocorreu pelo fato de eu ter colocado o
direcionador 2> para o arquivo resposta. Se eu colocasse a opção –stdout na linha de
comando do Xdialog, a resposta do usuário apareceria na tela. Tente você.

Vamos ver agora seleção de itens, que é uma das coisas mais importantes num
programa. Desta vez usaremos a opção –menubox para gerar um menu com os itens a
serem selecionados. Mais uma vez, vamos ao exemplo:

11 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

1 Xdialog --title "Exemplo de Menu" --center --stdout --menubox \


2 "Qual sua distribuição Linux favorita?" \
3 20 50 0 \
4 1 "Slackware" \
5 2 "Debian" \
6 3 "Red Hat" \
7 4 "Conectiva Linux" \
8 5 "Eu tenho minha própria distribuição"

Viu como é fácil? O que o usuário escolher vai aparecer como resultado no console (por
causa da opção –stdout). Se eu colocasse o redirecionador 2>, poderia ir para um
arquivo como no exemplo anterior. Vamos esclarecer uma coisa aqui também… Depois
do texto “Qual sua distribuição Linux favorita?”, há 2 números. Estes dois números
correspondem à altura e comprimento da janela. Nos exemplos anteriores eu coloquei
“0 0″ pois aí o Xdialog dimensiona automaticamente o tamanho da janela. Então já sabe,
se quiser mudar o tamanho da janela, é só mudar estes dois números.

Agora como último exemplo, vamos criar uma janela em que o usuário poderá escolher
uma ou mais opções. Isto é chamado de checklist, e pode ser visto no exemplo a seguir:

1 Xdialog --title "Último exemplo - checklist" --center --checklist \


2 "Como se pronuncia Linux?" \
3 0 0 0 \
4 "Opção 1" "Láinucs" off \
5 "Opção 2" "Lenocs" off \
6 "Opção 3" "Linúcs" off \
7 "Opçào 4" "Línucs" on \
8 "Opção 5" "GNUUU/Linux" off

Veja agora a diferença entre esta checklist e o menu do exemplo anterior. Verifique que
depois de cada opção há o on e o off. O on indica que esta opção deverá já estar
marcada, e o off que não deverá estar marcada. Se o usuário escolher 3 opções, as
mesmas serão o resultado.

Bem fácil criar uma interface amigável para suas shell scripts. Se você pensa que isto é
tudo, ainda tem muito mais por trás do Xdialog. Para não ter que ficar comentando cada
opção, vou dar uma lista de parâmetros e a descrição de suas funções. O que você
deverá fazer é sair testando todas as opções e se impressionar :)

–yesno Uma janela com opções de “Sim” ou “Não”


–msgbox Apenas mostra um texto informativo
Mesmo que –msgbox, só que desaparece automaticamente em um
–infobox
determinado tempo
–inputbox O usuário preenche um campo
–rangebox Escolhe um número entre X e Y, com uma barra de rolagem
–textbox Mostra o conteúdo de um arquivo numa caixa de texto
–editbox Edita o conteúdo de um arquivo numa caixa de texto
–menubox Cria um Menu de opções, onde se seleciona um item
–checklist Mesmo que –menubox, só que pode-se selecionar vários itens
–radiolist Mesmo que –menubox, mas agora em outro estilo

12 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

–treeview Opções organizadas em forma de “árvore” (interessante)


–gauge Um indicador de processo
–tailbox Mostra o conteúdo de um arquivo
–fselect Abre uma janela de seleção de um arquivo
–dselect Abre uma janela de seleção de um diretório
–calendar Mostra um calendário para escolher uma data
–timebox Mostra uma janela para edição de horário

Você também pode encontrar alguns exemplos no diretório samples que vem junto com
o código-fonte do programa. Se você fizer algum programa legal em shell script, sinta-se
a vontade para me mandar um e-mail. Outra coisa, como o Xdialog é uma idéia tirada do
dialog/cdialog (existe também o whiptail que é parecido), você pode usar a mesma
sintaxe para criar estas “janelas” no modo console. Espero que estas informações foram
úteis a você e até a próxima :)

179

671,007
891 5 34 15 85

bash sh shell shell-script tutorial

Hugo Cisneiros (Eitch)

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e


em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar
muito Linux, o que ele vem fazendo desde 1997 :-)

13 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

Shell Script: tratamento de argumentos e opções

Shell-Script: Reconexão Automática

Shell: Entrada e Saída

Recent Trackbacks
Tópico 105 subtópico 2 seção 1: Sintaxe padrão sh | Wargate Safe
[...] variavel=”naovalor” until [ $variavel = "valor" ]; do comando1 comando2 done – See more at:
http://www.devin.com.br/shell_script/#sthash.tv3Eppib.dpuf [...]

deuzebranaweb.com.br – http://www.devin.com.br/shell_script/
[...] No Comments. « Entendendo TCP/IP (Parte 5) &#... [...]

Link para estudo de Shell Script (2ª unidade) | Cloud N3tworks


[...] SHELL SCRIPT 2ª UNIDADE [...]

Auto Estudo LPI | Portal do Educador– Academia de Práticas Inovadoras.


[...] 4. Shell Script: http://www.devin.com.br/shell_script/ [...]

Mandar e-mail via linha de comando no Linux | Fabio Anjos I.T.


[...] com o recurso de shell, que por sua vez permite criar poderosos programas que são chamados de shell

14 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

scripts. Vejamos aqui esta pequena dica de como enviar e-mail via linha de [...]

Show more trackbacks

Logar
Comentários (163)
Classificar por: Data Classificação Última Atividade

Mikael Alex · 3 semanas atrás 0

Realmente, postagem feita em 2004.


Mas tenho que admitir, muito bem elaborada e bem útil. PARABÉNS ao autor.
Estou estudando para LPI, se alguém também estiver e quiser trocar experiencias, entrar em contato
comigo ^^
E-mail : miikael.alex@gmail.com

Obrigado.

Responder

Romario · 6 semanas atrás 0

Essa postagem tem 11 anos de idade é com ela que estou iniciando meus estudos de ShellScript. Muito
Obrigado!

Responder

Mário Torres · 11 semanas atrás 0

Pessoal boa noite!


Quem pode ajudar-me nesse script?

Faça um script que exiba um menu com tres opçoes:


A- incluir um valor
B- exibir a media
C-Sair
Execute as opçoes

Responder 3 respostas · ativo 11 semanas atrás

Rodrigo · 56 semanas atrás 0

Ola amigos preciso fazer via shell script este cara combo_net_ativacao_141029150709.ZIP ficar assim
20141029173800_COMBO_NET_ATIVACAO.ZIP

Responder 1 resposta · ativo 16 semanas atrás

klebson · 23 semanas atrás 0

Muito bom! muito didático.


Um abraço, parabéns!

Responder

Felipe Pereira · 28 semanas atrás 0

Amigo queria que me ajuda-se em relação a esse IF... não sei se a logica está correta aparentemente sim,
mas ele está apresentando um erro de sintaxe.

if [ -z ${SERVIDOR} ] ; then

exec_ftp_arquivo

15 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

RESULT=$?

------------------------------------

if [ ${RESULT} -eq 0 ] ; then

logar "Transferido para FTP01"

logar "Movendo arquivo para [ $DIR_ENVIADOS_FTP01 ]."

mv $DIR_EXTRACAO/${NOME_SQL}_${DATA_ARQUIVOS}.zip $DIR_ENVIADOS_FTP01/.

else

logar "ERRO na transferencia para FTP01"

logar "Movendo arquivo para [ $DIR_AENVIAR_FTP01 ]."

mv $DIR_EXTRACAO/${NOME_SQL}_${DATA_ARQUIVOS}.zip $DIR_AENVIAR_FTP01/.

------------------------------------

elif

exec_ftp_arquivo_contax

RESULT=$?

----------------------------------

if [ ${RESULT} -eq 0 ] ; then

logar "Transferido para Contax"

logar "Movendo arquivo para [ $DIR_ENVIADOS_CONTAX ]."

mv $DIR_EXTRACAO/${NOME_SQL}_${DATA_ARQUIVOS}.zip $DIR_ENVIADOS_CONTAX/.

else

logar "ERRO na transferencia para Contax"

logar "Movendo arquivo para [ $DIR_AENVIAR_CONTAX ]."

mv $DIR_EXTRACAO/${NOME_SQL}_${DATA_ARQUIVOS}.zip $DIR_AENVIAR_CONTAX/.

-------------------------------------

else

exec_ftp_arquivo_plutao

RESULT=$?

-------------------------------------

if [ ${RESULT} -eq 0 ] ; then

16 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

logar "Transferido para Plutao"

logar "Movendo arquivo para [ $DIR_ENVIADOS_PLUTAO ]."

mv $DIR_EXTRACAO/${NOME_SQL}_${DATA_ARQUIVOS}.zip $DIR_ENVIADOS_PLUTAO/.

else

logar "ERRO na transferencia para Plutao"

logar "Movendo arquivo para [ $DIR_AENVIAR_PLUTAO ]."

mv $DIR_EXTRACAO/${NOME_SQL}_${DATA_ARQUIVOS}.zip $DIR_AENVIAR_PLUTAO/.

-------------------------------------

----------------------------------------------------------------------------------------

Responder

marcio · 35 semanas atrás 0

sensacional, belo post pra quem deseja aprender seu conteúdo é excelente, parabéns....

Responder

Marcello Henrique · 37 semanas atrás 0

Sou estudante de Redes de Computadores, e na Cadeira de Segurança, o professor pediu pra a gente fazer
um Script em Bash, implementando a Cifra de César. Porém já pesquisei em vários lugares, mas ainda não
obtive Resultado concreto à respeito.
Poderia me ajudar com esse Projeto?

Desde já Agradeço!!!

Responder

Marcel Luiz Pereira · 40 semanas atrás 0

Hugo, bem legais as informações sobre linux. Gostaria de ter mais informações sobre linux relacionados a
projetos e sistemas SOAP.

Att,
Marcel Luiz Pereira
Analista de Sistemas e Projetos

Responder

Gabriel Neres · 53 semanas atrás 0

Muito obrigado , excelente tutorial =]

Responder 1 resposta · ativo 47 semanas atrás

Anselmo · 106 semanas atrás -2

Olá amigos como fazer para calcular potência de um número no shell scrpt

Responder 2 respostas · ativo 61 semanas atrás

17 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

Wellington · 61 semanas atrás 0

HUGO CISNEIROS É UMA LENDA! TENHO UM TUTORIAL/MANUAL GNU/LINUX AQUI SUPER 10 QUE
BAIXEI EM 2004 NO SITE "IMASTERS".

Parabéns pela excelente matéria!

Responder

Gabriela · 70 semanas atrás 0

Parabeens cara! Ta muito legal

Responder

Kelvin · 75 semanas atrás 0

Olá Hugo parabéns pelo blog! show de bola vou add nos favoritos com certeza! Agora sobre o Dialog, tem
como me explicar como é uma barra de progresso com o --gauge?
mas seguinte, achei vários exemplos de como ficaria durante uma cópia de arquivo e com o uso de wget.
Agora gostaria de saber se tem como explicar como fica usando um comando apt-get install pacote, ou um
dpkg -i pacote.deb ou até mesmo um *.bin...

Será que pode me explicar como ficaria o código, tentei várias e várias maneiras e nada de funcionar :(
Valeu!

Responder

narviksw · 79 semanas atrás 0

Boa noite,

Preciso escrever as linhas abaixo dentro do arquivo /etc/environment.


Ele escreve, mas sem as aspas, ficando deste jeito : http_proxy =http://192.168.0.105:3128/
Como faço para que fique como abaixo, com aspas, para o proxy funcionar ?

echo http_proxy="http://192.168.0.105:3128/" >> /etc/environment


echo https_proxy="https://192.168.0.105:3128/" >> /etc/environment
echo ftp_proxy="ftp://192.168.0.105:3128/" >> /etc/environment
echo no_proxy="https://192.168.0.99" >> /etc/environment

Grato pela colaboração.

Tenha uma otima noite.

Responder 3 respostas · ativo 78 semanas atrás

Viviane · 79 semanas atrás 0

Boa tarde Hugo,

Estou com dificuldade para gerar backup com o tar, estou fazendo assim:

DIR_1="/etc"
DIR_2="/usr/local"
NAME=Adriano-Viviane_`date +%a`.tar.gz
FTP=192.168.25.83
USER=*******
PASS=*******

tar -zcvf $NAME $DIR_1 $DIR_2

18 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

Sou nova em linux e não sei o que estou fazendo de errado, mas esse script está mostrando todos os
arquivos dos diretórios na tela.

Agradeço pela ajuda.

Parabéns pela postagem, me ajudou em algumas outras dúvidas.

Responder 1 resposta · ativo 79 semanas atrás

Marcelo · 93 semanas atrás +1

Excelente tutorial !!!

Muito objetivo, direto e simples. Parabéns.

Responder

http://www.meckerecke.org/wbb2/thread.php?threadid=3889&sid= · 106 semanas atrás 0

Whether Cutler's contract year has a lucrative ending depends on whether he can summon the magic and
good fortune Flacco eventually did. For now, Cutler is expected to miss Sunday's game between the Bears
and Ravens because of a high ankle sprain.
http://www.meckerecke.org/wbb2/thread.php?threadi... http://www.meckerecke.org
/wbb2/thread.php?threadid=3889&sid=

Responder

Jozenir Lima · 137 semanas atrás -2

Boa noite! Desejaria saber como faço pra utilizar o DIV e o MOD em Shell Script? Ou se existe algum
operador similar para eles?

Responder 1 resposta · ativo 117 semanas atrás

Agnaldo · 132 semanas atrás -1

Estou precisando de uma ajuda????


Preciso colocar um computador com Ubuntu 1204LTS em um dominio Win2003, tudo configurado e os
usuários logando pelo Linux no Win2003 server sem problemas, mas preciso que os usuários ao se
logarem no dominio mapeiem os drives de trabalho, observação, são usuários com pastas diferentes e
permissões no arquivo .bat criado para cada um.
Seria possível criar um script shell que permita ser executado na inicialização do Linux que passe o
Usuário e Senha para o Servidor Win2003, e mapeie usando o arquivo .bat existente no win2003 server.

Se for possível teria como enviar um exemplo????

Obrigado.

Responder

Site Institucional · 133 semanas atrás 0

Comecei a usar o lunix (ubuntu) e aos pouquinhos fui me aventurando no terminal, é incrível como pode
ser simples programar. Evidente que precisa desenvolver seus conhecimentos. É uma excelente
ferramenta me apaixonei por linux por causa do terminal. Hoje não vivo sem ele. Obrigado pelo material.

Responder

ECJ · 138 semanas atrás 0

Muito bom !!! Nota 10!!


Estou acostumado a fazer .bat e estou tentando entrar no mundo linux...
Estou procurando algo como ler determinado registro dento de um arq. para comentar (inibir) o

19 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

registro.... Estava atrás de como montar telas e etc... As dicas acima são ótimas, para quem ainda não
sabe nada...

Responder

Sandro · 140 semanas atrás 0

Estou com uma duvida, preciso de um script que faça o seguinte:


tem um diretorio X e uma chamada tipo ./teste.sh mas essa chamada está no crontab e só pode ser
executada quando nesse diretorio estiverem dois arquivos um .csv e outro .txt pois desejo programa-la
para verificar todos os dias de meia e meia hora.

Responder

Marcos Yoshihiro Nak · 143 semanas atrás -2

Muito bom, parabéns.

Obrigado por compartilhar.

Responder

Pablo CSC · 153 semanas atrás 0

Opa muito bom *

Responder

Pablo CSC · 153 semanas atrás 0

muito com cara parabens

Responder

Ventura · 170 semanas atrás 0

Muito bom. Acrescentou outros conhecimentos que precisava...Não é a toa que este "tutorial" é visto
desde 24 de mar de 2008. Parabéns Hugo Cisneiros.

Responder

Marco · 170 semanas atrás 0

Muito bom, eu só senti falta de uma explicação com aplicação do comando grep.

Responder

Silvana · 179 semanas atrás 0

Valew de verdade, consegui tirar várias dúvidas.

Obrigadao

Responder

Gustavo Dutra · 181 semanas atrás -1

Muito bom cara! Eu tenho alguns artigos sobre shell script no meu blog. Inclusive estou fazendo um
framework para shell script! Acho muito massa essa linguagem!

Responder

20 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

Gutenberg Campos · 182 semanas atrás -1

Cara se puder ajudar:

tenho um script que cria uma lista onde alguns parametros são necessários, tipo:

nome da lista (consegui resolver)

criei um txt com o nome das listas e um shell script que lê linha por linha do txt e coloca na var $lista o
nome da lista;

O problema são os parametros a seguir:

email do dono (nao consegui) vai ser padrao tipo xxxx@mydomain.net

pwd da lista (nao consegui) vai ser padrao tipo 123456

tecle enter para continuar(nao consegui)

Pode ajudar?

Responder

Carlos Fagiani Junio · 185 semanas atrás -1

Heathz,

O script só executa um comando por vez... Quando as instruções do comando terminam que ele chama a
próxima

se vc tiver um script com a instrução:

wget www.site.com.br/arquivo_download.tar.gz
echo "Download concluído ou falha no download"

Ele só vai mostrar o texto no terminal se o download for concluido ou se houver falha, agora no tempo do
download ele vai ficar aguardando o wget terminar.

Responder

Heathz · 198 semanas atrás -1

ae cara... e no caso de eu ter um script que faz download de um arquivo ou compacta um grande arquivo
ou algo que exija tempo para ser executado e depois disso executa outros comandos com o arquivo novo
(criado ou baixado...) como faço para o script ficar parado até o download terminar?

Responder

Paulo França · 200 semanas atrás -1

Parabéns pelo post. Obrigado por tornar menor a minha ignorância quanto ao assunto

Responder

Daniel Donda · 205 semanas atrás -1

Parabéns, um dos mais didaticos e completos que eu já ví.

Responder

21 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

Daniel Campos Rodrig · 206 semanas atrás -1

Daniel Campos Rodrigues

Que bacana!!!

Parabens, é uma aula!!! Que os proximos possam ser assim...

Parabens!!!

Responder

Joao · 206 semanas atrás 0

ninguem para ajudar ???? :/

Responder

ícaro · 207 semanas atrás 0

massão parceiro bem resumido gostei foi fera!!!!

Responder

Joao · 208 semanas atrás 0

Olá

Sou iniciante e estou com um problemao.

Preciso executar 1 script para instalacao em varias maquinas distintas

Porem, preciso executar como root, alguem teria como me ajudar?

#!/bin/bash

su -c 'rpm -e $(rpm -aq | nome_do_arquivo)'

su -c 'rpm -i $(rpm -aq |arquivo1)'

obrigado

Responder

Marck1 · 210 semanas atrás 0

Vlw bro`

Útil pacas!!!

Responder

Myssbot · 211 semanas atrás 0

eu vi exatamente mesmo texto e coodigo na aula de hoje na 4linux, e o professor tinha dito que ele quem
fez, e se recusou dar o codigo pra um aluno que pediu!!!

professor kleber, modulo 451, dia 11/11/11

Responder

Catonho · 212 semanas atrás 0

22 de 23 30-11-2015 15:16
Programando em shell script - Devin http://www.devin.com.br/shell_script/

Obrigado, foi de grande ajuda o conteúdo.

Parabéns.

Responder

José Amarildo · 212 semanas atrás 0

Valew cara! vc deu uma grande ajuda as esses estudantes desorientados com linux como eu! rsrrs
Parabéns!!!!!

Responder

eloá · 212 semanas atrás 0

parabéns pelo tutorial,linguagem facil e de facil intendimento..

Responder

luis · 213 semanas atrás -1

Excelente, maravilha quando se aprende isto...

facilita!

Só o do Xdialog não consegui funcionar, instalei beleza, mas não funcionou nos scripts...

Responder

1 2 3 4 Next »

Postar um novo comentário


Digite o texto aqui!

Comentar como Visitante, ou logar:

Nome Email Website (opcional)

Mostrar junto aos seus comentários. Não mostrado publicamente. Se você tem um website, linke para ele aqui.

Assinar Nada Enviar Comentário

Comments by

Tutoriais
Dicas
Changelog
Contato
Termos de Uso

© 2001-2013 Devin. Consulte os termos de uso.

23 de 23 30-11-2015 15:16

You might also like