在C语言中,for循环通常定义ige变量,然后这个变量会在每次迭代时自动改变。
C语言的for命令有一个用来指明变量的特定方法,一个必须保持成立才能继续迭代的条件,以及另一个在每个迭代中改变变量的方法,当条件不成立时,for循环就会停止。条件等式通过标准的数学符号定义。如下:
[chendajie@CHENDAJIE for]$ cat for.c
#include
/* Use of for statements */
main()
{
int i;
for(i = 0; i < 10; i++)
printf("%d\n", i);
}
执行情况:
[chendajie@CHENDAJIE for]$ ./a.out
0
1
2
3
4
5
6
7
8
9
可以看到该程序执行至i=10时就结束了。
下面是bash中C语言风格的for循环的基本格式:
for (( variable assigment ; condition ; iteration process ))
C语言风格的for命令看起来是这样的:
for (( a = 1; a < 10; a++ ))
和bash shell传统的不同点有以下几种:
1、变量赋值可以有空格;
2、条件中的变量不以美元符开头
3、迭代过程的算式未使用expr命令格式
下面是例子:
[chendajie@CHENDAJIE C_Like_For]$ cat test1
#!/bin/bash
# Testing the C-style for loop
for (( i = 1; i < 10; i++ ))
do
echo "The next number is $i"
done
[chendajie@CHENDAJIE C_Like_For]$ chmod u+x test1
[chendajie@CHENDAJIE C_Like_For]$ ./test1
The next number is 1
The next number is 2
The next number is 3
The next number is 4
The next number is 5
The next number is 6
The next number is 7
The next number is 8
The next number is 9
C语言风格的for命令也允许为迭代使用多个变量。循环会单独处理每个变量,尽管可以使用多个变量,但只能在for循环中定义一种条件。
[chendajie@CHENDAJIE C_Like_For]$ cat test2
#!/bin/bash
# Testing a multicommand while loop
for (( a = 1, b = 10; a <= 10; b--, a++ ))
do
echo "$a - $b"
done
#
[chendajie@CHENDAJIE C_Like_For]$ chmod u+x test2
[chendajie@CHENDAJIE C_Like_For]$ ./test2
1 - 10
2 - 9
3 - 8
4 - 7
5 - 6
6 - 5
7 - 4
8 - 3
9 - 2
10 - 1
变量a和变量b分别使用了不同的值来初始化并且定义了不同的迭代过程,循环的每次迭代在增加变量a的同时减少了变量b。
while命令某种意义上上是if–then语句和for循环的混杂体。while命令允许定义一个要测试的命令,然后循环执行一组命令,只要定义的测试命令返回的是退出状态码0.它会在每次迭代的一开始测试test命令。在test命令返回非零退出状态码时,while命令会停止执行那组命令。
例:
[chendajie@CHENDAJIE while]$ cat test1
#!/bin/bash
# While command test
var1=10
while [ $var1 -gt 0 ]
do
echo $var1
var1=$[ $var1 -1 ]
done
[chendajie@CHENDAJIE while]$ chmod u+x test1^C
[chendajie@CHENDAJIE while]$ ./test1
10
9
8
7
6
5
4
3
2
1
只要测试条件成立,while命令就会不停止循环执行定义好的命令,在这些命令中,测试条件用到的变量必须改变,否则会陷入无限循环。
[chendajie@CHENDAJIE while]$ cat -n test2
1 #!/bin/bash
2 # Testing a multicommand while loop
3
4 var1=10
5
6 while echo $var1
7 [ $var1 -ge 0 ]
8 do
9 echo "This is inside the loop"
10 var1=$[ $var1 -1 ]
11 done
[chendajie@CHENDAJIE while]$ chmod u+x test2
[chendajie@CHENDAJIE while]$ ./test2
10
This is inside the loop
9
This is inside the loop
8
This is inside the loop
7
This is inside the loop
6
This is inside the loop
5
This is inside the loop
4
This is inside the loop
3
This is inside the loop
2
This is inside the loop
1
This is inside the loop
0
This is inside the loop
-1
在这个例子中,while语句中定义了两个测试命令
while echo $var1
[ $var1 -ge 0 ] # var1是否大于或等于0
var1=$[ $var1 -1 ] # 每次都执行var1-1
注意此时程序结束的时候var1=-1;
while循环会在var1变量等于0时执行echo语句,然后将var1变量的值减一。接下来再次执行测试命令,用于下一次迭代。echo测试命令被执行并显示了var1变量的值。知道shell执行test测试命令,while循环才会结束。
until命令和while命令工作的方式完全相反。until命令要求你指定一个通常返回非零退出状态码的测试命令。只有测试命令的退出状态码不为0,bash shell才会执行循环中列出的命令。
格式如下:
until test commands
do
other commands
done
和while命令类似,你可以在until命令语句中放入多个测试命令。只有最后一个命令的退出状态码决定了bash shell是否执行已定义的other commands。
例:
[chendajie@CHENDAJIE until]$ cat -n test1
1 #!/bin/bash
2 # Using the until command
3
4 var1=100
5
6 until [ $var1 -eq 0 ]
7 do
8 echo $var1
9 var1=$[ $var1 - 25 ]
10 done
[chendajie@CHENDAJIE until]$ chmod u+x test1 ^C
[chendajie@CHENDAJIE until]$ ./test1
100
75
50
25
上面的例子测试了until循环何时停止。只要返回状态码为0时就会停止了。
同while命令一样,在until命令中使用多个测试命令时要注意:
[chendajie@CHENDAJIE until]$ cat -n test2
1 #!/bin/bash
2 # Using the until command
3
4 var1=100
5
6 until echo $var1
7 [ $var1 -eq 0 ]
8 do
9 echo Inside the loop: $var1
10 var1=$[ $var1 -25 ]
11 done
[chendajie@CHENDAJIE until]$ chmod u+x test2
[chendajie@CHENDAJIE until]$ ./test2
100
Inside the loop: 100
75
Inside the loop: 75
50
Inside the loop: 50
25
Inside the loop: 25
0
shell会执行指定的多个测试命令,只有在最后一个命令成立时停止。
刚好最近做毕业设计要求用到C语言在复习,感叹一下自己学艺不精哈。怎么说呢,加油吧。欲买桂花同载酒,终不似,少年游。