循环命令行参数的Bash脚本

时间:2017-04-01 15:06:11

标签: bash shell command-line

我想编写一个bash脚本,它不断地运行一个程序,每次将前四位数递增一次,直到程序的输出从一件事变为另一件。

例如:

./ exampleProgram userName 0000-4567-4561-4564

输出:错误

./ exampleProgram userName 0001-4567-4561-4564

输出:错误

./ exampleProgram userName 0002-4567-4561-4564

输出:正确

-Loop终止

最后三组四位数将保持不变,只有前四位数会发生变化,因此最糟糕的情况是大约10,000次循环。

2 个答案:

答案 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;