我有一个程序,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)
您可以在 Bash、Zsh 或 Ksh93 中使用简单的 for 循环。以下仅适用于 Bash 版本 4 (2009)、zsh 4.3.10 (2010) 和 ksh93r (2006)(尽管{x..y}
语法起源于zsh
(2.6-beta4
1995 年))。
#!/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
变量)。
问题被标记为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)