我想编写一个bash脚本,它不断地运行一个程序,每次将前四位数递增一次,直到程序的输出从一件事变为另一件。
例如:
./ exampleProgram userName 0000-4567-4561-4564
输出:错误
./ exampleProgram userName 0001-4567-4561-4564
输出:错误
./ exampleProgram userName 0002-4567-4561-4564
输出:正确
-Loop终止
最后三组四位数将保持不变,只有前四位数会发生变化,因此最糟糕的情况是大约10,000次循环。
答案 0 :(得分:1)
只需遍历整数,并使用printf
之类的东西来生成格式正确的参数。例如
for ((i=0; i < 10000; i++)); do
printf -v sn '%04d-4567-4561-4564' "$i"
./exampleProgram userName "$sn"
done
答案 1 :(得分:0)
例如:
exampleProgram() { #demo
echo "Debug: $1 $2" >&2
(($RANDOM % 10)) && { echo "Wrong"; return 1; } || { echo "Correct for $1 $2" ; return 0; }
}
for i in {0000..9999}
do
res=$(exampleProgram JohnDoe "$i-4567-4561-4564")
[[ "$res" =~ Correct ]] && break;
done
echo "Loop terminated at ($i) - result $res"
打印
Debug: JohnDoe 0000-4567-4561-4564
Debug: JohnDoe 0001-4567-4561-4564
Debug: JohnDoe 0002-4567-4561-4564
Debug: JohnDoe 0003-4567-4561-4564
Loop terminated at (0003) - result Correct for JohnDoe 0003-4567-4561-4564
如果exampleProgram
有不同的exit status
,最好检查它而不是返回的字符串,例如:
res=$(exampleProgram JohnDoe "$i-4567-4561-4564")
(( $? )) || break;