1. 程式人生 > >Linux for迴圈之類C風格for迴圈

Linux for迴圈之類C風格for迴圈

for迴圈是Linux shell 中最常用的結構。for 迴圈有三種結構:一種結構是列表for迴圈;第二種結構是不帶列表for迴圈;第三種結構是類C風格的for迴圈。上篇博文講解了不帶列表for迴圈,本篇博文重點看類C風格for迴圈。類C風格的for迴圈也可被稱為計次for迴圈,一般用於迴圈次數已知的情況。

下面是類C風格for迴圈的語法格式

for((expr1; expr2; expr3))
do
    command
    command
    ...
done
其中表達式expr1為迴圈變數賦初值的語句;表示式expr2決定是否進行迴圈的表示式,當判斷expr2退出狀態為0時,執行do和done之間的迴圈體,當退出狀態為非0時,將退出for迴圈執行done後的命令;表示式expr3用於改變迴圈變數的語句。類C風格的for迴圈結構中,迴圈體也是一個塊語句,要麼是單條命令,要麼是多條命令,但必須包裹在do和done之間。

ex9、輸出前5個正數

[[email protected] shellscript]$ cat for_ex9.sh 
#!/bin/bash

#使用類C風格for迴圈輸出1~5
for ((integer = 1; integer <= 5; integer++)) 
do
    echo "$integer"
done

[[email protected] shellscript]$ sh for_ex9.sh 
1
2
3
4
5
[[email protected] shellscript]$ 

指令碼中for迴圈首先聲明瞭迴圈變數integer,並賦值為1,之所以稱integer為迴圈變數,是因為integer用於控制迴圈執行的次數和結束條件,接著判斷integer是否小於或等於5,若integer小於或等於5,成立,則執行迴圈體do和done之間的命令,而後執行修正表示式“integer++”,將integer的值加1,再次判斷integer小於或等於5是否成立,以此類推,直至迴圈結束。

使用類C風格for迴圈要注意以下事項:

  • 如果迴圈條件最初的退出狀態為非0,則不會執行迴圈體
  • 當執行更新語句時,如果迴圈條件的退出狀態永遠為0,則for迴圈將永遠執行下去,從而產生死迴圈
  • Linux shell中不執行使用非整數型別的數作為迴圈變數
  • 如果迴圈體中的迴圈條件被忽略,則預設的退出狀態為0
  • 在類C風格的for迴圈中,可以將三個語句全部忽略掉,下面是合法的for迴圈
for((; ; ))
do
    echo "hello world"
done

ex10、迴圈計算1~100內所有的奇數之和
[[email protected] shellscript]$ cat for_ex10.sh 
#!/bin/bash

sum=0

for((i = 1; i <= 100; i = i + 2))
do
    let "sum += i"
done

echo "sum = $sum"

[
[email protected]
shellscript]$ sh for_ex10.sh sum = 2500 [[email protected] shellscript]$

其中迴圈條件為 i<=100,初始條件i=1,因此,i=i+2將步長設定為2,每執行一次迴圈體,就將i的值增加2,最終產生結果sum 為2500 ex11、使用逗號運算子對兩個變數進行操作
[[email protected] shellscript]$ cat for_ex11.sh 
#/bin/bash

limit=5

for((a = 1, b = 5; a <= limit; a++, b --))
do 
    let "temp=a-b"
    echo "$a-$b=$temp"
done

[[email protected] shellscript]$ sh for_ex11.sh 
1-5=-4
2-4=-2
3-3=0
4-2=2
5-1=4
[[email protected] shellscript]$ 

在指令碼中,對變數a 和 變數b 同時初始化,通過a <=limit 來設定迴圈條件,然後通過a++設定a加1操作、b--設定b減1操作,每執行一次for迴圈,都判斷a是否小於等於limit,該迴圈將不斷的執行,直到a > 5。 在使用類C風格的for迴圈時,要保證for迴圈可以正常結束,也就是必須保證迴圈條件的結果存在退出狀態為非0的情況,否則將無休止地執行下去,從而產生死迴圈。

相關推薦

Linux for迴圈之類C風格for迴圈

for迴圈是Linux shell 中最常用的結構。for 迴圈有三種結構:一種結構是列表for迴圈;第二種結構是不帶列表for迴圈;第三種結構是類C風格的for迴圈。上篇博文講解了不帶列表for迴圈,本篇博文重點看類C風格for迴圈。類C風格的for迴圈也可被稱為計次fo

範圍for迴圈c++11)

概念   c++11新標準下用範圍for迴圈來遍歷序列: 1.使用範圍for迴圈時,如果要修改序列中的元素,則必須把迴圈變數定義成引用型別: string s = "abcdedf"; for (char& ch : s) ch = toupper(ch);//轉化成大寫 2

5.4基於範圍的for迴圈c++11)之讀書筆記

基於範圍的for迴圈,簡化了迴圈了任務:對陣列(或者容器,如vector和array)的每個元素執行相同的操作,如下例所示: double prices[5]={4.99,10.99,6.87,7.99,8.49}; for (double x:prices) cout<

c學習筆記--4 迴圈控制語句 if for while do

好久之前的了,學習c語言的筆記。 依舊是老套路,從基礎的變數型別,到函式定義一步步學起 #include <stdio.h> #include <string.h> //控制語句 這個在不同語言裡幾乎都不變 void test5() {

C++11之for迴圈的新用法 for(:)語句

轉載自:https://www.cnblogs.com/jiayayao/p/6138974.html   C++使用如下方法遍歷一個容器: #include "stdafx.h" #include<iostream> #include<vector>

c語言-for迴圈的使用技巧

void *(memset)(void *s, int c, size_t n) { const unsigned char uc = c; unsigned char *su; for (su = s; 0 < n; ++su, --n)

c語言for迴圈變數i,i的定義位置不同會導致錯誤

C語言必須將定義都放最前面,但是C++允許將定義不放最前面有區別,前者 i 的生存期不單在for裡面,還在for外面,後者 i 的生存期就只在for裡面 兩個 i的定義位置不同,程式執行結果截

C++中for迴圈的5種語法

[cpp] view plain copy print? #include <algorithm>#include <vector>//////////////////////////////////////////////int nArray[] = {0, 1, 2

C語言的FOR迴圈怎樣掌握,福利到了,如何學習C語言for迴圈

for迴圈的學習是整個C語言進度的里程碑,也只有將for迴圈瞭解精通,才能夠更好的使用C語言程式設計。For迴圈相對於指標等多方面的知識相對於基礎,是初學者前期要掌握的,所以今天就為大家講解部分C語言for迴圈的知識,希望會有所幫助。 首先完成我們程式碼程式設計的輪廓,在我們之前的學習中已經

C++】基於範圍的for迴圈C++11)

一、語法概念 在C++98中,如果要遍歷一個數組,會有以下程式碼: void TestFor() { int array[] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < sizeof(array) / sizeof(array[0]);

[轉]linux shell 流程控制(條件if,迴圈for,while】,選擇【case】語句例項

linux shell有一套自己的流程控制語句,其中包括條件語句(if),迴圈語句(for,while),選擇語句(case)。下面我將通過例子介紹下,各個語句使用方法。 一、shell條件語句(if用法) if語句結構[if/then/elif/else/fi] if 條件測試語句

C++中for迴圈巢狀遍歷的優化方法

專案開發過程中經常會出現A集合與B集合中資料對比取相同資料的情況。 最簡單的實現方法如下: //List<T> A = new ArrayList<T>(); //List<T> B = new ArrayList<T>(

c語言的迴圈for迴圈

D ennisRitchie 過世了,他發明的c語言,一個影響深遠並徹底改變世界的計算機語言。C語言的誕生是偶然的,它僅僅只是UNIX系統的附加產物。但是也絲毫掩蓋不了它王者的地位,看看2014年的語言排行榜:歷經40多年的洗禮,多少語言隨大浪東去,輝煌一陣又迅速湮 滅,

C語言for迴圈

c語言中的for迴圈語句使用最為靈活,不僅可以用於迴圈次數已經確定的情況,而且可以用於迴圈次數不確定而只給出迴圈結束條件的情況,它完全可以代替while語句.for(表示式 1;表示式 2;表示式 3)語句 它的執行過程如下: (1)先求表示式 1. (2)求表示式2,若

C語言for迴圈語句的執行順序

#include<stdio.h> int main() { int i; for(i=0;i<5;i++) { printf("%d\n",i); } return

C#用for迴圈設定二維陣列下標和元素

https://blog.csdn.net/number1killer/article/details/80021129遍歷陣列          https://blog.csdn.net/numbe

c語言for'迴圈執行順序

對於for(初始語句;條件語句;語句2)這類語句,首先執行初始語句,一般是賦值語句,然後判斷條件語句是否成立;如果成立執行for迴圈裡面的迴圈體(執行完一次如果沒有終止則這時就執行語句2(一般為i++)如果迴圈裡出現break,則退出迴圈不執行語句2);條件語句不成立則退出

C語言For迴圈的執行過程以及變數自增自減過程。

程式一: #include<stdio.h> main(){ int i; int num=0; for(i=0;i<5;i++){ num++; printf("num=%

C++中用for迴圈中對多幅影象進行同樣的處理

問題描述: 有n幅圖,命名分別為Image1.tif,Image2.tif ... ... Imagen.tif 現在要在一個for迴圈中對每幅影象進行同樣的處理,如灰度化,二值化等,需要用到函式

c++,for迴圈列印菱形圖

#include<iostream> using namespace std; int main() { int n = 0; cout << "輸入菱形的邊長:"; cin >> n; cout << "圖形如下:"