Shell Script
O que é Shell
O Shell é o "prompt" da linha de comando do Linux, que recebe os comandos digitados pelo usuário e os executa.
Mas o Shell é muito mais poderoso que seu primo distante. Além dos comandos básicos para navegar entre diretórios e manipular arquivos, ele também possui todas as estruturas de uma linguagem de programação, como IF, FOR, WHILE, variáveis e funções. Com isso, também é possível usar o Shell para fazer Scripts e automatizar tarefas.
Shell Script
Um script é um arquivo que guarda vários comandos e pode ser executado sempre que preciso. Os comandos de um script são exatamente os mesmos que se digita no prompt, é tudo Shell.
Script em inglês significa roteiro. Para criar um script deve-se criar um arquivo texto com diversos comandos. E s t e s c o m a n d o s s e r ã o e x e c u t a d o s e m o r d e m . Exatamente como num roteiro.
Tipos de Shell
● Ksh - Korn Shell (David G. Korn at AT&T Bell
Labs)
● Bsh – Bouner Shell (Steve Bourne 7ª versão do
UNIX Bell Labs)
● Csh – C like shell
Shell Script
Escolher o diretório onde colocar o script, para que o script possa ser executado de qualquer parte do sistema, mova−o para um diretório que esteja no seu PATH.
#echo $PATH
Para criar o arquivo e colocar nele os comandos use o VI ou VIM ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo.
Shell Script
Colocar a chamada do Shell na primeira linha na primeira linha do script deve ser:
#!/bin/bash
Para que ao ser executado, o sistema saiba que é o Shell quem irá interpretar estes comandos.
Tornar o script o arquivo um executável, use o comando para que seu script seja reconhecido pelo sistema como um comando executável.
Parâmetros de Entrada
Os argumentos da linha de comando são passados para o shell através da variável local $argv. Os campos individuais dessa variável podem ser acessados como em uma
variável local qualquer. Além disso, uma série de atalhos é definida para facilitar o acesso a esses parâmetros:
$0 : o nome do script
$n : o n-ésimo argumento da linha de comando $* : todos os argumentos da linha de comando $# : número de argumentos
$? : status do último comando executado (status <> 0 indica erro) $$ : número de processo (PID) do shell que executa o script
Testando Parâmetros de Entrada
“Começando a nerdisse”
#!/bin/bash
#exemplo de parâmetros de entrada echo "Nome do script : $0"
echo "Primeiro parâmetro : $1" echo "Todos os parâmetros : $*" echo "Numero de parametros : $#" echo "Numero deste processo : $$" exit 0
Começando a Brincadeira
Fazer um script chamado "sistema" e colocar estes comandos nele. O conteúdo do arquivo "sistema" seria o seguinte:
#!/bin/bash
date
df -h
w
Shell Script
Executar os três comandos seguidos resulta em um bolo de texto na tela, misturando as informações e dificultando o entendimento. É preciso trabalhar um pouco a saída do script, tornando−a mais legível.
Para usar o echo, basta colocar entre "aspas". Se nenhum texto for colocado, uma linha em branco é mostrada.
#!/bin/bash
echo "Data e Horário:" date
echo
echo "Uso do disco:" df
echo
echo "Usuários conectados:" w
Shell Script
Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.
#!/bin/bash
echo "Vou buscar os dados do sistema. Posso continuar? [sn] " read RESPOSTA
test "$RESPOSTA" = "n" && exit echo "Data e Horário:"
date echo
echo "Uso do disco:" df
echo
echo "Usuários conectados:" w
Exemplos:
Fazer um script chamado “calc_idade.sh" e colocar estes comandos nele. O conteúdo do arquivo “calc_idade.sh" seria o seguinte:
#!/bin/bash
echo "Script para calcular a idade"
echo "Entre com o seu ano de nascimento: " read RESP
IDADE=$(($(date +%Y)-$RESP)) echo "Sua idade e $IDADE anos"
Exemplos:
Fazer um script chamado “system.sh" #!/bin/bash
clear
echo "Hello, $USER" echo
echo "Hoje e `date`, estamos na semana `date +"%V"`." echo
echo "Usuarios conectados atualmente:" w | cut -d " " -f 1 - | grep -v USER | sort -u echo
echo "Este um sistemas operacional `uname -s`" echo
echo "Tempo de uptime" uptime
Comandos test
O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números,
textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito.
Comandos teste
Comparações entre números
-eq : igual a
-ne : diferente de -gt : maior que
-ge : maior ou igual a -lt : menor que
-le : menor ou igual a
-a : AND binário (bit a bit) -o : OR binário (bit a bit)
Associações entre condições
&& : AND lógico || : OR lógico
Comparações entre strings usando []
= : igual a
!= : diferente de
Conceitos Avançados
Assim como os comandos do sistema que
possuem e opções e parâmetros, os scripts
também podem ser preparados para receber
dados via linha de comando.
• Dentro do script, algumas variáveis especiais são
definidas automaticamente, em especial, "$1"
contém o primeiro argumento recebido na linha de
comando, "$2" o segundo, e assim por diante.
Operador if
if comando 1 then ... elif comando 2 then ... else ... fi Exemplo 2:echo "Compara dois numeros" echo "Escreva primeiro numero:" read n1
echo "Escreva segundo numero:" read n2 if [ $n1 -eq $n2 ]; then echo "$n1 == $n2" else echo "$n1 >< $n2" fi Exemplo 1:
Echo “ Digite um numero”
read VAR
if [ $VAR -ge 10 ] && [ $VAR -le 20 ]; then
echo “Seu número esta entre 10 e 20!" else
echo "$VAR" fi
Operador for
for VAR in LISTA; do comandosdone
Desafio:
Crie um shell script para criar pasta com nome DIRXX,
onde XX varia de 01 a 99. Dica: use o operador for com comando printf para gerar o nome das pastas a criar.
Exemplos for:
for i in $(seq 1 10); do echo $i; done for ((i=1;i<11;i++)); do echo $i; done
Operador while
while CONDIÇÃO; do ....comandos... done Desafio:Escreva um shell script que execute uma contagem até um numero informado pelo usuario e vai informando esse numero na tela. Exemplos while: i=1 while [ $i -le 100 ]; do echo "$i" i=$((i+1)) done
Operador case
O comando case é um pouco difícil de se usar. Também um pouco difícil de se acostumar. Ele compara uma variável passada e vai comparando com cada valor listado. A sintaxe é assim:
case <variável> in
<algo_para_comparar>1) <comando>1 ; <comando>2 ;; <algo_para_comparar>2) <comando>3 ; <comando>4 ;; <algo_para_comparar>n) <comando>n ; <comando>n+1 ;; *) echo "Você tem de entrar com um parâmetro válido" ;; esac
Desafio:
Crie um menu com 4
opções onde a ultima opção é sair.
Menu
while : ; do echo -n " ---Administrar usuarios--- 1 - teste1 2 - teste2 3 - Sair---Escolha uma das opcao:" read opcao case "$opcao" in 1)echo "teste1";; 2)echo "teste2";; 3)exit;; esac done Exemplo case: case $1 in
"list") echo "Listar!";; "ni!") echo "Ni!";;
*) echo "Não conheço $1";; esac
Exemplo PráDco
Criar um software em bash com os seguintes itens: - Cadastrar Usuário. - Deletar Usuário. - Exibir Usuários. - Adicionar Grupo. - Deletar Grupo.
- Adicionar Usuário ao Grupo. - Listar Usuários do Grupo.