Este documento apresenta comandos básicos de shell script como cat, date, find, grep e test para manipular arquivos e strings. Também explica estruturas de controle como if/then e case para tomar decisões no fluxo do programa com base em condições e variáveis.
1. Fundamento de
Programação Aplicada a
Redes
Aula 4 – Comandos básicos shell script
Professor: Paulo Cesar
E-mail: pccbranco@gmail.com
2. Comandos Básicos
Detalhes sobre alguns comandos
Comando Função Opções úteis
cat Mostrar arquivo -n -s
cut Extrai campo -d -f -c
date Mostra data -d
find Encontra arquivos -name -iname -type f
grep Encontra texto -i -v -r -w -x
rev Inverte texto
sort Ordena texto -n -f -r
seq Conta números -s -f
tr Transforma texto -d -s A-Z a-z
uniq Remove arquivos duplicados -i -d -u
wc Conta letras -c -l -w
read
3. Shell Script
Recebendo entrada de dados
O comando “read” faz com que variaveis possam
receber entradas do usuário.
Quando o script encontra um comando “read”, ele
para sua execução e aguarda que o usuário informe os
dados e tecle enter, para concluir a operação.
Ex.:
#!/bin/bash
read nome
Echo “Meu nome é $nome”
4. Aspas simples, duplas
e crase
Há muita diferença entre eles. Proteção com aspas (quoting) é a forma utilizada
para informar ao shell como interpretar os dados passados.
Aspas Simples ( '…..')
Aspas simples forçam o shell a tratar literalmente tudo o que estiver entre o
par de aspas. Não é possível encaixar aspas simples dentro de uma string
protegida por aspas simples, pois nem a barra invertida () é especial dentro de
aspas simples.
Ex:
var = 'Olá, eu sou $USER'
O Conteúdo de var é: Olá, eu sou $USER – A variável $USER não foi
processado. Tudo que se encontra dentro das aspas simples é entendido
literalmente.
5. Aspas simples, duplas
e crase
Aspas duplas (“......”)
Aspas duplas agrupam o texto como uma única string, porém
o shell processa caracteres de escape, variáveis, substituição
de comandos, etc.
Ex.:
var=“Olá, eu sou $USER”
Agora var contém Olá, eu sou root – A variavel $USER
agora vai devidamente processada e seu valor passado para
string.
6. Aspas simples, duplas
e crase
Crase (`....`)
A crase passa a saída do comando entre a crase para a
string.
Ex:
var=”Eu agora estou em: `pwd`”
O Conteúdo de var ficou: Eu estou agora estou em:
/home/aluno
7. O comando “expr”
Comandos para scripts interativos
O comando expr trabalha com expressões matemáticas
simples e somente números inteiros. Permite, também,
manipulação de strings, mas com recursos limitados.
Exemplos de operações matemáticas com expr podem ser vistos
abaixo:
$ expr 3 + 4
7 $ expr 5 - 2
3 $ expr 10 / 5
2 $ expr 2 * 3
expr: erro de sintaxe
$ expr 2 * 3
6
Exemplo:
#!/bin/bash
echo “Entre com um número:”
read num1
echo “Entre com outro número:”
read num2
echo “O resultado da soma foi: “
expr $num1 + $num2
8. Comando “test”
O comando test 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, segue alguns:
$ test expressão # Formato comum.
[ expressão ] # Formato recente.
[ s1 == s2 ] # Retorna verdadeiro se a string s1 for igual a
string s2
[ s1 != s2 ] # Retorna verdadeiro se a string s1 for diferente
da string s2.
9. Comando “test”
Utilizado entre variáveis
Opção Descrição
-gt Número é maior que
-ge Número é maior e igual
-lt Número é menor que
-le Número é menor e igual
-eq Número é igual
= String é igual
!= String é diferente
-n String não é nula
-z String é nula
10. Comando “test”
Utilizado em arquivos
Opção Descrição
-e Arquivo existe
-d É um diretório
-f É um arquivo normal
-r O arquivo tem permissão de leitura.
-s O tamanho do arquivo é maior que zero.
-w O arquivo tem permissão de escrita.
11. Exemplo - Script
#!/bin/bash
Echo “vou buscar os dados do sistema. Posso continuar?
[sn]”
read resposta
test “$resposta” = “n” && exit
echo “data e horario:”
date
echo
echo “uso do disco:”
df
echo “usuários conectados:”
w
12. Estrutura de Controle
O construtor “if/then” avalia uma expressão lógica para tomar
uma decisão. Em shell, se a saída retorna verdadeiro (significa
sucesso). Em caso afirmativo, executa uma ou mais comandos.
Existe um comando específico, denominado “[ ]” (caractere
especial colchete). Ele considera seus argumentos como
expressões de comparação ou testes em arquivos e retorna um
status correspondente ao resultado da comparação ( 0 para
verdadeiro e 1 para falso).
O construtor “if/then” pode testar a saída de qualquer comando,
não se limitando apenas a testes entre colchetes.
14. Exemplo – if/then
#!/bin/bash
echo "Compara dois numeros"
echo "Escreva o primeiro numero:"
read n1
echo "Escreva o segundo numero:"
read n2
if [ $n1 == $n2 ]
then
echo “Os números são iguais"
else
echo “Os números são diferentes"
f
15. Exemplo – if/then
#!/bin/bash
echo "Digite o nome de uma pasta"
read nome1
if test -d $nome1
then
cd $nome1
touch arquivo1.txt
else
mkdir $nome1
cd $nome1
touch arquivo1.txt
f
16. Estrutura de Controle
A estrutura case permite selecionar uma entre várias opções de
ação, baseando-se num valor de uma variável.
Deve ser usada no lugar da declaração if/then quando esta tiver
um grande número de condições.
Essa estrutura pode ser usada para executar declarações que
dependem de um valor isolado ou de uma faixa de valores. Se
nenhum valor for encontrado, há a opção de executar o valor
padrão “*”.
A variável definida logo após a instrução case tem que ter alguma
das opções em seguida. Se nenhuma opção for escolhida, a opção
padrão será executada.
O próximo slide mostra um exemplo de uso do case.
17. Exemplo - Case
#!/bin/bash
echo “Qual sua resposta?”
read opcao
case $opcao in
sim ) echo "Você concordou!" ;;
nao ) echo "Que pena!" ;;
* ) echo "Nem sim, nem não";;
esac
Deve-se observar que as instruções terminam com um duplo
ponto-e-vírgula “;;”. Se não for assim, a instrução seguinte será
executada junto. Este duplo ponto-e-vírgula pode ser colocado
depois da instrução ou na linha seguinte. Para encerrar a
estrutura ”case” usa-se ”esac”, que é case escrito ao contrário.
18. Exemplo - Case
#!/bin/bash
echo "Digite o primeiro numero:"
read n1
echo "Digite o segundo numero:"
read n2
echo "Escolha uma operação?"
read opcao
case $opcao in
soma) echo "A soma dos numeros é `expr $n1 + $n2`" ;;
sub) echo "A subtração dos numeros é `expr $n1 - $n2`" ;;
div) echo "A divisão dos numeros é `expr $n1 / $n2`" ;;
mult) echo "A multiplicação dos numeros é `expr $n1 * $n2`" ;;
*) echo " Nenhuma operação foi realizada" ;;
esac