shell-script-pt
[Top][All Lists]
Advanced

[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]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]