我一直在尝试创建一个 Bash shell 脚本,用于创建和更改名为 的文件list
。实际上,我使用该程序的目的是将名称附加到列表中,并创建带有标题的文件(如果需要)。
但是,脚本目前在某一点失败:每当我再次运行脚本时,旧名称就会消失,并被刚刚输入的名称替换。我该如何解决这个问题?
我的脚本:
#!/bin/bash
#Please sign your name here.
echo "Hi, what's your name?"
read name
echo "Hi $name, welcome to the Linux course!"
echo Course Attendees > list
echo $name >> list
问题示例:
$ bash list.sh
Hi, what's your name?
Test
Hi Test, welcome to the Linux course!
$ cat list
Course Attendees
Test
$ bash list.sh
Hi, what's your name?
Test2
Hi Test, welcome to the Linux course!
$ cat list
Course Attendees
Test2
答案1
在 Bash 中,有两种写入文件的方法(从技术上讲,还有很多方法,但就这个答案的所有意图和目的而言,只有两种):
首先是运算符>
,正如您在这一行中使用的:
echo Course Attendees > list
运营>
商将覆写将文件中现有的任何内容替换为文件的新内容。实际上,它会删除该文件,并创建一个同名的新文件。
其次是>>
运算符,正如这里所用的:
echo $name >> list
这会附加行添加到现有文件,如果不存在则创建一个新文件。
运行脚本时,您总是用“课程参加者”标题覆盖课程列表,从而导致此错误。修改程序,仅在存在“课程参加者”标题时才附加行。我个人的建议是检查文件是否存在。如果存在,则仅使用附加操作。否则,给它标题并创建它。
echo Course Attendees > list
或者,更优雅地,只有当文件不存在时才运行。参见这个答案了解更多信息如何进行这样的检查。