Contents

Linux中重复命令n次

1. 简介

在使用 Linux 脚本时,重复命令是最常用的操作之一。

在这个快速教程中,我们将介绍如何使用不同的方法执行n次操作。

2. 使用for循环

让我们首先定义一个我们将在整个示例中使用的任务。为简单起见,我们将“命令”一词打印到控制台五次。我们还将尽可能包括一个迭代编号。

让我们直接跳进去,从古老的“for-loop”开始:

for i in {1..5}
do
  echo "Command no. $i"
done

上面的示例导致输出:

Command no. 1
Command no. 2
Command no. 3
Command no. 4
Command no. 5

我们还可以将这些操作浓缩为一个单行解决方案:

for i in {1..5}; do echo "Command no. $i"; done

对于我们需要基于条件的表达式的场景,我们也可以使用更编程风格的方法:

for ((i=0;i<5;i++)); do echo "Command no. $i"; done

3. 使用while循环

为了实现可重复的命令,我们还可以使用“while-loop”:

i=1
while [[ $i -le 5 ]]; do
  echo "Command no. $i"
  let ++i;
done

和前面的例子一样,我们可以在一行中实现这个循环:

i=1; while [[ $i -le 5 ]]; do echo "Command no. $i"; let ++i; done

4. 使用seqxargs

现在让我们使用一种不那么直接的方法,这种方法被证明是非常有效的。

根据 Linux 文档,** seq打印数字序列,* xargs*构造一个参数列表并对每个参数执行指定的命令**。

考虑到这一点,我们可以通过管道将这两个操作创建一个可重复的命令:

seq 5 | xargs -I{} echo "Command no. {}"

在上面的示例中,我们使用了带有占位符字符串“{}”的*-I*标志。然后将已定义命令中的占位符替换为序列号,从而产生与我们在上面看到的相同的输出。

5. Bash 函数

到目前为止描述的每个解决方案都需要一些样板代码。 如果我们想经常使用可重复的命令,我们可以将其中一个示例重写为 bash 函数:

function repeat(){
  for ((i=0;i<$1;i++)); do
    eval ${*:2}
  done
}

我们现在可以在 shell 中使用我们的函数:

repeat 5 echo "Command"

在上面的示例中,我们使用eval来使用不可执行的命令,例如变量赋值。

我们还介绍了*${*:2}*,它从索引 2 开始计算所有命令输入变量的数组。

由于我们的实现接受多个参数,我们还可以将多个命令传递给我们的重复函数:

repeat 5 echo "Command" ";" echo "Another command"

6. ZSH

前面描述的示例对每个 bash shell 都有效,但还有其他解决方案,例如 ZSH。

这个 shell 有一个简单的内置函数,用于将命令重复n次:

repeat 5 echo "Command"

对于多个命令:

repeat 5 {echo "Command1"; echo "Command2"}