[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Agenda em Shell
From: |
Flavio Junior |
Subject: |
Re: [shell-script] Agenda em Shell |
Date: |
Sat, 16 Jun 2007 12:18:00 -0300 |
O problema é que o for reconhece campos pelo delimitador "IFS" (Internal
Field Separator) e, " " (espaço) faz parte desse delimitador natural.
Voce pode alterar o delimitador IFS para um <ENTER> e resovler seu problema,
tente:
#! /bin/bash
read -p "Nome a ser excluido: " NOME
#cp nomes.dat nomes.tmp # comentada, nao tem necessidade
IDNOME=`grep "$NOME" nomes.dat | cut -f2-` # alterado, nome do arquivo e
"2-"
echo "$IDNOME" # talvez aqui precise usar ${IDNOME[@]} - nao testei
# Adicionada a linha IFS='<ENTER>'
IFS='
'
for I in $IDNOME
do
read -p "Deseja excluir $I [s/N]? " resposta
if [ $resposta = 's' -o $resposta = 'S' ]
then
sed -i "/$I/d" nomes.dat # alterado, o "-i" faz com que o sed execute
diretamente no arquvio, nao precisa tmp
fi
done
# rm nomes.tmp # desnecessario
Nao testei, mas deve funcionar.
Flavio do Carmo Junior
PS: Eu gostoa mais do WHILE pra tratar o IFS, fica mais bunito, exemplo:
while IFS=$'\n' read -r NOME; do read -p "Deseja excluir $NOME [s/N]: "
resposta; if [[ $resposta == [sS] ]]; then sed -i '/$NOME/d' nomes.dat; fi;
done < nomes.dat
On 6/16/07, roneison.machado <address@hidden> wrote:
>
> Fala Galera do Shell, beleza?
> Eu estou fazendo um trabalho de uma agenda telefonica em shell na
> faculdade.
> É o seguinte, eu possuo dois arquivos, um nomes.dat e um telefones.dat
> O primeiro tem o seguinte formato:
>
> #idnome nome
> 100 Suzana Alves
> 101 Maria Alguma Coisa
> .
> .
> 110 Suzana Vieira
>
> E o telefones.dat é do seguinte formato:
>
> #idtel idnome telefone
> 1000 100 1111-1111
> 1001 101 2222-2222
> .
> .
> 1010 110 1010-1010
>
> A minha duvida é que quando eu mando excluir, por exemplo, Suzana, ao
> invés dele perguntar se quer excluir Suzana Alves e depois Suzana
> Vieira, ele pergunta se eu quero remover Suzana, depois Alves, depois
> Suzana de novo e depois Vieira.
> Alguém poderia me dar uma ajuda com isso? Eu estou começando agora com
> shell aí já sabem né.
>
> Desde já agradeço.
>
> Aí está o script:
>
> #! /bin/bash
>
> read -p "Nome a ser excluido: " NOME
> cp nomes.dat nomes.tmp
>
> IDNOME=`grep "$NOME" nomes.tmp | cut -f2`
>
> echo "$IDNOME"
>
> for I in $IDNOME
> do
> read -p "Deseja excluir $I [s/N]? " resposta
> if [ $resposta = 's' -o $resposta = 'S' ]
> then
> sed "/$I/d" nomes.tmp > nomes.dat
> fi
> done
> rm nomes.tmp
>
>
>
[As partes desta mensagem que não continham texto foram removidas]