如何在终端中多次执行命令(有/没有一些微小的更改)?

如何在终端中多次执行命令(有/没有一些微小的更改)?

假设我想执行该命令ls十次(尽管这是毫无意义的,因为它只会显示目录内容十次),是否有相当于编写以下内容:

for (i = 0, i < 10, i++) {

     ls

}

现在,假设我想执行 Java 程序十次,每次使用不同的输入文件。是否有与以下内容等效的代码:

fileList = [input1, input2, ....., input10]

for (i = 0, i < 10, i++) {

     java myProgram fileList[i]

}

我猜想有某种语言可以让我编写此类脚本。我尝试在网上查找,但我的知识很基础,找不到任何我能理解的内容。

答案1

是的!您可以使用 BASH 来解释您在终端中输入的命令。

例如,尝试这个:

for file in {input1,input2,input3}; do java myprogram $file; done

这一行代码是一个简单的循环,它将myprogram与 java 一起在文件列表上运行。

这 100% 相当于运行:

java myprogram input1
java myprogram input2
java myprogram input3

您可以将此语法与任何您喜欢的命令一起使用。例如,您可以使用以下命令列出主目录中的所有文件:

for file in ~/*; do echo $file; done

~/*将扩展为目录中所有文件的列表~(隐藏文件除外)。

另一个例子:如果你想在 100 个文件上运行你的程序,你不需要手动列出它们。试试这个:

 for i in $(seq 1 100); do java myprogram input$i; done;

$(seq 1 100)将扩展为命令的输出seq 1 100,它提供从 1 到 100 的数字列表。这样,您的程序将在所有 100 个“inputN”文件上运行。

在循环中使用多个命令也是可以的,但使用多行会更方便。以下示例将在 10 个测试输入上运行您的程序,并打印与参考输出的差异:

for i in $(seq 1 10); do
    java myprogram input$i > temp_out
    diff temp_out output$i
done

随着脚本的不断增长,将其保存到文件中很快就会变得方便。写下你的脚本(通常 bash 脚本会有.sh扩展名),然后使用以下命令运行它:

sh myscript.sh

或者,如果你在 myscript 文件上设置 +x 标志,并将其放在#!\bin\sh脚本的顶部(表明该文件应该使用 bash 运行):

./myscript.sh

答案2

这种语言就是您要绑定命令的程序。

命令行提示由.Ubuntu 的默认 shell 是猛击(你应该从教程并查阅手册以供参考)。

要连续执行多个相关命令,可以使用环形. 您可以将文件名列表存储在大批多变的。

file_list=(input1 input2 … input10)
for file in "${file_list[@]}"; do
  java myProgram "$file"
done

我使用过的语法元素:

  • 数组变量赋值:(周围没有空格)variable=(element1 element2 element3)=
  • 使用数组变量:(是的,由于历史原因,这很奇怪)"${variable[@]}"
  • 使用字符串变量:"$variable"
  • For 循环:(相当于换行符)for variable in list; do instructions; done;

相关内容