我有一个包含内容的文件files.txt:
F1.txt
F2.txt
F3.txt
F4.txt
我需要逐行读取文件files.txt,并检查它是否存在于当前目录中,如果存在,我需要在每行files.txt的末尾附加日期,以便输出应该是
F1.txt16032017
F2.txt16032017
F3.txt16032017
F4.txt16032017
我使用了以下简单的shell脚本。
#!/bin/bash
DT=`date +%d%m%Y`
while IFS=read -r line
do
if [ -f $line]
then
echo "$line$DT" > files.ok
else
echo "$line" > files.notok
fi
done < files.txt
它执行时没有任何错误,但不提供带有日期追加的预期输出。有人可以告诉我文件存在测试是否正确
答案 0 :(得分:2)
问题在于您的文件写入操作符>
在每个成功案例中创建创建新文件,您需要使用{em} {em}创建 >将附加到现有文件。
更简洁的代码方法是
>>
我为改进脚本所做的更新,
#!/bin/bash
dateToday="$(date +%d%m%Y)"
while IFS= read -r file; do
[ -f "$file" ] && printf "%s\n" "$file$dateToday" >> files.OK || printf "%s\n" "$file" >> files.NOK
done < files.txt
来运行它们。$(..)
到>
>>
运算符的返回码。如果条件test ([])
成功则运行&&
之后的命令,如果条件失败则运行[ -f "$file" ]
之后的命令。