shell 如何把多行内容输出到一个文件

想编写一个a.sh,负责将下面内容输出到/tmp/b ,除了一行一行echo重定向,有什么一次性的方法?

#! /bin/bash
#
# start/stop
#
# description: Use this to start or stop
#
#
start()
{
echo "start"
}
stop()
{
echo "stop"
}
case "$1" in
start)
start
alert "start"
;;
stop)
stop
"stop"
;;
*)
echo $"Usage: $0 {start|stop}"
esac
exit 0

有如下几种方法:
1)一行行地echo重定向
2)echo -e + 多行,重定向
3)用Here Document方式(具体参见:http://linux.die.net/abs-guide/here-docs.html
(
cat <<EOF
#! /bin/bash

# ......
所有内容
EOF
) >/tmp/b
4)先用文本编辑器vi或vim写入另一个文件 tmpfile,直接在a.sh里读文件重定向 cat tmpfile >/tmp/b
5)弃用a.sh,直接用vi或vim写入/tmp/b

我估计你想要第三种?
注意后面一个EOF要顶格写追问

必须在知执行a.sh的前提下,采用2) 和 3) 能否举个例子?

追答

推荐你用第三种:

#!/bin/sh
(
cat <<EOF
start()
{
    echo "start"
}
EOF
) >/tmp/b

  

方法二太麻烦,遇到双引号还要转义:

#!/bin/sh
echo -e "start()\n{\n  echo \"start\"\n}" >/tmp/b

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-31

一般日志这种都应该是一行的,你把终端屏幕缩小,并且全屏,然后在看一下。

读取文件的每一行内容并输出
写法一:

#!/bin/bash

while read line
do
echo $line
done < file(待读取的文件)

写法二:

#!/binbash

cat file(待读取的文件) | while read line

do
echo $line
done

写法三:

for line in `cat file(待读取的文件)`
do
echo $line
done

本回答被网友采纳
相似回答