我有一个bash脚本,它处理GUI输出的文件。我让它休眠一段时间,如果它找到文件,它就返回到循环中。但是,我希望脚本在休眠期后没有找到任何文件时退出,但如果文件是在休眠期生成的,则返回循环。但如果脚本没有找到文件,则会卡在循环中继续休眠。我的脚本看起来像这样:
#!/bin/bash
current_directory=$(pwd)
folder=1
while [ $folder -le 100 ]; do
fast5files=$(ls $current_directory/fast5/ | grep ".fast5" | wc -l)
if [ $fast5files -ge 1 ]
then
mkdir $current_directory/fast5/$folder
mv $current_directory/fast5/*.fast5 $current_directory/fast5/$folder/
program does something to fast5files here
another program does something to fast5files here
sleep $1 #variable set by user
((folder++))
elif [ $fast5files -eq 0 ]
then
echo "Couldn't find enough fast5 files. Waiting for 15 seconds"
sleep 15
elif [ $fast5files -eq 0 ]
then
echo "Exiting script due to not enough fast5 files"
exit 1
fi
done
3条答案
按热度按时间0tdrvxhp1#
设置
folder
并选中它,但从不修改它。如果它从来没有得到修改,循环将永远不会结束没有手动
break
或exit
或类似的东西。也许像这样-
这是快速和草率的,从一个函数内部设置一个全局,等等,但应该给予你一些想法。
gev0vcfq2#
你需要到添加这退出之后这sleep语句.你已经创建了一个新的elif分支将永远不匹配因为它是已经匹配早先
也就是说,我不知道为什么你仍然想睡觉,而不仅仅是退出,你也可以只更新循环语句,当fast5files为0时退出,即。
fyi当前脚本中没有任何内容更新folder参数,因此语句的一部分将始终为true
p8ekf7hl3#
你不需要在
mv
之前检查 *.fast5文件是否存在。只需要尝试mv
它们并检查mv
的退出状态。可能这就是你要找的: