Buscar

Aula14 ComandosInternos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Programação	
  para	
  Servidores	
  
Aula	
  14	
  
Sumário	
  
•  Comandos	
  internos;	
  
•  Exercícios.	
  
2	
  
Comandos	
  
•  O	
  shell	
  reconhece	
  três	
  Dpos	
  de	
  comandos:	
  
– Comandos	
  internos	
  ou	
  embuDdos:	
  são	
  aqueles	
  que	
  o	
  
próprio	
  shell	
  executa,	
  por	
  exemplo,	
  test,	
  echo	
  e	
  read.	
  
São	
  criados	
  internamente	
  por	
  questões	
  de	
  desempenho	
  
ou	
  acesso	
  a	
  informações	
  internas	
  ao	
  shell;	
  
– Funções	
  do	
  shell:	
  são	
  trechos	
  de	
  código	
  escritos	
  na	
  própria	
  
linguagem	
  do	
  shell	
  e	
  invocados	
  da	
  mesma	
  forma	
  que	
  um	
  
comando	
  (veremos	
  este	
  assunto	
  mais	
  adiante	
  no	
  curso);	
  
– Comandos	
  externos:	
  são	
  os	
  comandos	
  e	
  aplicaDvos	
  do	
  
sistema	
  operacional	
  que	
  o	
  shell	
  executa	
  através	
  da	
  criação	
  
de	
  um	
  processo	
  separado.	
  Exemplos:	
  ls,	
  cat,	
  cp	
  e	
  
date.	
  
3	
  
Comandos	
  internos	
  
•  Atuam	
  sobre	
  variáveis:	
  
– let:	
  executa	
  operações	
  matemáDcas	
  sobre	
  variáveis	
  e	
  
expressões;	
  
– set:	
  imprime	
  o	
  valor	
  da	
  variáveis	
  internas	
  do	
  shell;	
  
– unset:	
  remove	
  o	
  valor	
  de	
  uma	
  variável	
  interna	
  do	
  shell	
  
(atribui	
  o	
  valor	
  null);	
  
– export:	
  insere	
  uma	
  variável	
  no	
  ambiente,	
  ou	
  seja,	
  torna	
  
seu	
  escopo	
  global	
  de	
  forma	
  que	
  ela	
  pode	
  ser	
  acessada	
  por	
  
qualquer	
  instância	
  “filha”	
  do	
  shell	
  corrente;	
  
4	
  
Comandos	
  internos	
  
•  Exemplo:	
  
– o	
  script	
  abaixo	
  concatena	
  o	
  valor	
  atual	
  da	
  variável	
  PATH	
  
com	
  “:$HOME/novaPasta”	
  e	
  em	
  seguida	
  salva	
  o	
  novo	
  valor	
  
no	
  ambiente:	
  
PATH=$PATH:$HOME/novaPasta 
export PATH 
5	
  
Comandos	
  internos	
  
•  Comandos	
  que	
  afetam	
  o	
  comportamento	
  do	
  script:	
  
– source:	
  tem	
  a	
  mesma	
  funcionalidade	
  do	
  comando	
  ponto	
  
(.),	
  importa	
  um	
  arquivo	
  que	
  pode	
  ter	
  textos,	
  declarações	
  
de	
  variáveis	
  e	
  funções	
  ou	
  mesmo	
  comandos;	
  
•  Se	
  o	
  arquivo	
  Dver	
  permissão	
  de	
  execução,	
  seus	
  comandos	
  serão	
  
executados	
  localmente,	
  inclusive	
  com	
  a	
  possibilidade	
  de	
  passagem	
  
de	
  argumentos.	
  Exemplo:	
  
source $filename $arg1 $arg2 
– exit:	
  encerra	
  a	
  execução	
  do	
  script;	
  
– exec:	
  subsDtui	
  o	
  processo	
  corrente	
  pelo	
  programa	
  ou	
  
comando	
  passado	
  como	
  parâmetro.	
  
6	
  
Comandos	
  internos	
  
•  Exemplo	
  source:	
  
– o	
  script	
  abaixo	
  executa	
  os	
  comandos	
  que	
  esDverem	
  no	
  
arquivo	
  “comandos.txt”	
  e	
  em	
  seguida	
  imprime	
  na	
  tela	
  a	
  
palavra	
  “fim”:	
  
source ./comandos.txt 
echo "fim" 
Ou,	
  de	
  forma	
  equivalente,	
  
. ./comandos.txt 
echo "fim" 
7	
  
Comandos	
  internos	
  
•  Exemplo	
  exec:	
  
– o	
  script	
  abaixo	
  imprime	
  uma	
  mensagem	
  na	
  tela	
  usando	
  o	
  
comando	
  exec	
  e	
  em	
  seguida	
  termina:	
  
# Script para ilustação do exec 
exec echo "Saindo de \"$0\" na linha $LINENO." 
# A linha abaixo nunca será executada. 
echo "Esta mensagem nunca será exibida." 
exit 99 
# Verifique seu status de saída: 
#echo $? 
8	
  
Comandos	
  internos	
  
•  Exemplo	
  exec:	
  
– o	
  script	
  abaixo	
  imprime	
  mensagens	
  na	
  tela,	
  espera	
  1s	
  e	
  
depois	
  executa	
  ele	
  próprio	
  novamente	
  usando	
  o	
  comando	
  
exec:	
  
echo "Esta linha aparece só uma vez." 
echo "O PID desta instância é $$." 
echo "========= Pressione Ctl-C ==========" 
sleep 1 
exec $0 
echo "Esta linha nunca deve aparecer!" 
9	
  
Comandos	
  internos	
  
•  Comandos	
  para	
  controle	
  de	
  jobs:	
  
– jobs 	
  lista	
  os	
  jobs	
  executando	
  em	
  segundo	
  plano	
  no	
  
shell,	
  fornecendo	
  o	
  número	
  do	
  job;	
  
– ps 	
  lista	
  os	
  processos	
  em	
  execução;	
  
– $! retorna	
  o	
  número	
  do	
  processo	
  que	
  acaba	
  de	
  ser	
  
criado	
  (usado	
  com	
  o	
  comando	
  kill	
  para	
  “matar”	
  o	
  
processo);	
  
10	
  
Comandos	
  internos	
  
•  Comandos	
  para	
  controle	
  de	
  jobs	
  (cont.):	
  
– wait 	
  aguarda	
  o	
  final	
  da	
  execução	
  dos	
  jobs	
  que	
  estão	
  em	
  
segundo	
  plano.	
  Se	
  passarmos	
  como	
  argumento	
  o	
  ID	
  de	
  um	
  
job,	
  aguarda	
  este	
  job	
  especificamente;	
  
•  Exemplos:	
  wait	
   (aguarda	
  todos	
  os	
  processos	
  em	
  BG)	
  
 wait 2134 (aguarda	
  o	
  processo	
  2134) 
– kill 	
  força	
  o	
  encerramento	
  de	
  um	
  processo	
  enviando	
  ao	
  
processo	
  um	
  código	
  de	
  encerramento.	
  
•  Exemplo:	
  	
  
sleep 1200 & 
idProcesso=$! 
kill $idProcesso (“mata”	
  o	
  processo	
  sleep) 
11	
  
Comandos	
  internos	
  
•  Exemplo:	
  
– o	
  script	
  abaixo	
  aguarda	
  pela	
  execução	
  de	
  um	
  comando	
  em	
  
background:	
  
echo -n "Aguarde uma coisa importante... " 
echo "Isto pode demorar alguns minutos." 
sleep 10 & 
echo -n -e "\nVeja: o script poderia continuar," 
echo "mas agora ele vai esperar..." 
wait 
# O restante só será executado ao final do sleep 
echo -e "\n-----\nfim.\n-----" 
12	
  
Comandos	
  internos	
  
•  Outros	
  comandos:	
  
– true:	
  sempre	
  retorna	
  um	
  código	
  de	
  saída	
  de	
  sucesso	
  (0);	
  
– false:	
  sempre	
  retorna	
  um	
  código	
  de	
  saída	
  sem	
  sucesso;	
  
– help:	
  fornece	
  uma	
  tela	
  de	
  ajuda	
  sobre	
  a	
  uDlização	
  de	
  
comandos	
  internos.	
  
13	
  
Comandos	
  internos	
  
•  Exemplo:	
  
– o	
  script	
  abaixo	
  imprime	
  na	
  tela	
  os	
  números	
  de	
  1	
  a	
  10:	
  
cont=1 
while true; do 
 echo $cont 
 ((cont++)) 
 if [ $cont -gt 10 ]; then 
 break 
 fi 
done 
14	
  
Exercícios	
  
1.  Escreva	
  um	
  script	
  chamado	
  entrada.sh	
  que:	
  
1.  Leia	
  o	
  nome	
  e	
  o	
  ano	
  de	
  nascimento	
  do	
  usuário;	
  
2.  Armazene	
  estas	
  informações	
  nas	
  variáveis	
  nome	
  e	
  data;	
  
2.  Escreva	
  um	
  script	
  denominado	
  saida.sh	
  que	
  uDlize	
  o	
  comando	
  
source	
  para	
  “importar”	
  o	
  script	
  entrada.sh	
  e	
  imprimir	
  na	
  tela	
  o	
  
nome	
  e	
  a	
  idade	
  do	
  usuário;	
  
3.  Reescreva	
  o	
  script	
  entrada.sh	
  do	
  exercício	
  anterior	
  de	
  forma	
  a:	
  	
  
1.  UDlizar	
  o	
  comando	
  export	
  para	
  tornar	
  global	
  os	
  valores	
  das	
  variáveis	
  nome	
  e	
  data;	
  
2.  Executa	
  o	
  script	
  saida.sh	
  para	
  usar	
  essas	
  variáveis	
  globais	
  e	
  imprimir	
  na	
  tela	
  o	
  
nome	
  e	
  a	
  idade	
  do	
  usuário.	
  	
  
4.  Reescreva	
  o	
  script	
  saida	
  removendo	
  o	
  comando	
  source.	
  Neste	
  caso,	
  
este	
  script	
  somente	
  funcionará	
  adequadamente	
  se	
  as	
  variáveisnome	
  e	
  
data	
  já	
  exisDrem	
  no	
  ambiente;	
  
15	
  
Exercícios	
  
5.  Escreva	
  um	
  script	
  que	
  uDlize	
  os	
  comandos	
  wait	
  e	
  kill.	
  
Pro	
  exemplo,	
  inicialize	
  um	
  processo	
  em	
  background	
  e	
  depois	
  
de	
  alguns	
  segundos	
  “mate”	
  esse	
  processo	
  (kill).	
  Depois,	
  
inicialize	
  outro	
  processo	
  em	
  background	
  e	
  espere	
  o	
  seu	
  
término	
  (wait);	
  
6.  UDlizando	
  o	
  comando	
  true,	
  escreva	
  um	
  script	
  que	
  repita	
  o	
  
processo	
  abaixo	
  até	
  que	
  o	
  usuário	
  digite	
  a	
  palavra	
  “quit”:	
  
a)  Leia	
  o	
  nome	
  de	
  um	
  arquivo	
  digitado	
  pelo	
  usuário;	
  
b)  Leia	
  um	
  caminho	
  digitado	
  pelo	
  usuário;	
  
c)  Copie	
  o	
  arquivo	
  solicitado	
  para	
  o	
  caminho	
  dado.	
  Se	
  o	
  arquivo	
  ou	
  o	
  
diretório	
  não	
  exisDr,	
  imprima	
  uma	
  mensagem	
  de	
  erro	
  e	
  conDnue	
  o	
  
processo.	
  
16

Outros materiais