使用参数组合启动脚本

时间:2016-01-29 17:32:57

标签: bash permutation

我正在运行一些测试,我需要使用一些输入的组合来运行一个特殊的shell脚本。

假设我有脚本test.sh,它带有3个参数:A,B,C。

A可以是1或2,B可以是" aa"或" bb"和C可以是7或8

我想自动启动所有可能的组合,所以

./test 1 "aa" 7
./test 1 "aa" 8
./test 1 "bb" 7
./test 1 "bb" 8
./test 2 "aa" 7
./test 2 "aa" 8
./test 2 "bb" 7
./test 2 "bb" 8

有些东西已经准备好并经过测试了吗?

编辑:排列 - >组合

2 个答案:

答案 0 :(得分:3)

使用shell支撑扩展有点丑陋(ab)允许:

$ for i in {1,2}\ {aa,bb}\ {7,8}; do
    echo {$i}
done
{1 aa 7}
{1 aa 8}
{1 bb 7}
{1 bb 8}
{2 aa 7}
{2 aa 8}
{2 bb 7}
{2 bb 8}

但这只适用于单个值包含空格或shell / glob元字符的情况。

如果它们可以包含其中任何一种,那么这是不安全的,应该避免。

答案 1 :(得分:2)

你可以使用3 for循环:

for x in 1 2; do
  for y in "aa" "bb"; do
    for z in 7 8; do
      ./test $x $y $z
    done
  done
done
  

试运行:

$ for x in 1 2; do
>   for y in "aa" "bb"; do
>     for z in 7 8; do
>       echo $x $y $z
> done;done;done
1 aa 7
1 aa 8
1 bb 7
1 bb 8
2 aa 7
2 aa 8
2 bb 7
2 bb 8

现在可能有一种方法可以在一个for循环中压缩它们,如果这是你的愿望,你可能想等待另一个答案。