如何在bash脚本中循环?

co-*_*ker 5 bash

我在Linux下的bash脚本中有以下行:

...
mkdir max15
mkdir max14
mkdir max13
mkdir max12
mkdir max11
mkdir max10
...
Run Code Online (Sandbox Code Playgroud)

如何将它们放在循环中的语法,以便我不必写数字(15,14 ..)?

gho*_*g74 16

使用bash,无需使用外部命令seq来生成数字.

for i in {15..10}
do
 mkdir "max${i}"
done
Run Code Online (Sandbox Code Playgroud)

或者干脆

mkdir max{01..15} #from 1 to 15

mkdir max{10..15} #from 10 to 15
Run Code Online (Sandbox Code Playgroud)

如果您的数字是动态生成的,您可以使用C样式进行循环

start=10
end=15
for((i=$start;i<=$end;i++))
do
  mkdir "max${i}"
done
Run Code Online (Sandbox Code Playgroud)


Che*_*evy 7

此任务不需要循环:

mkdir max{15..10} max0{9..0}
Run Code Online (Sandbox Code Playgroud)

...但是如果你需要一个循环结构,你可以使用以下之一:

for i in $(seq [ <start> [ <step> ]] <stop>) ; do
     # you can use $i here
done
Run Code Online (Sandbox Code Playgroud)

要么

for i in {<start>..<stop>} ; do 
     # you can use $i here
done
Run Code Online (Sandbox Code Playgroud)

要么

for (( i=<start> ; i < stop ; i++ )) ; do
     # you can use $i here
done
Run Code Online (Sandbox Code Playgroud)

要么

seq [ <start> [ <step> ]] <stop> | while read $i ; do
     # you can use $i here
done
Run Code Online (Sandbox Code Playgroud)

请注意,最后一个不会将$ i的值保留在循环之外,因为|它会启动子shell


eum*_*iro 5

for a in `seq 10 15`; do mkdir max${a}; done
Run Code Online (Sandbox Code Playgroud)

seq将生成从10到 的数字15

编辑:多年来我已经习惯了这种结构。然而,当我观察其他答案时,确实要{START..STOP}好得多。现在我必须习惯以这种更好的方式创建目录:mkdir max{10..15}.