使用shell脚本创建包含某些内容的文件

问题描述 投票:0回答:6

我需要使用一些文件配置服务器,并且我想以编程方式执行此操作。

我需要创建文件说

/home/a.config, /var/spool/b.config, /etc/c.config

上面的文件有一些内容(多行)。

我想创建一个 shell 脚本,它可以创建具有多行(大约 10 行)的所有三个文件。 我想知道如何使用

CAT
命令来做到这一点。 (shell 脚本内部)。

我正在寻找类似这样的东西

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

cat "HOW CAN I HAVE MULTIPLE LINES HERE?? " >  /home/a.config 

谢谢

shell unix scripting
6个回答
142
投票

您可以使用此处文档

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

您可以将其中几个放在同一个脚本中。


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

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

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


11
投票

像这样:

#!/bin/bash

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

有关更多信息,请参阅abs的输入/输出部分。
希望这有帮助。


7
投票

如果文本中有像 $1 或 $HOMEDIR 这样的变量,那么这些变量通常会被评估并替换为实际值。如果你想防止它们被替换,那么你需要用单引号

'EOF'
、双引号
"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 参数替换已关闭

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

请注意,您还需要转义某些字符,以避免它们干扰您想要执行的操作,例如 $ ` 和 " 都会破坏这样的语句,除非前面有反斜杠,即 \` \$ 或 \"

因此,如果我们定义以下内容:

var=“100”

以下行为不会按预期运行:

echo“简单地说,
只是“借给”我 US$ $var" > a.config

但以下内容可以正常工作:

echo“简单地说,
只是“借给”我 US\$ $var" > a.config


0
投票

我会使用

tee
命令,如下所示:

echo "My 
long
multiline
text
here!
" | sudo tee -a /etc/config.conf
© www.soinside.com 2019 - 2024. All rights reserved.