文章

Shell脚本中输出多行内容的方法

Shell脚本中输出多行内容的方法

Shell 脚本中输出多行内容的方法

在 Shell 脚本中,将多行内容输出到文件的方法有多种,适用于不同场景(如直接写入固定内容、动态生成内容等)。以下是常用方式及示例:

一、使用 echo 命令(适合少量单行内容)

通过多个 echo 命令配合重定向符号 >>(追加)或 >(覆盖)输出多行内容:

1
2
3
4
5
6
7
\# 覆盖写入文件(文件不存在则创建)

echo "第一行内容" > output.txt

echo "第二行内容" >> output.txt  # 追加第二行

echo "第三行内容" >> output.txt  # 追加第三行

注意

  • > 会清空文件原有内容后写入。

  • >> 会在文件末尾追加内容(保留原有内容)。

二、使用 cat 命令配合 Here Document(适合多行固定内容)

这是最常用的方式,通过 cat << 分界符 语法批量写入多行内容,格式清晰:

1
2
3
4
5
6
7
8
9
10
11
12
13
\# 基本语法:分界符可自定义(如 EOF、END 等)

cat << EOF > output.txt

第一行内容

第二行内容

第三行内容

这是第四行,支持空格和特殊字符(如 \$、"、')

EOF

特点

  • 分界符(如 EOF)前后无空格,且结束的分界符必须单独占一行。

  • 若想保留变量(如 $USER)的原始字符(不解析变量),可将分界符用单引号包裹:

1
2
3
4
5
cat << 'EOF' > output.txt

当前用户:\$USER  # 不会解析为实际用户名,保留 "\$USER" 字符串

EOF

三、使用 printf 命令(适合格式化多行内容)

printf 支持换行符 \n,可通过一条命令输出多行,适合需要格式化的场景:

1
2
3
4
5
6
7
printf "第一行\n第二行\n第三行\n" > output.txt

\# 带格式示例(如缩进、变量)

name="Alice"

printf "姓名:%s\n年龄:%d\n职业:%s\n" "\$name" 30 "工程师" > info.txt

输出 **info.txt 内容**:

1
2
3
4
5
姓名:Alice

年龄:30

职业:工程师

四、动态生成内容并输出(结合循环 / 条件)

通过循环、条件判断等逻辑生成多行内容,再输出到文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
\# 示例:生成 1-5 的平方表

cat << EOF > squares.txt

数字 | 平方

\----|-----

EOF

for i in {1..5}; do

&#x20; echo "\$i   | \$((i\*i))" >> squares.txt

done

输出 **squares.txt 内容**:

1
2
3
4
5
6
7
8
9
10
11
12
13
数字 | 平方

\----|-----

1   | 1

2   | 4

3   | 9

4   | 16

5   | 25

五、追加到已有文件(保留原有内容)

所有方法均可通过 >> 替换 > 实现追加:

1
2
3
4
5
6
7
8
9
\# 向已有文件追加两行

cat << EOF >> output.txt

追加的第一行

追加的第二行

EOF

总结

方法适用场景优点
echo 多次少量单行内容简单直观
cat << EOF多行固定内容、含特殊字符格式清晰,支持变量解析
printf格式化内容、批量生成有规律的行支持格式化占位符
循环 + 重定向动态生成内容(如批量处理数据)灵活处理逻辑生成的内容

根据内容复杂度和是否需要动态生成,选择合适的方法即可。

(注:文档部分内容可能由 AI 生成)

本文由作者按照 CC BY 4.0 进行授权