Buscar

Aula12 Redirecionamento Strings

Prévia do material em texto

Programação	
  para	
  Servidores	
  
Aula	
  12	
  
Sumário	
  
•  Subs8tuição	
  de	
  comandos;	
  
•  Redirecionamento;	
  
•  Pipe;	
  
•  Manipulação	
  de	
  strings.	
  
2	
  
Subs8tuição	
  de	
  Comandos	
  
•  Permite	
  obter	
  a	
  saída	
  de	
  um	
  ou	
  mais	
  comandos;	
  
•  Esta	
  saída	
  pode	
  ser	
  u8lizada	
  para,	
  por	
  exemplo:	
  
– Usar	
  como	
  argumento	
  para	
  outro	
  comando;	
  
– Ser	
  atribuída	
  a	
  uma	
  variável;	
  	
  
– Gerar	
  uma	
  lista	
  de	
  argumentos	
  para	
  um	
  loop	
  for;	
  
•  A	
  forma	
  geral	
  é	
  executar	
  o(s)	
  comando(s)	
  entre	
  
crases	
  (`...`).	
  Por	
  exemplo:	
  
lista=`ls /etc` 
– Armazena	
  na	
  variável	
  lista	
  o	
  resultado	
  do	
  comando	
  ls,	
  
que	
  representa	
  a	
  lista	
  de	
  arquivos	
  do	
  diretório	
  “/etc”.	
  
3	
  
Subs8tuição	
  de	
  Comandos	
  
•  A	
  subs8tuição	
  de	
  comandos	
  gera	
  uma	
  lista	
  de	
  
elementos	
  com	
  qualquer	
  tamanho.	
  Por	
  exemplo:	
  
`echo a b` # 2 elementos: a e b 
"`echo a b`" # 1 elemento: "a b" 
`echo` # sem elementos 
"`echo`" # 1 elemento vazio 
•  U8lizando	
  a	
  subs8tuição	
  de	
  comandos	
  também	
  é	
  
possível	
  transferir	
  o	
  conteúdo	
  de	
  um	
  arquivo	
  para	
  
uma	
  variável:	
  
arq=`cat /etc/passwd` 
4	
  
Redirecionamento	
  
•  Para	
  todo	
  processo	
  existem	
  sempre	
  3	
  arquivos	
  
abertos	
  por	
  padrão:	
  
– stdin	
  	
   entrada	
  padrão	
  (teclado)	
  
– stdout	
  	
   saída	
  padrão	
  (monitor)	
  
– stderr	
  	
   saída	
  padrão	
  de	
  erros	
  (monitor)	
  
•  Todo	
  arquivo	
  aberto	
  pode	
  ser	
  redirecionado;	
  
•  Redirecionamento	
  significa	
  capturar	
  a	
  saída	
  de	
  um	
  
arquivo,	
  comando,	
  programa	
  ou	
  script	
  e	
  o	
  enviar	
  
como	
  entrada	
  para	
  outro	
  arquivo,	
  comando,	
  
programa	
  ou	
  script;	
  
5	
  
Redirecionamento	
  
•  Operadores	
  de	
  redirecionamento:	
  
>	
   redireciona	
  a	
  saída	
  padrão	
  (stdout)	
  para	
  um	
  arquivo.	
  Se	
  
o	
  arquivo	
  não	
  exis8r	
  ele	
  será	
  criado,	
  caso	
  contrário	
  será	
  
sobrescrito	
  e	
  seu	
  conteúdo	
  anterior	
  será	
  perdido;	
  
>>	
   também	
  redireciona	
  a	
  saída	
  padrão	
  (stdout)	
  para	
  um	
  
arquivo.	
  Se	
  o	
  arquivo	
  não	
  exis8r	
  ele	
  será	
  criado.	
  Porém,	
  caso	
  
o	
  arquivo	
  exista,	
  a	
  saída	
  do	
  comando	
  irá	
  ser	
  acrescentada	
  ao	
  
final	
  do	
  arquivo.	
  
<	
   redireciona	
  um	
  arquivo	
  para	
  a	
  entrada	
  padrão	
  (stdin);	
  
6	
  
Redirecionamento	
  
•  Exemplo:	
  
ARQ_LOG=script.log 
echo "1a linha enviada ao log" > $ARQ_LOG 
echo "2a linha enviada ao log" >> $ARQ_LOG 
echo "3a linha enviada ao log" >> $ARQ_LOG 
echo "4a linha enviada ao log" >> $ARQ_LOG 
echo "5a linha enviada ao log" >> $ARQ_LOG 
7	
  
Redirecionamento	
  
•  O	
  comando	
  a	
  seguir	
  u8liza	
  o	
  programa	
  sort	
  para	
  
ordenar	
  um	
  arquivo.	
  A	
  entrada	
  padrão	
  do	
  sort	
  
recebe	
  como	
  redirecionamento	
  o	
  arquivo	
  a	
  ser	
  
ordenado	
  (nomes.txt)	
  e	
  a	
  saída	
  padrão	
  é	
  
redirecionada	
  para	
  o	
  arquivo	
  que	
  conterá	
  as	
  linhas	
  
ordenadas	
  pelo	
  sort	
  (nomes_ordenados.txt):	
  
sort < nomes.txt > nomes_ordenados.txt 
8	
  
Redirecionamento	
  
•  Redirecionamento	
  da	
  entrada	
  do	
  comando	
  read:	
  
while IFS=" " read nome fone; do 
 echo "nome = $nome" 
 echo "fone = $fone" 
 echo "----------------" 
done < agenda.txt 
– Este	
  script	
  redireciona	
  a	
  entrada	
  do	
  comando	
  read	
  para	
  o	
  
arquivo	
  agenda.txt;	
  
– A	
  cada	
  passo,	
  faz-­‐se	
  a	
  leitura	
  das	
  variáveis	
  nome	
  e	
  fone,	
  
até	
  que	
  o	
  arquivo	
  chegue	
  ao	
  fim;	
  
–  IFS=" "	
  indica	
  que	
  o	
  separador	
  dos	
  campos	
  é	
  um	
  espaço.	
  
9	
  
Pipe	
  
•  O	
  pipe	
  (	
  |	
  )	
  é	
  um	
  mecanismo	
  especial	
  de	
  
redirecionamento	
  u8lizado	
  para	
  conectar	
  a	
  saída	
  padrão	
  
de	
  um	
  processo	
  à	
  entrada	
  padrão	
  de	
  outro	
  processo;	
  
•  O	
  processo	
  que	
  se	
  encontra	
  à	
  esquerda	
  do	
  pipe	
  tem	
  sua	
  
saída	
  padrão	
  redirecionada	
  automa8camente	
  para	
  a	
  
entrada	
  padrão	
  do	
  processo	
  que	
  se	
  encontra	
  à	
  direita	
  do	
  
pipe;	
  
•  Exemplo:	
  
cat *.txt | sort | uniq > resultado.txt 
–  Concatena	
  todos	
  os	
  arquivos	
  com	
  extensão	
  .txt	
  (cat *.txt),	
  
ordena	
  suas	
  linhas	
  (sort),	
  re8ra	
  as	
  duplicadas	
  (uniq)	
  e	
  salva	
  no	
  
arquivo	
  resultado.txt	
  (> resultado.txt);	
  
10	
  
Manipulação	
  de	
  Strings	
  
•  Obtenção	
  do	
  tamanho	
  de	
  uma	
  string:	
  
–  ${#string}:	
  retorna	
  o	
  número	
  de	
  caracteres	
  da	
  string;	
  
– Exemplo:	
  
str="Isto é apenas um teste" 
echo "A string str possui ${#str} caracteres." 
–  Imprime:	
  
A string str possui 22 caracteres. 
11	
  
Manipulação	
  de	
  Strings	
  
•  Extração	
  de	
  substring:	
  
–  ${string:pos:tam}:	
  extrai	
  de	
  string	
  uma	
  substring	
  de	
  
tamanho	
  tam	
  a	
  par8r	
  da	
  posição	
  pos.	
  Caso	
  tam	
  seja	
  
omi8do,	
  será	
  extraída	
  a	
  substring	
  que	
  se	
  inicia	
  em	
  pos	
  até	
  
o	
  final.	
  O	
  primeiro	
  caractere	
  está	
  na	
  posição	
  0.	
  Exemplo:	
  
str="Talita levou Maria para passear" 
echo "${str:13:5}" 
echo "${str:24}" 
– Exibirá:	
  
Maria 
passear 
12	
  
Manipulação	
  de	
  Strings	
  
•  Remoção	
  de	
  trecho	
  no	
  inicio	
  ou	
  no	
  fim	
  da	
  string:	
  
– No	
  inicio:	
  
•  ${string#substring}	
  remove	
  a	
  menor	
  porção	
  de	
  string	
  
que	
  combinar	
  com	
  o	
  padrão	
  de	
  substring;	
  
•  ${string##substring}	
  remove	
  a	
  maior	
  porção	
  de	
  string	
  
que	
  combinar	
  com	
  o	
  padrão	
  de	
  substring;	
  
– No	
  fim:	
  
•  ${string%substring}	
  remove	
  a	
  menor	
  porção	
  de	
  string	
  
que	
  combinar	
  com	
  o	
  padrão	
  de	
  substring;	
  
•  ${string%%substring}	
  remove	
  a	
  maior	
  porção	
  de	
  string	
  
que	
  combinar	
  com	
  o	
  padrão	
  de	
  substring;	
  
13	
  
Manipulação	
  de	
  Strings	
  
•  Exemplo	
  1:	
  
– Padrão	
  =	
  a*C,	
  ou	
  seja,	
  qualquer	
  sequência	
  de	
  caracteres	
  
que	
  começa	
  com	
  a	
  e	
  termina	
  com	
  C;	
  
stringZ=abcABC123ABCabc 
 menor porção (do inicio) 
 maior porção (do inicio) 
echo "${stringZ#a*C}" # imprime: "123ABCabc" 
echo "${stringZ##a*C}" # imprime: "abc" 
14	
  
Manipulação	
  de	
  Strings	
  
•  Exemplo	
  2:	
  
– Padrão	
  =	
  b*c,	
  ou	
  seja,	
  qualquer	
  sequência	
  de	
  caracteres	
  
que	
  começa	
  com	
  b	
  e	
  termina	
  com	
  c;	
  
stringZ=abcABC123ABCabc 
 menor porção (do fim) 
 maior porção(do fim) 
echo "${stringZ%b*c}" # imprime: "abcABC123ABCa" 
echo "${stringZ%%b*c}" # imprime: "a" 
15	
  
Manipulação	
  de	
  Strings	
  
•  Troca	
  de	
  substring	
  
–  ${string/substring/substituta}:	
  troca	
  a	
  primeira	
  
ocorrência	
  de	
  substring	
  por	
  subs8tuta;	
  
•  Exemplo:	
  
str="Talita queria passear com Maria. Maria não 
aceitou." 
s2="João" 
echo ${str/$substr/$s2} 
–  Imprime:	
  "Talita queria passear com João. Maria 
não aceitou."	
  
16	
  
Manipulação	
  de	
  Strings	
  
•  Troca	
  de	
  substring	
  
–  ${string//substring/substituta}:	
  troca	
  todas	
  as	
  
ocorrências	
  de	
  substring	
  por	
  subs8tuta;	
  
•  Exemplo:	
  
str="Talita queria passear com Maria. Maria não 
aceitou." 
s2="João" 
echo ${str//$substr/$s2} 
–  Imprime:	
  "Talita queria passear com João. João 
não aceitou."	
  
17	
  
Exercícios	
  
•  Fazer	
  scripts	
  que:	
  
1.  Receba	
  uma	
  data	
  no	
  formato	
  DD/MM/AAAA	
  e	
  forneça	
  
separadamente	
  o	
  dia,	
  o	
  mês	
  e	
  o	
  ano.	
  Se	
  o	
  argumento	
  passado	
  
não	
  possuir	
  10	
  caracteres,	
  exibir	
  uma	
  mensagem	
  de	
  erro;	
  
2.  Receba	
  como	
  parâmetro	
  uma	
  nome	
  e	
  imprima	
  uma	
  série	
  de	
  
linhas,	
  onde	
  na	
  primeira	
  linha	
  apareça	
  apenas	
  a	
  primeira	
  letra	
  
do	
  nome,	
  na	
  segunda	
  linha	
  as	
  duas	
  primeiras	
  letras,	
  e	
  assim	
  
por	
  diante.	
  Por	
  exemplo,	
  para	
  o	
  nome	
  “Rita”,	
  imprimir:	
  
R	
  
Ri	
  
Rit	
  
Rita	
  
18	
  
Exercícios	
  
•  Fazer	
  scripts	
  que:	
  
3.  Receba	
  como	
  parâmetro	
  2	
  strings	
  e	
  retorne	
  em	
  que	
  
posição	
  a	
  segunda	
  string	
  aparece	
  dentro	
  da	
  primeira	
  
string.	
  O	
  primeiro	
  caractere	
  deverá	
  ser	
  contado	
  como	
  0	
  e	
  
o	
  valor	
  -­‐1	
  deverá	
  ser	
  retornado	
  caso	
  a	
  segunda	
  string	
  não	
  
apareça	
  dentro	
  da	
  primeira.	
  Exemplos:	
  
./t.sh abcxpto pto - imprime 4 
./t.sh abcxpto axp - imprime -1 
./t.sh abcxpto ab - imprime 0 
./t.sh abcxpto abcxpto - imprime 0 
./t.sh abcxpto bcxpt - imprime 1 
19	
  
Leitura	
  adicional	
  
•  Capítulos	
  5	
  e	
  7	
  do	
  livro:	
  
“Classic	
  Shell	
  Scrip8ng”	
  
•  Item	
  10.1	
  do	
  livro:	
  
“Advanced	
  Bash-­‐Scrip8ng	
  Guide”	
  
20	
  
Próxima	
  aula...	
  
•  Revisão	
  para	
  AV1;	
  
21

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

33 pág.

Perguntas Recentes