通过Shell脚本创建,写入和保存文件


10

我不想手动编写文件,所以我做了一个shell脚本。有没有一种方法可以自动编写和保存文件而无需让用户按下键?

sudo nano blah
#write stuff to file
#save file
#continue

^这将在* .sh文件中

还是有另一种在脚本中创建简单文本文件的方法?


1
我怀疑您在这里问错了问题。与尝试控制诸如nano之类的编辑器相比,有许多简单的方法可以以编程方式写入文件。告诉我们您要对该文件做什么。
沃伦·希尔

我只想创建它并写很多行。
Zarkopafilis 2014年

您是否在要求诸如Autoit for Windows之类的解决方案,例如可以使GUI程序自动化的解决方案,或者例如如何通过Shell脚本编写文本$echo "Some text" > afile.txt
Stef K

@Zarkopafilis-我已编辑您的问题,以使您的意思更清楚。如果我误解了您,您可以随时回滚。我也为您发布了答案。
沃伦·希尔

Answers:


14

对于更复杂的命令序列,应考虑将cat命令与here文档一起使用。基本格式是

command > file << END_TEXT
some text here
more text here
END_TEXT

取决于END_TEXT标签是带引号还是不带引号,有两种细微不同的行为:

  1. 未加引号的标签:内容是在通常的shell扩展之后编写的

  2. 带引号的标签:此处文档的内容按字面意义处理,无需常规的shell扩展

例如考虑以下脚本

#!/bin/bash

var1="VALUE 1"
var2="VALUE 2"

cat > file1 << EOF1
do some commands on "$var1" 
and/or "$var2"
EOF1

cat > file2 << "EOF2"
do some commands on "$var1" 
and/or "$var2"
EOF2

结果是

$ cat file1
do some commands on "VALUE 1" 
and/or "VALUE 2"

$ cat file2
do some commands on "$var1" 
and/or "$var2"

如果要从脚本输出shell命令,则可能需要带引号的形式。


请问我搜索这个^^问题有多长时间:这仅在脚本中起作用吗,或者是否也可以直接在外壳中使用它?
derHugo

@derHugo,您可以在外壳中直接使用它-在这种情况下,省略END_TEXT和更简单地使用CTRL-D来表示输入结束。参见例如如何用信号通知标准输入的结束
steeldriver '17

7

无需为此而烦恼编辑器。

您可以使用简单的echo命令将某些内容附加到文件中。例如

echo "Hello World" >> txt

将“ Hello world”附加到文件中txt。如果文件不存在,将创建它。

或者,如果文件可能已经存在并且您想要覆盖它

echo "Hello World" > txt

对于第一行:和

echo "I'm feeling good" >> txt
echo "how are you" >> txt 

对于后续行。

最简单的说,.sh脚本可以只包含一组echo命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.