执行带有各种参数的程序(循环)

Bil*_*ean 4 bash shell-script

我有一个程序,prog当我从终端调用它时,它接受一个整数参数,例如:

./prog 10
Run Code Online (Sandbox Code Playgroud)

我想prog使用一系列值执行,例如10, 20, 30, .... 除了使用:

./prog 10 ; ./prog 20 ; ./prog 30 ; ....
Run Code Online (Sandbox Code Playgroud)

Rap*_*ens 6

您可以在 Bash、Zsh 或 Ksh93 中使用简单的 for 循环。以下仅适用于 Bash 版本 4 (2009)、zsh 4.3.10 (2010) 和 ksh93r (2006)(尽管{x..y}语法起源于zsh2.6-beta41995 年))。

#!/bin/bash
# since Bash v4
for i in {10..100..10}
do
     $path_of_prog/prog $i
done
Run Code Online (Sandbox Code Playgroud)

{$start..$end..$step}部分表示$i在开始时等于$start并且$i将转到$end。的$step是与该量$i将每一步增加。所以我们得到的值10 20 30 ... 100进行$i

您也可以将其全部写在一行中

for i in {10..100..10}; do ./prog $i; done
Run Code Online (Sandbox Code Playgroud)

如果您有较旧的 Bash 并且 GNUseq可用,请使用以下几行

#!/bin/bash
#only for pre Bash v4
for i in $(seq 10 10 100)
do
   $path_of_prog/prog $i
done
Run Code Online (Sandbox Code Playgroud)

或作为单衬

for i in $(seq 10 10 100);do ./prog $i; done
Run Code Online (Sandbox Code Playgroud)

(以上假设您没有修改$IFS变量)。


Sté*_*las 6

问题被标记为bash,这只是为了其他 shell 的用户的利益。

在 POSIX sh 脚本中(为了可移植性):

i=10
while [ "$i" -le 100 ]; do
  ./prog "$i"
  i=$(($i+10))
done
Run Code Online (Sandbox Code Playgroud)

在 Bourne sh 脚本中(为了与 90 年代之前的系统兼容):

echo '0[10+pd100>x]dsxx' | dc | xargs -n 1 ./prog
Run Code Online (Sandbox Code Playgroud)

zsh(对于不受限制使用的人bash):

i=0; repeat 10 ./prog $((i+=10))
Run Code Online (Sandbox Code Playgroud)

或者

for i ({1..10}0) ./prog $i
Run Code Online (Sandbox Code Playgroud)

或者:

for ((i=10;i<=100;i+=10)) ./prog $i
Run Code Online (Sandbox Code Playgroud)

或者:

zargs -n1 {1..10}0 -- ./prog
Run Code Online (Sandbox Code Playgroud)