Escolar Documentos
Profissional Documentos
Cultura Documentos
Índice
• BASH
• Conceito
• História
• Sintaxe: E/S, variáveis, arrays, operadores, Estruturas de decisão e repetição,
substituições e funções
• Opções avançadas: Sistema de ficheiros, Tarefas administrativas, Verificação
de performance, Logs e Sinais
#!/bin/sh
# Author : RV
# Copyright (c) 2021 ISLA Santarém
# Script : ex1.sh $chmod +x ex1.sh
$./ex1.sh
echo ”Qual é o seu nome?" Qual é o seu nome?
read NOME >Ricardo
echo ”Olá, $NOME" Olá, Ricardo
$
# -> utilize para comentar uma linha
read varname [more vars,]
Definir Variável
• nome_variavel = valor_variavel
Acesso ao valor
• Para aceder ao valor armazenado de uma variável, usa-se o prefixo cifrão ($)
antes do seu nome.
Sistemas Operativos 2021/22 8
Argumentos de uma script
$0 $1 $2 $3 $4 $5 $6 ... $9
Existem parâmetros especiais que permitem aceder todos os argumentos da linha de comando de uma só vez.
$* e $@ irão agir da mesma forma, a menos que estejam entre aspas duplas, "".
Ambos os parâmetros especificam os argumentos da linha de comando. No entanto, o parâmetro especial "$*"
pega na lista inteira como um argumento com espaços entre os elementos e o parâmetro especial "$@" pega a
lista inteira e separa-a em argumentos separados.
Sistemas Operativos 2021/22 10
Arrays
Definir Valores do Array
nome_array[índice] = valor #!/bin/sh
# Author : RV
Aceder a Valores do Array # Copyright (c) 2021 ISLA Santarém
${nome_array[índice]} # Script : ex3.sh
$./ex3.sh
NAME[0]=”Marcelo" Primeiro Indice: Marcelo
NAME[1]=”Nuno" Segundo Indice: Rebelo
NAME[2]=”Rebelo"
NAME[3]=”Sousa"
echo ”Primeiro Indice: ${NAME[0]}"
echo "Segundo Indice: ${NAME[2]}"
Lógicos
Relativos
#!/bin/bash
#! /bin/bash
case word in
pattern1) command-list1
;;
pattern2) command-list2
;;
patternN) command-listN
;;
esac
case $opcao in
S) echo ”Mostrar todos ficheiros..."
ls -a ;;
N) echo " Mostrar todos ficheiros não ocultos..."
ls ;;
X) exit 0 ;;
while [ expression ]
do
command-list
done
#!/bin/sh
0
a=0 10
while [ "$a" -lt 10 ] # ciclo1 210
do 3210
b="$a" 43210
while [ "$b" -ge 0 ] # ciclo2 543210
do echo -n "$b " 6543210
b=`expr $b - 1` 76543210
done 876543210
echo a=`expr $a + 1` 9876543210
done
#!/bin/bash
7
9
for i in 7 9 2 3 4 5
2
do 3
echo $i 4
5
done
until [ expression ]
do
command-list
done
#!/bin/bash 20
19
18
COUNTER=20
17
until [ $COUNTER -lt 10 ] 16
do 15
echo $COUNTER 14
13
let COUNTER-=1
12
done 11
#!/bin/sh
Valor de a é 10
a=10
echo -e ”Valor de a é $a \n"
#!/bin/sh
#!/bin/sh
INPUT 0
echo
OUTPUT 1 ERROR 2
A Pipe!
INPUT 0
INPUT 0
wc env
$ who > users.txt #grava no ficheiro os utilizadores com sessão iniciada no sistema
#!/bin/sh
function_name () {
list of commands
}
#!/bin/sh
# isla.sh
Isla () {
echo ”ISLA Santarém" $./isla.sh
} ISLA Santarém
# Invocar a função
Isla
#!/bin/sh
# isla.sh
Isla () {
echo ”ISLA Santarém $1/$2" $./isla.sh
} ISLA Santarém 2020/2021
# Invocar a função
Isla 2020 2021
#!/bin/sh
# isla.sh
Isla () {
echo ” echo ”ISLA Santarém $1/$2”
return 10
}
$./isla.sh
# Invocar a função ISLA Santarém 2021/2022
Isla 2021 2022 Valor de retorno é 10
# Chamada de retorno
ret=$?
echo ”Valor de retorno é $ret"
#!/bin/sh
#func_enc.sh
# Chamada da função um
funcao_um
Permissões Grupo
Dono
-rwxrwxrwx
Permissões dos outros
Permissões do grupo
Permissões do utilizador
flag de Diretório (d=diretório; l=link)
To stop any process by PID i.e. to kill process kill {PID} $ kill 1012
To stop processes by name i.e. to kill process killall {Proc-name} $ killall httpd
Comando TAR
Exemplos:
tar -cf index.txt.tar index.txt
Cria um ficheiro chamado index.txt.tar que armazenará o ficheiro index.txt. Usando o comando ls -la pode verificar-
se que o ficheiro index.txt foi somente arquivado (sem compactação), isto é útil para juntar diversos ficheiros num
só.
tar -xf index.txt.tar - Desarquiva o ficheiro index.txt criado pelo comando anterior.
Comando rsync
Exemplos:
$ rsync -av /mnt/hda6/trabalho/ /mnt/backup/
A opção "-a" (archive) faz com que todas as permissões e atributos dos ficheiros sejam mantidos,
da mesma forma que ao criar os ficheiros com o tar, e o "v" (verbose) mostra o progresso no ecrã.
Exemplos:
rsync -az -e "ssh -i $CHAVE_PRIVADA -C“ origem destino
Realiza a cópia dos ficheiros de origem para o destino, através do shell remoto (SSH), utilizando
uma chave como mecanismo de autenticação.
-az -> Mantém os atributos dos ficheiros e realiza compactação dos dados.
-e -> define o shell remoto que será utilizado.
-C -> Realiza compactação dos dados na transmissão.
Ficheiro crontab
Dia da Semana - Valor entre 0 e 7 (identificando os dias de Domingo a Sábado). Note que tanto 0 e 7 equivalem
a Domingo.
Utilizador - O utilizador especificado será usado para executar o comando (o utilizador tem de existir).
Comando - Comando que será executado. Podem ser usados parâmetros normais usados na linha de comando.
OBS: Não esqueça de incluir uma linha em branco no final do ficheiro, caso contrário o último comando não
será executado.
00 06 * * 1 root updatedb
# Executa o comando updatedb todas as segunda-feira às 06:00.