Vous êtes sur la page 1sur 43

Programando em Shell

Script
Msc. Eng. Solander Patrcio Lopes Agostinho
Sobre o shell script...

Script: linguagem para sistemas em tempo de execuo


Linguagem usada em S.Os
Vrios dialetos
Trabalha com o auxilio de um interpretador
GNU/Linux: Bash
Outros interpretadores: ksh, csh, tcsh, rc, es, dos...
Procedimentos iniciais

Tais procedimentos podem ser feitos via terminal ou graficamente:


Criar um arquivo e gaurda-lo com a extenso .sh
Abrir o arquivo em modo edio
Na primeira linha escreva: #!/bin/bash
Asseguir escreva uma mensagem usando o comando echo(?)
Ex: echoMeu primeiro programa em shell script
Salve as modificaes e fecha arquivo
Como executar?

Antes precisamos falar sobre o comando Chmod


O que ?
Para que serve?
O que tem ele haver com o assunto desta aula?
Chmod

Comando para gerenciar permisso em diretrios e


arquivos no ambiente Linux
rwx
r=read (leitura)
w=write (gravao, alterao, deleo)
x=execute (execuo)
Configuraes rwx

Baseado em padro binrio


0= No permitido
1= permitido
Arquivo ou diretrio possui 3 modos de edio:
Dono
Grupo
Outros
Outros parmetros
+x: modo execuo (todos)
u+x: modo execuo (apenas o dono)
-r
Entendendo os nmeros....

$chmod 740 Arq?????


Para arquivos

0 (zero) permisso negada


1 permisso de execuo
2 permisso de gravao
3 permisso de gravao e execuo
4 permisso de leitura
5 permisso de leitura e execuo
6 permisso de leitura e gravao
7 soma de todas as permisses
Para Diretrios (Pastas)

0 (zero) permisso negada


1 permisso para entrar no diretrio
2 permisso para gravar dentro do diretrio
3 permisso de entrar e gravar no diretrio
4 permisso para listar o contedo do diretrio
5 permisso de listar e entrar no diretrio
6 permisso de listar e gravar no diretrio
7 soma de todas as permisses
Para Humanos

Modo letras um pouco mais amigvel


Chmod g+w arq
Chmod o+rx arq
Chmod ug+wx arq
Chmod uog-rwx arq
Como executar?

Abrir o terminal shell


V at o diretrio onde se encontra o seu arquivo
Devemos primeiro dar permisso para que o mesmo
execute
Chmod +x nome_arq
Em seguida so fazer : ./nome_arq e prontos
Se tudo der certo o mesmo exibe a mensagem do
script no terminal
O RESTO DIVERSO
Varives em shell...

No precisamos declarar o tipo (Fixe n )


Ex. Var=valor ou valor
Valor pode ser char, string int, float....
Exemplos
$ t=Esta conta do usurio $user
$ echo $t
$ t=Esta conta do usurio $user
$a=Meu diretrio atual `pwd`
Echo $a
Lendo a varivel do teclado

Echo Digite o valor da varivel:; read var


Usurio digita e tecla enter
Echo $var
Imprime o que foi colocado dentro da varivel
Comando IF

Para controle de fluxo


if [ -e $a ]
then
echo 'A varivel $a existe.'
Else
echo 'A varivel $a no existe.'
fi
Operadores usando IF
Comandos teis...
Uso do comando CASE...

if [ -z $1 ]; then
echo "Voc tem de entrar com um parmetro vlido"
exit
elif [ $1 = "parametro1" ]; then
comando1
comando2
elif [ $1 = "parametro2" ]; then
comando3
comando4
else
echo "Voc tem de entrar com um parmetro vlido"
fi
Uso do comando CASE...

case $1 in
parametro1) comando1 ; comando2 ;;
parametro2) comando3 ; comando4 ;;
*) echo "Voc tem de entrar com um parmetro vlido" ;;
esac
Comando For...

Substitui uma varivel por um valor:

for original in *; do
for i in *
resultado=`echo $original |
do
tr '[:upper:]' '[:lower:]'`
cp $i $i.backup
mv $i.backup /usr/backup
if [ ! -e $resultado ]; then
done
mv $original $resultado
fi
done
Comando While e Until...

variavel="naovalor"
variavel="valor"
until [ $variavel = "valor" ];
while [ $variavel = "valor" ]; do
do
comando1
comando1
comando2
comando2
done
done
Exemplo....

var=1
count=0
until [ $var = "0" ]; do
echo Va=$var
echo Comando Until ainda no terminou sua execuo

comando2
if [ $count = 9 ]; then
var=0
fi
count=`expr $count + 1`
done
Como executar um Script dentro do outro??

J temos feito isto:


. Script.sh
Sh script.sh
Variveis especiais...
Redirecionamentos
Utilidades...
Utilidades...
Utilidades...
Operaes artmitricas

a=40;
b=29;
c=$a+$b; NO FUNCIONA
d=$(( $a + $b ));
$(( a + b ))
$[5+6]
if [ $var -eq 10 ]
Declarao prvia...

a=30;
b=2;
declare -i c; #A varivel c do tipo inteiro
c=$a+$b; #A operao resolvida diretamente... cuidado com os
espaos...
Comando let...

x=1
let x=x*2+3 #output5
echo "x=$x"
let x-- #output4
echo "x=$x"
y=2
let x=x + 3**y #output 13
echo x=$x
Comando expr...

$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
Comando bc...?

Para que serve?


Como usar?
Exemplo?
Regras de precedncia

Expresses com parntesis so efectuadas em primeiro lugar


\*, % e / tm maior precedncia do que o + e -
Resto esquerda => direita
echo $((189*23+34/2-300))
O comando shutdown
Sintaxe:
shutdown [opes] [horrio] [mensagem]
Opes mais comuns:
-h Finalizar e desligar o sistema
-r Reiniciar o sistema
-f Inicializao rpida - no faz verificao do sistema de arquivos
(fsck) no prximo boot
-k Enviar mensagens de aviso, mas sem finalizar o sistema
-F Forar a verificao do sistema de arquivos na prxima
inicializao
-c Cancelar a finalizao ou reinicializao do sistema
-P Desliga o computador
Exemplos...

Reiniciando a mquina
Sudo shutdown r now
Desligando realmente
Sudo shutdown h now
Avisando ao usurio que o sistema ser delisgado:
Sudo shutdown k now
Termino programado
Sudo shutdown h 30
Sudo shutdown h 30 Mensagem
Sou root e no quero obedecer o shutdown
Sudo shutdown -c
Halt e poweroff...

Qual a diferena do funcionamento destes comandos com o


shutdown?
Matando processos

Comando Kill
Enviar sinal ao processo ou mesmo matando o mesmo
Kill s SINAL PID
SIGTERM(15)- Mata o processo de forma Educada
SIGKILL(9)- Fora o termino do processo (No pode ser ignorado)
Kill Exemplos

SIGTERM
Kill PID
Kill s TERM PID
Kill TERM PID
Kill -15 PID
SIGKILL
Kill -9 PID
Kill s kILL PID
Kill KILL PID
Kill -9 -1
Killall

Mata o processo com base no seu nome e no no PID


Killall -9 chrome
-e: procura o nome exato (15 caracteres)
-i: no se faz sentir o case sensitive
-u: mata os processos s do usurio
Pkill
Envia sinal para quaisquer processos, tendo como entrada somente parte do
nome
Pgrep l [nome]: lista os processos que sero afetados
Pkill [nome]
Xkill
Scripts de arranque...

/etc/init.d
/etc/init.d/arquivo.sh
chmod 755 /etc/init.d/arquivo.sh
update-rc.d arquivo.sh defaults