使用Shell脚本创建带有一些内容的文件

74

我需要通过编程的方式配置一个服务器,并创建一些文件。

我需要创建以下文件:/home/a.config、/var/spool/b.config、/etc/c.config

上述文件都有一些内容(多行)。

我想要创建一个脚本,可以创建这三个文件,并且每个文件都有大约10行内容。我想知道如何在shell脚本中使用CAT命令来实现。(内部)

我希望它看起来像这样:

echo " going to create  /home/a.config"

cat "HOW CAN I HAVE MULTIPLE LINES HERE?? " >  /home/a.config 
感谢。
5个回答

140

你可以使用一个here document

cat <<EOF >filename
first line
second line
third line
EOF

您可以在同一脚本中放置多个这样的内容。


请注意,如果要在实际文本中包含“$”,则必须对其进行转义。 - Nagev
1
@Nagev:如果您不想在此处文档中进行任何参数扩展、命令替换和算术扩展,您可以引用开始定界符 'EOF',而不必转义每个单独的美元符号。 - Dennis Williamson
如果我想在我的文本中使用参数值怎么办? - Júlio Falbo
如何访问外部变量? - Braian Coronel
@JúlioFalbo:如果您不引用here doc分界符(例如EOF),那么文本中的参数(变量)将被扩展。 - Dennis Williamson
@BraianCoronel:我不知道你所说的外部变量是什么意思。但请看我的前一条评论,看看它是否有帮助。 - Dennis Williamson

32
file="/tmp/test.txt"
echo "Adding first line" > $file
echo "Adding first line replaced" > $file
echo "Appending second line " >> $file
echo "Appending third line" >> $file
cat $file

>表示添加/替换内容(这里实际内容被第二行替换)
>>表示追加

结果
添加第一行 替换
追加第二行
追加第三行


3
我不明白为什么没有人给你点赞。你的回答也相当不错。感谢对我有帮助。 - sarmahdi
2
我认为你的回答非常准确... - MonneratRJ

11

就像这样:

#!/bin/bash

var="your text"
echo "simply put,
just so: $var" > a.config

如需更多信息,请参阅abs中的输入/输出部分。
希望对您有所帮助。


7
如果您在文本中有类似 $1 或 $HOMEDIR 的变量,通常会被计算并替换为实际值。如果您想防止这些被替换,您需要以单引号 'EOF'、双引号 "EOF" 或在其前面加上反斜杠 \EOF 来引用开放限制字符串(如下例)。关闭限制字符串保持不变。EOF。如果您正在将shell脚本写入文件,则特别有用。
cat << 'EOF' >/etc/rc.d/init.d/startup
case $1 in
    start)
        start 
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
       pid=$(tomcat_pid)
        if [ -n "$pid" ]
        then
           echo "Tomcat is running with pid: $pid"
        else
           echo "Tomcat is not running"
        fi
        ;;
esac

EOF

参考示例19.7,在Here Documents中关闭参数替换。


太完美了!这正是我在寻找的。 - zookastos

1
>\#!/bin/bash
>
>var="your text" <br>
>echo "simply put, <br>
>just so: $var" > a.config

请注意,您还需要转义某些字符以避免它们干扰您要做的事情,例如 $ ` 和 " 都会破坏这样的语句,除非在其前面加上反斜杠,即 \` \$ 或 \"。
因此,如果我们定义以下内容:
var="100"
以下内容将无法按预期工作:
echo "simply put, just "lend" me US$ $var" > a.config
但以下内容将正常工作:
echo "simply put, just \"lend\" me US\$ $var" > a.config

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接