Programacao do Shell
Programação do Shell
A programação do Shell permite que o administrador crie pequenos programas para automatizar a administração do sistema, como por exemplo, uma sequência de comandos para realizar backup de dados.
Um programa Shell, ou script shell, é criado em um arquivo de texto contendo comandos do Linux, e pode incluir variáveis, realização de testes, laços de repetição, comentários, etc.
Um programa Shell é interpretado linha a linha pelo Shell, portanto, não é um programa a ser compilado [1].
Comandos básicos
Um script shell inicia com a definição de qual será o Shell interpretador do comando, por exemplo:
#!/bin/bash
Dentro do programa um comentário inicia com o caractere #, com exceção da linha de definição do Shell interpretador.
Exemplo de script que imprime uma frase [1]:
#!/bin/bash #Este script imprime uma frase echo "Alo $USER, bom dia!"
- No exemplo é utilizada a variável $USER que retorna o nome do usuário.
O script deve ser salvo em um arquivo com a extensão .sh (exemplo: alo.sh) e deve ter permissão de execução:
chmod +x alo.sh
Para executá-lo, chamar pelo nome do arquivo, por exemplo:
./alo.sh
Variáveis e argumentos
- Variáveis internas do Shell
- O Shell possui várias variáveis internas, como por exemplo $USER, $HOME, $SHELL, $PATH, $PWD,etc.
- Uma lista das variáveis internas do Shell pode ser obtida com o comando:
printenv
- Variáveis definidas pelo usuário
- O usuário pode definir variáveis dentro de um script e associar valores a elas, por exemplo:
var="valor"
- O valor pode ser uma frase, numero, comando ou outra variável.
- Não pode haver espaços entre a variável e o valor.
- O valor pode ser expressado entre as aspas (“ ”), apóstrofos (' ') ou crases (` `):
- aspas (“ ”): interpretam as variáveis que estiverem dentro do valor;
- apóstrofos (' '): leem os valores literalmente, sem interpretar nada;
- crases (` `): interpretam um comando e retornar a sua saída para a variável.
Exemplos [2]:
var="Eu sou o usuário $USER" echo $var Eu sou o usuário evandro
var='Eu sou o usuário $USER' echo $var Eu sou o usuário $USER
var="Meu diretório atual é o `pwd`" echo $var Meu diretório atual é o /home/evandro
- Variáveis passadas como argumentos
- Um script pode manipular variáveis que recebem valor de argumentos passados quando o script é chamado.
- Internamente ao script, as seguintes variáveis são utilizadas:
- '$0' retorna o nome do script;
- '$1 a $9' retorna valor dos argumentos passados na chamada do script;
- '$#' retorna o número de argumentos;
- '$*' retorna todos os argumentos.
Exemplo:
#!/bin/bash #Este script verifica se há dois argumentos #e realiza a soma dos mesmos if [ $# -eq 2 ] then soma=`expr $1 + $2` echo "Soma = $soma" else echo "Usar 2 argumentos" fi
- Variáveis cujo valor é requisitado ao usuário pelo script
- Como qualquer linguagem de programação o usuário pode ser solicitado a fornecer um valor, o qual será lido pela função read e armazenado em uma variável.
- Exemplo:
#!/bin/bash #Este script requisita que o usuário digite um valor echo -n "Por favor, digite seu nome: " read nome echo "Seu nome é $nome"
- Variável $?
- Retorna o status do último comando executado:
- 0 em caso de sucesso
- un número diferente de zero caso contrário.
- Exemplo:
true echo $? 0
false echo $? 1
Estruturas de controle
- if
- Implementa o clássico se-então-senão.
Exemplos:
#!/bin/bash if [ $HOME = `pwd` ] then echo "Você está no diretório home." else echo "Você não está no diretório home" fi
Veja a seguir os parâmetros mais comuns utilizados com o comando teste [3]:
- n string1: o comprimento de string1 é diferente de 0;
- z string1: o comprimento de string1 é zero;
- string1 = string2: string1 e string2 são idênticas;
- string1 != string2: string1 e string2 são diferentes;
- inteiro1 -eq inteiro2: inteiro1 possui o mesmo valor que inteiro2;
- inteiro1 -ne inteiro2: inteiro1 não possui o mesmo valor que inteiro2;
- inteiro1 -gt inteiro2: inteiro1 é maior que inteiro2;
- inteiro1 -ge inteiro2: inteiro1 é maior ou igual a inteiro2;
- inteiro1 -lt inteiro2: inteiro1 é menor que inteiro2;
- inteiro1 -le inteiro2: inteiro1 é menor ou igual a inteiro2;
- e nome_do_arquivo: verifica se nome_do_arquivo existe;
- d nome_do_arquivo: verifica se nome_do_arquivo é um diretório;
- f nome_do_arquivo: verifica se nome_do_arquivo é um arquivo regular (texto, imagem, programa, docs, planilhas).
- case
- Implementa um se múltiplo.
Exemplo:
#!/bin/bash echo -n "Digite um número: " read num case $num in 1) echo "Número 1"; ;; 2) echo "Número 2"; ;; *) echo "Não é número 1 nem 2"; ;; esac
- while e for
- [4]
#!/bin/bash i=1; while [ $i -le 10 ] ; do echo $i i=`expr $i + 1 `; done
#!/bin/bash for i in $( seq 10 ) ; do echo $i; done
Exercícios
- Faça um script que liste o nome do usuário logado e imprima o seu diretório home.
- Faça um script que imprima a data no formato 04Nov2015 e imprima na sequência o conteúdo do diretório home.
- Faça um script que verifique se um usuário passado como parâmetro existe (sugestão: comando getent: https://en.wikipedia.org/wiki/Getent).
- Faça um script que verifique se um grupo passado como parâmetro existe (sugestão: comando getent).
- Faça um script que liste os membros de um grupo primário passado como parâmetro.
- Faça um script que liste os membros de um grupo secundário passado como parâmetro.
Referências
- ↑ 1,0 1,1 VALLE, O. T. Adminstração de Redes com Linux: Fundamentos e práticas, IFSC, Florianópolis, 2010.
- ↑ http://www.devin.com.br/shell_script/
- ↑ http://www.devmedia.com.br/introducao-ao-shell-script-no-linux/25778
- ↑ http://www.vivaolinux.com.br/artigo/Programacao-com-Shell-Script?pagina=2
usuário
--Evandro.cantu (discussão) 10h23min de 4 de novembro de 2015 (BRST)