【问题标题】:Printing out wrong output in bash在 bash 中打印出错误的输出
【发布时间】:2013-08-09 17:32:01
【问题描述】:

您好,我正在编写一个程序,要求用户输入目录、联系人姓名和电话号码。

程序所做的是创建一个类似<contactname>.contact 的.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

【问题讨论】:

  • 您还可以在post中找到一些其他方法来完成这项工作的提示

标签: bash


【解决方案1】:

你不断追加到修改后的名称。请改用原来的名称。

那个条件……

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

【讨论】:

    【解决方案2】:

    可能你需要保存原名:

    尝试更改该部分:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多