【问题标题】:Creating files with some content with shell script使用 shell 脚本创建包含一些内容的文件
【发布时间】:2011-02-02 19:40:18
【问题描述】:

我需要用一些文件配置一个服务器,我想以编程方式完成。

我需要创建文件说/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


    【解决方案1】:

    您可以使用here document

    cat <<EOF >/home/a.config
    first line
    second line
    third line
    EOF
    

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

    在 OS-X 上,命令应该是:

    cat > filename <<- "EOF"
    file contents
    more contents
    EOF
    

    【讨论】:

    • 请注意,$ 如果要包含在实际文本中,则必须对其进行转义。
    • @Nagev:如果您不想在此处的文档中进行任何参数扩展、命令替换和算术扩展,您可以引用开始分隔符 'EOF' 而不必转义每个单独的美元符号。
    • 如果我想在我的文本中使用参数值?
    • 如何访问外部变量?
    【解决方案2】:
    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】:

    像这样:

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

    有关详细信息,请参阅abs 的输入/输出部分。
    希望,这会有所帮助。

    【讨论】:

      【解决方案4】:

      如果您的文本中有 $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 参数替换在 Here Documents 中关闭

      【讨论】:

      • 完美!这正是我想要的
      【解决方案5】:
      >\#!/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

      【讨论】: