如果一个文件在linux,在Linux中如果文件不存在则创建一个文件并在此文件中写入0,否则什么都不做...

Bash中,我想检查文件是否存在,如果存在,则不执行任何操作.如果没有,请创建一个新文件并在此新文件中写入“0”.

我写了下面的代码,问题是:这段代码会覆盖现有的文件.谁能告诉我哪里出错了?我该如何修改它?

for r in FE C CR MN SI NI CO MO W NB AL P CU TA V B N O S

do

if [ ! -f id1/data/T1_FCC_X_${r}.dat ]; then

echo "0" > data/T1_FCC_X_${r}.dat

fi

done

您可以使用

noclobber选项一次性完成:

Prevent output redirection using >, >&, and <> from overwriting existing files.

从Redirecting Output section开始:

If the redirection operator is >, and the noclobber option to the set builtin has been enabled, the redirection will fail if the file whose name results from the expansion of word exists and is a regular file.

所以这应该做:

set -o noclobber # or, equivalently, set -C

for r in FE C CR MN SI NI CO MO W NB AL P CU TA V B N O S; do

echo "0" > "data/T1_FCC_X_$r.dat"

done 2> /dev/null

如果该文件存在,则重定向失败,并在标准错误上显示错误消息(并且文件根本不会被覆盖);这就是为什么我们将错误消息重定向到/ dev / null(在循环之后),以便不污染标准错误流.

如果该文件不存在,则将执行重定向,前提是您具有创建此类文件的所有权限.

注意.您可能希望在此之后取消设置noclobber:set o noclobber(或包含子shell中的所有内容).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值