【问题标题】:How to loop in bash script?如何在bash脚本中循环?
【发布时间】:2010-10-24 09:14:13
【问题描述】:

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

...
mkdir max15
mkdir max14
mkdir max13
mkdir max12
mkdir max11
mkdir max10
...

将它们置于循环中的语法如何,这样我就不必写数字 (15,14..)?

【问题讨论】:

    标签: bash


    【解决方案1】:

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

    for i in {15..10}
    do
     mkdir "max${i}"
    done
    

    或者干脆

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

    如果你的数字是动态生成的,你可以使用 C 风格的循环

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

    【讨论】:

      【解决方案2】:

      此任务不需要循环:

      mkdir max{15..10} max0{9..0}
      

      ...但如果您需要循环构造,您可以使用以下之一:

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

      for i in {<start>..<stop>} ; do 
           # you can use $i here
      done
      

      for (( i=<start> ; i < stop ; i++ )) ; do
           # you can use $i here
      done
      

      seq [ <start> [ <step> ]] <stop> | while read $i ; do
           # you can use $i here
      done
      

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

      【讨论】:

        【解决方案3】:
        for a in `seq 10 15`; do mkdir max${a}; done
        

        seq 将生成从1015 的数字。

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

        【讨论】:

          【解决方案4】:

          使用for-loop

          【讨论】:

            【解决方案5】:
            for i in {1..15} ; do
                mkdir max$i
            done
            

            【讨论】:

            • 如果您希望将值 1..9 填充为 0,请在 bash4 中使用 {00..15}
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多