2013-08-09 4 views
0

Привет Я пишу программу, которая просит пользователя ввести каталог, имя контакта и номер.Печать неправильного вывода в bash

Что делает программа, так это то, что она создает файл .contact, такой как <contactname>.contact, и добавляет в него номер контакта. Если файл уже существует в указанном каталоге, то программа создает новый файл с именем contact(1).contact, если существует, то contact(2).contact и т.д.

Когда contact(1).contact уже существует, я хочу, чтобы программа создания contact(2).contact, но программа создает contact(1)(2).contact вместо этого. Я не знаю, в чем проблема. Любая помощь будет оценена! :)

Код, который я написал до сих пор в bash.

#!/bin/bash 

directory= 
if(($# == 0)) 
then 
echo -n "Please enter directory path:" 
read directory 
cd $directory 


echo -n "Please enter contact name:" 
read name 

echo -n "Please enter contact number:" 
read number 

else 
directory=$1 
cd ${directory} 

name=$2 
number=$3 
fi 

if [ -e $name.contact ]; 

then 
exists=1 
count=1 

while [ $exists -eq 1 ]; 
do 
name=$name\($count\) 
count=$(($count+1)) 
if [ ! -f $name.contact ]; 
then 
exists=0 

fi 

done 

echo $number > $name.contact 
name=5 
else 

echo $number > $name.contact 

fi 
+0

Вы также можете найти некоторые подсказки для других w ays, чтобы сделать работу в этом [post] (http://stackoverflow.com/questions/17974355/unix-shell-script-for-increment-the-extension/17975651#17975651) – Bentoy13

ответ

4

Вы сохраняете добавление к измененному имени. Вместо этого используйте оригинальное имя.

И это состояние ...

origname="$name" 
while [ -f $name.contact ]; 
do 
    name="$origname($count)" 
    count=$(($count+1)) 
done 
+0

Большое вам спасибо :) Это сработало ! –

1

Возможно, вам нужно сохранить оригинальное название:

Попробуйте изменить эту часть:

while [ $exists -eq 1 ]; 
do 
name=$name\($count\) 
count=$(($count+1)) 
if [ ! -f $name.contact ]; 
then 
exists=0 
fi 

done 

к этому:

origname=$name 
while [ $exists -eq 1 ]; 
do 
name=$origname\($count\) 
count=$(($count+1)) 
if [ ! -f $name.contact ]; 
then 
exists=0 
fi 

done 
+0

Большое вам спасибо! Это сработало :) –

Смежные вопросы