Bash脚本中diff命令的条件判断实现与逻辑控制
Bash脚本优化:按需处理文件差异
先给你整理好的优化后脚本,核心是合并diff命令并通过退出码做条件判断,避免冗余执行:
# Do the match between the text files echo " " echo "match with diff: " echo " " # 用-sq参数合并原有的两个diff命令,一次执行完成提示输出 diff -sq FromRucio_$NAME.txt FromFolder_$NAME.txt # 判断diff的退出码:1表示文件存在差异,此时执行后续操作 if [ $? -eq 1 ]; then echo "" echo "this is the missing files between the files" echo "sample: $NAME" >> totalresult_test.txt sort FromRucio_$NAME.txt FromFolder_$NAME.txt | uniq -u >> totalresult_test.txt fi echo "_____________________________________________________________________________________" echo " "
关键说明:
- 合并diff命令:
diff -sq组合了-s(文件相同时提示“Files ... are identical”)和-q(文件不同时仅提示“Files ... differ”)的功能,一次执行就能覆盖你原来两个diff命令的输出需求,彻底消除冗余。 - 条件判断逻辑:diff命令的退出码规则是:
- 0:两个文件完全相同
- 1:两个文件存在差异
- 2:执行出错(比如文件不存在)
我们通过$?获取上一条命令的退出码,当退出码为1时,才执行sort和写入结果文件的操作,完全符合你“仅在diff -q有输出时执行后续步骤”的需求。
- 优化写入操作:把
echo "sample: $NAME \n"改成echo "sample: $NAME",因为bash里\n不会被echo直接解析,直接写内容更稳妥。
内容的提问来源于stack exchange,提问作者ryse
相关产品推荐
相关产品推荐

