Linux命令For循环实例教程详解

发布时间:2020-09-10编辑:脚本学堂
本文介绍了linux for循环命令的用法,for循环是Bash中最常用的语法结构,与其实语言中的for循环略有不同,需要的朋友参考下。

linuxcmd/ target=_blank class=infotextkey>linux命令For循环实例教程

shell中用于循环。类似于其他编程语言中的for,但又有些不同。for循环是Bash中最常用的语法结构。
常用格式
 

格式一
for 变量
do
    语句
done
格式二
for 变量 in 列表
do
    语句
done
格式三
for ((变量=初始值; 条件判断; 变量变化))
do
    语句
done

以下是for循环语句的例子,大家做个参考。

例子,linux for循环用法:
 

复制代码 代码示例:
for s in ac apropos at arp 
do 
     echo $s 
done  
 
[root@jfht ~]# for s in ac apropos at arp
> do
>     echo $s
> done
ac
apropos
at
arp
[root@jfht ~]#

例2,linux for循环用法:
 

复制代码 代码示例:
for f in * 
do 
    echo $f 
done 
 
[root@jfht ~]# for f in *
> do
>     echo $f
> done
anaconda-ks.cfg
bak181
hlx
install.log
install.log.syslog
job.sh
job.txt
mbox
mini
setup
temp
vsftpd-2.0.5-16.el5.i386.rpm
vsftpd.conf
work191
[root@jfht ~]#
 

例3,linux for循环用法:
 

复制代码 代码示例:
ls >ls.txt 
for s in $(cat ls.txt) 
do 
    echo $s 
done 
 
[root@jfht ~]# ls >ls.txt
[root@jfht ~]# for s in $(cat ls.txt)
>
> do
>
>     echo $s
>
> done
anaconda-ks.cfg
bak181
hlx
install.log
install.log.syslog
job.sh
job.txt
ls.txt
mbox
mini
setup
temp
vsftpd-2.0.5-16.el5.i386.rpm
vsftpd.conf
work191
[root@jfht ~]#
 

例4,linux for循环用法:
 

复制代码 代码示例:
print_args() 

    for arg in "$@" 
    do 
        echo $arg 
    done 

print_args 1 2 3 4 
print_args "this is a test" 
"color: #000000;">print_args this is a test 
[root@smsgw root]# print_args()
> {
>     for arg in "$@"
>     do
>         echo $arg
>     done
> }
[root@smsgw root]# print_args 1 2 3 4
1
2
3
4
[root@smsgw root]# print_args "this is a test"
this is a test
[root@smsgw root]# print_args this is a test
this
is
a
test

例五,linux for循环用法:
 

复制代码 代码示例:
for ((i=0; i<</span>10; ++i)) 
do 
    echo $i 
done 
 
[root@smsgw root]# for ((i=0; i<10; ++i))
> do
>     echo $i
> done
0
1
2
3
4
5
6
7
8
9
 

例六,列表为数组
 

复制代码 代码示例:
AREAS=(1901 1902 1903 1904 1905 1906 1907   1908 1909 1910 1911 1912 1913) 
NAMES=(南京 无锡 徐州 常州 苏州 南通 连云港 淮安 盐城 扬州 镇江 泰州 宿迁) 
NUM_OF_AREAS=13 
area_name_of() 

    for ((I=0; I<$NUM_OF_AREAS; ++I)) 
    do 
        if [ "$1" == "${AREAS[I]}" ]; then 
            echo "${NAMES[I]}" 
        fi 
    done 

echo $(area_name_of 1903) 
for AREA in ${AREAS[*]}; 
do 
    echo $AREA $(area_name_of $AREA) 
done 
 
[root@smsgw root]# AREAS=(1901 1902 1903 1904 1905 1906 1907   1908 1909 1910 1911 1912 1913)
[root@smsgw root]# NAMES=(南京 无锡 徐州 常州 苏州 南通 连云港 淮安 盐城 扬州 镇江 泰州 宿迁)
[root@smsgw root]# NUM_OF_AREAS=13
[root@smsgw root]# area_name_of()
> {
>     for ((I=0; I<$NUM_OF_AREAS; ++I))
>     do
>         if [ "$1" == "${AREAS[I]}" ]; then
>             echo "${NAMES[I]}"
>         fi
>     done
> }
[root@smsgw root]# echo $(area_name_of 1903)
徐州
[root@smsgw root]# for AREA in ${AREAS[*]};
> do
>     echo $AREA $(area_name_of $AREA)
> done
1901 南京
1902 无锡
1903 徐州
1904 常州
1905 苏州
1906 南通
1907 连云港
1908 淮安
1909 盐城
1910 扬州
1911 镇江
1912 泰州
1913 宿迁
[root@smsgw root]#
 

例七,bash version 3.0+
 

复制代码 代码示例:
bash --version 
for i in {1..5} 
do 
   echo "Welcome $i times" 
done  
 
[root@smsgw root]# bash --version
GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu)
Copyright (C) 2002 Free Software Foundation, Inc.
[root@smsgw root]# for i in {1..5}
> do
>    echo "Welcome $i times"
> done
Welcome {1..5} times
[root@smsgw root]#

换个较高版本的Linux进行测试:
 

复制代码 代码示例:
[root@jfht ~]# bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
[root@jfht ~]# for i in {1..5}
> do
>    echo "Welcome $i times"
> done
Welcome 1 times
Welcome 2 times
Welcome 3 times
Welcome 4 times
Welcome 5 times
[root@jfht ~]#
 

例八,Bash v4.0+,linux for循环用法:
 

复制代码 代码示例:
echo "Bash version ${BASH_VERSION}..." 
for i in {0..10..2} 
  do 
     echo "Welcome $i times" 
 done 
 
[root@smsgw root]# echo "Bash version ${BASH_VERSION}..."
Bash version 2.05b.0(1)-release...
[root@smsgw root]# for i in {0..10..2}
>   do
>      echo "Welcome $i times"
>  done
Welcome {0..10..2} times
[root@smsgw root]#

换个较高版本的Linux:
 

复制代码 代码示例:
[root@jfht ~]# echo "Bash version ${BASH_VERSION}..."
Bash version 3.2.25(1)-release...
[root@jfht ~]# for i in {0..10..2}
>   do
>      echo "Welcome $i times"
>  done
Welcome {0..10..2} times
[root@jfht ~]#

传说Bash4.0可以支持这种语法。
 

Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 times
Welcome 10 times
 

问题:
1,怎么用for实现死循环(无限循环)?
2,比较几种写法的不同:(1) for arg in $* (2) for arg in $@ (3) for arg in "$*" (4) for arg in "$@"
3,怎么跳出for循环?
4,for s; do echo $s; done  这个写法的执行结果是什么?

大家可以参考以上linux for循环的例子,思考解决如上问题,相信对linux for循环的用法,会有一个更加深入的认识了。