Shell中使用for循环

关于 shell 中的 for 循环用法很多,一直想总结一下,今天网上看到上一篇关于 for 循环用法的总结:

for((i=1;i<=10;i++));do echo $(expr $i * 4);done

在 shell 中常用的是 for i in $(seq 10)

for i in ls

for i in ${arr[@]}

for i in $* ; do

for File in /proc/sys/net/ipv4/confaccept_redirects:’

for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo $File
done

for i in f1 f2 f3 ;do
echo $i
done

for (( i=0; i<10; i++)); do
echo $i
done


shell 中 for 循环用法

shell 语法好麻烦的,一个循环都弄了一会 ,找了几个不同的方法来实现输出 1-100 间可以被 3 整除的数

1.用(())

#!/bin/bash

for((i=1;i<100;i++)); do
    if !((i%3==0)); then
        echo $i
        continue
    fi
done

2.使用seq 100

#!/bin/bash

for i in `seq 100`; do
    if((i%3==0)); then
        echo $i
        continue
    fi
done

3.使用 while

#!/bin/bash
i=1
while(($i<100))
do
    if(($i%3==0)); then
        echo $i
    fi
    i=$(($i+1))
done

在 shell 用 for 循环做数字递增的时候发现问题,特列出 shell 下 for 循环的几种方法:

  1. 用 seq 1 10000000 做递增,之前用这种方法的时候没遇到问题,因为之前的 i 根本就没用到百万(1000000),因为项目需要我这个数字远大于百万,发现用 seq 数值到 1000000 时转换为 1e+06,根本无法作为数字进行其他运算,或者将$i 有效、正确的取用,遂求其他方法解决,如下

    for i in seq 1 1000000;do
    echo $i
    done

  2. 类似

    for((i=1;i<10000000;i++));do
    echo $i
    done

  3. 因为本方法调用 expr 故运行速度会比第 1,第 2 种慢不少不过可稍作改进,将 i=expr $i + 1改为 i=$(($i+1))即可稍作速度的提升,不过具体得看相应 shell 环境是否支持

    i=1
    while(($i<10000000));do

    echo $i

    i=expr $i + 1
    done

  4. 其实选用哪种方法具体还是得由相应的 shell 环境的支持,达到预期的效果,再考虑速度方面的问题。

    for i in {1..10000000};do
    echo $i
    done

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.