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
  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 进行授权