You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Shell脚本读取文件并写入另一文件(含空文件处理)

问题解决

原脚本的核心问题是:当file1.txt为空时,$(cat file1.txt)没有输出内容,for循环直接跳过所有分支逻辑,因此无法触发写入"Passed"的操作。

解决方案1:读取完整内容到变量后判断

#!/bin/bash

# 读取file1.txt的全部内容(含换行符)到变量
content=$(cat file1.txt)

# 判断变量是否非空
if [ -n "$content" ]; then
    echo "$content" > file2.txt
else
    echo "Passed" > file2.txt
fi

说明

  • 用$(cat file1.txt)将文件内容完整读入变量content,保留原格式(包括多行内容)
  • [ -n "$content" ]检查变量是否包含非空内容:
    • 若file1.txt有有效内容,直接将变量内容写入file2.txt
    • 若file1.txt为空,变量content为空,则写入"Passed"

解决方案2:直接检查文件是否为空(按文件大小判断)

如果你的场景中,file1.txt的"空"指文件大小为0(不含任何字符,包括空白行),可以用文件属性判断,效率更高:

#!/bin/bash

if [ -s file1.txt ]; then
    # 文件非空,直接复制内容
    cat file1.txt > file2.txt
else
    # 文件为空,写入Passed
    echo "Passed" > file2.txt
fi

说明

  • -s选项用于判断文件是否存在且大小大于0
  • 这种方式无需读取文件内容,适合大文件场景,但如果文件只有空白行(大小不为0但无有效内容),会被判定为非空

验证效果

  • 当file1.txt内容为258.2222时,file2.txt会得到完全相同的内容
  • 当file1.txt为空时,file2.txt会写入Passed

内容的提问来源于stack exchange,提问作者Zero5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 04:40:23