终止bash脚本文件中具有多个条件的while循环



我尝试了一切,但由于以下条件,我仍然无法停止while循环:

#!/bin/sh
clear
counter=1
breakCond=$(tail -n 1 /home/a/Desktop/Triple_Graphs/11_nodes/Res/Com_Output.txt|sed -r 's/^([^.]+).*$/1/; s/^[^0-9]*([0-9]+).*$/1/')

cd /home/a/Desktop/cliquer-1.21
rm /home/a/Desktop/Triple_Graphs/11_nodes/Res/Com_Output.txt
clear
Mu=$(head -1 /home/a/Desktop/Triple_Graphs/11_nodes/Mu.txt)
while [[ $counter -le 97 && $breakCond -ne $Mu ]]
do
#echo $counter| tee -a outErr.txt
./cl -u /home/a/Desktop/Triple_Graphs/11_nodes/G_$counter.txt &> /home/a/Desktop/Triple_Graphs/11_nodes/Res/calculated_$counter.txt
#echo -e "calculated_$counter.txt n"
output=$(tail -1 /home/a/Desktop/Triple_Graphs/11_nodes/Res/calculated_$counter.txt)
echo $output>>/home/a/Desktop/Triple_Graphs/11_nodes/Res/Com_Output.txt
((counter++))
breakCond=$(tail -n 1 /home/a/Desktop/Triple_Graphs/11_nodes/Res/Com_Output.txt|sed -r 's/^([^.]+).*$/1/; s/^[^0-9]*([0-9]+).*$/1/')
done

while循环中的第二个条件不起作用。我正在从txt文件中读取两个值("breakCond"one_answers"Mu"(,并试图对它们进行比较。

如果您想使用Bash功能,您需要确保脚本由Bash执行。Bash的精确位置可能会有所不同,因此我将在此处使用env进行移植;但是,您可能想要对例如#!/bin/bash进行硬编码以避免这种间接性。

Bash具有用于循环指定次数的内置功能。

作为一种通用设计,我会删除硬编码的绝对路径,并可能允许用户覆盖内置的默认路径。我还取出了明显完全多余的cd和用户敌对的clear。目前的重新设计只是假设你在/home/a/Desktop/Triple_Graphs/11_nodes中运行,这样你就可以在不同的目录中运行它,并用样本数据来测试它

#!/usr/bin/env bash
break_maybe () {
# sed $!d replaces tail -n 1
sed -r '$!d;s/^([^.]+).*$/1/; s/^[^0-9]*([0-9]+).*$/1/' "$1"
}
rm -f Res/Com_Output.txt
Mu=$(head -1 Mu.txt)
# {1..97} is Bash-specific
for counter in {1..97}; do
if [[ $(break_maybe Res/Com_Output.txt) == "$Mu" ]]; then
break
fi
/home/a/Desktop/cliquer-1.21/cl -u "G_$counter.txt" > "Res/calculated_$counter.txt" 2>&1
tail -n 1 "Res/calculated_$counter.txt"
done >>Res/Com_Output.txt

我显然没有办法对此进行测试,但它至少应该提出一些重构方法。

相关内容

  • 没有找到相关文章