<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    coolfiry

    認(rèn)認(rèn)真真做人,兢兢業(yè)業(yè)做事!
    posts - 39, comments - 17, trackbacks - 0, articles - 0

    2008年7月20日

    在這篇文章中將我們一起來探討當(dāng)前的API網(wǎng)關(guān)的作用。 

    一、API網(wǎng)關(guān)的用處

    API網(wǎng)關(guān)我的分析中會用到以下三種場景。 

    1. Open API。 企業(yè)需要將自身數(shù)據(jù)、能力等作為開發(fā)平臺向外開放,通常會以rest的方式向外提供,最好的例子就是淘寶開放平臺、騰訊公司的QQ開放平臺、微信開放平臺。 Open API開放平臺必然涉及到客戶應(yīng)用的接入、API權(quán)限的管理、調(diào)用次數(shù)管理等,必然會有一個(gè)統(tǒng)一的入口進(jìn)行管理,這正是API網(wǎng)關(guān)可以發(fā)揮作用的時(shí)候。
    2. 微服務(wù)網(wǎng)關(guān)。微服務(wù)的概念最早在2012年提出,在Martin Fowler的大力推廣下,微服務(wù)在2014年后得到了大力發(fā)展。 在微服務(wù)架構(gòu)中,有一個(gè)組件可以說是必不可少的,那就是微服務(wù)網(wǎng)關(guān),微服務(wù)網(wǎng)關(guān)處理了負(fù)載均衡,緩存,路由,訪問控制,服務(wù)代理,監(jiān)控,日志等。API網(wǎng)關(guān)在微服務(wù)架構(gòu)中正是以微服務(wù)網(wǎng)關(guān)的身份存在。 
    3. API服務(wù)管理平臺。上述的微服務(wù)架構(gòu)對企業(yè)來說有可能實(shí)施上是困難的,企業(yè)有很多遺留系統(tǒng),要全部抽取為微服務(wù)器改動(dòng)太大,對企業(yè)來說成本太高。但是由于不同系統(tǒng)間存在大量的API服務(wù)互相調(diào)用,因此需要對系統(tǒng)間服務(wù)調(diào)用進(jìn)行管理,清晰地看到各系統(tǒng)調(diào)用關(guān)系,對系統(tǒng)間調(diào)用進(jìn)行監(jiān)控等。 API網(wǎng)關(guān)可以解決這些問題,我們可以認(rèn)為如果沒有大規(guī)模的實(shí)施微服務(wù)架構(gòu),那么對企業(yè)來說微服務(wù)網(wǎng)關(guān)就是企業(yè)的API服務(wù)管理平臺。

    二、API網(wǎng)關(guān)在企業(yè)整體架構(gòu)中的地位

    一個(gè)企業(yè)隨著信息系統(tǒng)復(fù)雜度的提高,必然出現(xiàn)外部合作伙伴應(yīng)用、企業(yè)自身的公網(wǎng)應(yīng)用、企業(yè)內(nèi)網(wǎng)應(yīng)用等,在架構(gòu)上應(yīng)該將這三種應(yīng)用區(qū)別開,三種應(yīng)用的安排級別、訪問方式也不一樣。 因此在我的設(shè)計(jì)中將這三種應(yīng)用分別用不同的網(wǎng)關(guān)進(jìn)行API管理,分別是:API網(wǎng)關(guān)(OpenAPI合伙伙伴應(yīng)用)、API網(wǎng)關(guān)(內(nèi)部應(yīng)用)、API網(wǎng)關(guān)(內(nèi)部公網(wǎng)應(yīng)用)。

     

    三、企業(yè)中在如何應(yīng)用API網(wǎng)關(guān)

    1、對于OpenAPI使用的API網(wǎng)關(guān)來說,一般合作伙伴要以應(yīng)用的形式接入到OpenAPI平臺,合作伙伴需要到 OpenAPI平臺申請應(yīng)用。 因此在OpenAPI網(wǎng)關(guān)之外,需要有一個(gè)面向合作伙伴的使用的平臺用于合作伙伴,這就要求OpenAPI網(wǎng)關(guān)需要提供API給這個(gè)用戶平臺進(jìn)行訪問。 如下架構(gòu):

     

    當(dāng)然如果是在簡單的場景下,可能并不需要提供一個(gè)面向合作伙伴的門戶,只需要由公司的運(yùn)營人員直接添加合作伙伴應(yīng)用id/密鑰等,這種情況下也就不需要合作伙伴門戶子系統(tǒng)。 

    2、對于內(nèi)網(wǎng)的API網(wǎng)關(guān),在起到的作用上來說可以認(rèn)為是微服務(wù)網(wǎng)關(guān),也可以認(rèn)為是內(nèi)網(wǎng)的API服務(wù)治理平臺。 當(dāng)企業(yè)將所有的應(yīng)用使用微服務(wù)的架構(gòu)管理起來,那么API網(wǎng)關(guān)就起到了微服務(wù)網(wǎng)關(guān)的作用。 而當(dāng)企業(yè)只是將系統(tǒng)與系統(tǒng)之間的調(diào)用使用rest api的方式進(jìn)行訪問時(shí)使用API網(wǎng)關(guān)對調(diào)用進(jìn)行管理,那么API網(wǎng)關(guān)起到的就是API服務(wù)治理的作用。 架構(gòu)參考如下:

    3、對于公司內(nèi)部公網(wǎng)應(yīng)用(如APP、公司的網(wǎng)站),如果管理上比較細(xì)致,在架構(gòu)上是可能由獨(dú)立的API網(wǎng)關(guān)來處理這部分內(nèi)部公網(wǎng)應(yīng)用,如果想比較簡單的處理,也可以是使用面向合作伙伴的API網(wǎng)關(guān)。 如果使用獨(dú)立的API網(wǎng)關(guān),有以下的好處:

    • 面向合作伙伴和面向公司主體業(yè)務(wù)的優(yōu)先級不一樣,不同的API網(wǎng)關(guān)可以做到業(yè)務(wù)影響的隔離。
    • 內(nèi)部API使用的管理流程和面向合作伙伴的管理流程可能不一樣。
    • 內(nèi)部的API在功能擴(kuò)展等方面的需求一般會大于OpenAPI對于功能的要求。

    基于以上的分析,如果公司有能力,那么還是建議分開使用合作伙伴OPEN API網(wǎng)關(guān)和內(nèi)部公網(wǎng)應(yīng)用網(wǎng)關(guān)。

    四、API網(wǎng)關(guān)有哪些競爭方案

    1、對于Open API平臺的API網(wǎng)關(guān),我分析只能選擇API網(wǎng)關(guān)作為解決方案,業(yè)界沒有發(fā)現(xiàn)比較好的可以用來作為Open API平臺的入口的其他方案。 

    2、對于作為微服務(wù)網(wǎng)關(guān)的API網(wǎng)關(guān),業(yè)界的選擇可以選擇的解決方案比較多,也取決于微服務(wù)器的實(shí)現(xiàn)方案,有一些微服務(wù)架構(gòu)的實(shí)現(xiàn)方案是不需要微服務(wù)網(wǎng)關(guān)的。

    • Service Mesh,這是新興的基于無API網(wǎng)關(guān)的架構(gòu),通過在客戶端上的代理完成屏蔽網(wǎng)絡(luò)層的訪問,這樣達(dá)到對應(yīng)用層最小的改動(dòng),當(dāng)前Service Mesh的產(chǎn)品還正在開發(fā)中,并沒有非常成熟可直接應(yīng)用的產(chǎn)品。 發(fā)展最迅速的產(chǎn)品是Istio。 建議大家密切關(guān)注相關(guān)產(chǎn)品的研發(fā)、業(yè)務(wù)使用進(jìn)展。

    • 基于duboo架構(gòu),在這個(gè)架構(gòu)中通常是不需要網(wǎng)關(guān)的,是由客戶端直接訪問服務(wù)提供方,由注冊中心向客戶端返回服務(wù)方的地址。

    五、API網(wǎng)關(guān)解決方案

    私有云開源解決方案如下:

    • Kong kong是基于Nginx+Lua進(jìn)行二次開發(fā)的方案, https://konghq.com/
    • Netflix Zuul,zuul是spring cloud的一個(gè)推薦組件,https://github.com/Netflix/zuul
    • orange,這個(gè)開源程序是國人開發(fā)的, http://orange.sumory.com/

    公有云解決方案:

    • Amazon API Gateway,https://aws.amazon.com/cn/api-gateway/
    • 阿里云API網(wǎng)關(guān),https://www.aliyun.com/product/apigateway/
    • 騰訊云API網(wǎng)關(guān), https://cloud.tencent.com/product/apigateway

    自開發(fā)解決方案:

    • 基于Nginx+Lua+ OpenResty的方案,可以看到Kong,orange都是基于這個(gè)方案
    • 基于Netty、非阻塞IO模型。 通過網(wǎng)上搜索可以看到國內(nèi)的宜人貸等一些公司是基于這種方案,是一種成熟的方案。
    • 基于Node.js的方案。 這種方案是應(yīng)用了Node.js天生的非阻塞的特性。
    • 基于java Servlet的方案。 zuul基于的就是這種方案,這種方案的效率不高,這也是zuul總是被詬病的原因。

    六、企業(yè)怎么選擇API網(wǎng)關(guān)

    如果是要選擇一款已有的API網(wǎng)關(guān),那么需要從以下幾個(gè)方面去考慮。 

    1、性能與可用性
    如果一旦采用了API網(wǎng)關(guān),那么API網(wǎng)關(guān)就會作為企業(yè)應(yīng)用核心,因此性能和可用性是必須要求的。

    • 從性能上來說,需要讓網(wǎng)關(guān)增加的時(shí)間消耗越短越好,個(gè)人覺得需要10ms以下。 系統(tǒng)需要采用非阻塞的IO,如epoll,NIO等。網(wǎng)關(guān)和各種依賴的交互也需要是非阻塞的,這樣才能保證整體系統(tǒng)的高可用性,如:Node.js的響應(yīng)式編程和基于java體現(xiàn)的RxJava和Future。
    • 網(wǎng)關(guān)必須支持集群部署,任務(wù)一臺服務(wù)器的crash都應(yīng)該不影響整體系統(tǒng)的可用性。
    • 多套網(wǎng)關(guān)應(yīng)該支持同一管理平臺和同一監(jiān)控中心。 如: 一個(gè)企業(yè)的OpenAPI網(wǎng)關(guān)和內(nèi)部應(yīng)用的多個(gè)系統(tǒng)群的不同的微服務(wù)網(wǎng)關(guān)可以在同一監(jiān)控中心進(jìn)行監(jiān)控。

    2、可擴(kuò)展性、可維護(hù)性
    一款產(chǎn)品總有不能滿足生產(chǎn)需求的地方,因此需求思考產(chǎn)品在如何進(jìn)行二次開發(fā)和維護(hù),是否方便公司團(tuán)隊(duì)接手維護(hù)產(chǎn)品。 
    3、需求匹配度
    需要評估各API網(wǎng)關(guān)在需求上是否能滿足,如: 如果是OpenAPI平臺需要使用API網(wǎng)關(guān),那么需要看API網(wǎng)關(guān)在合作伙伴應(yīng)用接入、合作伙伴門戶集成、訪問次數(shù)限額等OpenAPI核心需求上去思考產(chǎn)品是否能滿足要求。 如果是微服務(wù)網(wǎng)關(guān),那么要從微服務(wù)的運(yùn)維、監(jiān)控、管理等方面去思考產(chǎn)品是否足夠強(qiáng)大。
    4、是否開源?公司是否有自開發(fā)的能力?
    現(xiàn)有的開源產(chǎn)品如kong,zuul,orange都有基礎(chǔ)的API網(wǎng)關(guān)的核心功能,這些開源產(chǎn)品大多離很好的使用有一定的距離,如:沒有提供管理功能的UI界面、監(jiān)控功能弱小,不支持OpenAPI平臺,沒有公司運(yùn)營與運(yùn)維的功能等。 當(dāng)然開源產(chǎn)品能獲取源代碼,如果公司有比較強(qiáng)的研發(fā)能力,能hold住這些開源產(chǎn)品,經(jīng)過二次開發(fā)kong、zuul應(yīng)該還是適應(yīng)一些公司,不過需求注意以下一些點(diǎn):

    • kong是基于ngnix+lua的,從公司的角度比較難于找到能去維護(hù)這種架構(gòu)產(chǎn)品的人。 需求評估當(dāng)前公司是否有這個(gè)能力去維護(hù)這個(gè)產(chǎn)品。
    • zuul因?yàn)榧軜?gòu)的原因在高并發(fā)的情況下性能不高,同時(shí)需要去基于研究整合開源的適配zuul的監(jiān)控和管理系統(tǒng)。
    • orange由于沒有被大量使用,同時(shí)是國內(nèi)個(gè)人在開源,在可持續(xù)性和社區(qū)資源上不夠豐富,出了問題后可能不容易找到人問。

    另外kong提供企業(yè)版本的API網(wǎng)關(guān),當(dāng)然也是基于ngnix+lua的,企業(yè)版本可以購買他們的技術(shù)支持、培訓(xùn)等服務(wù)、以及擁有界面的管理、監(jiān)控等功能。

    5、公有云還是私有云
    現(xiàn)在的亞馬遜、阿里、騰訊云都在提供基礎(chǔ)公有云的API網(wǎng)關(guān),當(dāng)然這些網(wǎng)關(guān)的基礎(chǔ)功能肯定是沒有問題,但是二次開發(fā),擴(kuò)展功能、監(jiān)控功能可能就不能滿足部分用戶的定制需求了。另外很多企業(yè)因?yàn)樽陨硇畔踩脑颍荒苁褂猛饩W(wǎng)公有網(wǎng)的API網(wǎng)關(guān)服務(wù),這樣就只有選擇私有云的方案了。 
    在需求上如果基于公有云的API網(wǎng)關(guān)只能做到由內(nèi)部人員為外網(wǎng)人員申請應(yīng)用,無法做到定制的合作伙伴門戶,這也不適合于部分企業(yè)的需求。 
    如果作為微服務(wù)網(wǎng)關(guān),大多數(shù)情況下是希望網(wǎng)關(guān)服務(wù)器和服務(wù)提供方服務(wù)器是要在內(nèi)網(wǎng)的,在這里情況下也只有私有云的API網(wǎng)關(guān)才能滿足需求。 

    綜合上面的分析,基礎(chǔ)公有云的API網(wǎng)關(guān)只有滿足一部分簡單客戶的需求,對于很多企業(yè)來說私有云的API網(wǎng)關(guān)才是正確的選擇。


    文章作者介紹:
    來自于小豹科技的架構(gòu)師-專注于軟件研發(fā)基于平臺性軟件的研發(fā),目前我正在研發(fā)一款基于Netty、響應(yīng)式架構(gòu)的插件式的API網(wǎng)關(guān),希望能對行業(yè)帶來一些改變。 我希望與對OpenAPI、微服務(wù)、API網(wǎng)關(guān)、Service Mesh等感興趣的朋友多交流。 有興趣的朋友請加我的QQ群244054462。

    posted @ 2018-01-05 13:42 Coolfiry 閱讀(4699) | 評論 (0)編輯 收藏

    虞美人 李煜
    春花秋月何時(shí)了,往事知多少?小樓昨夜又東風(fēng),故國不堪回首月明中。雕欄玉砌應(yīng)猶在,只是朱顏改。問君能有幾多愁,恰似一江春水向東流。 

    posted @ 2009-01-19 10:49 Coolfiry 閱讀(265) | 評論 (0)編輯 收藏

    雨霖鈴 ·柳永


    寒蟬凄切。對長亭晚,驟雨初歇。都門帳飲無緒,留戀處、蘭舟催發(fā)。執(zhí)手相看淚眼,竟無語凝噎。念去去、千里煙波,暮靄沉沉楚天闊。
    多情自古傷離別,更那堪冷落清秋節(jié)!今宵酒醒何處?楊柳岸、曉風(fēng)殘?jiān)隆4巳ソ?jīng)年,應(yīng)是良辰好景虛設(shè)。便縱有千種風(fēng)情,更與何人說?

    posted @ 2009-01-19 10:48 Coolfiry 閱讀(260) | 評論 (0)編輯 收藏

    1、python的入門級內(nèi)容。
    2、java mail的使用基本用法和注意事項(xiàng)。
    3、CXF中相關(guān)BUG的解決方法。
    4、UNIX 網(wǎng)絡(luò)編程步步提升系列。

    posted @ 2008-12-11 15:48 Coolfiry 閱讀(1072) | 評論 (5)編輯 收藏

    轉(zhuǎn)自:http://bbs.chinaunix.net/viewthread.php?tid=691982&extra=&page=1
    snoop 抓包
    solaris自帶snoop抓包工具,抓所有數(shù)據(jù)流

    # snoop
    Using device /dev/pcn0 (promiscuous mode)
    192.168.8.18 -> 192.168.255.255 NBT NS Query Request for WORKGROUP[1c], Success
    192.168.253.35 -> solaris      TELNET C port=1246
         solaris -> 192.168.253.35 TELNET R port=1246 Using device /dev/pc
         solaris -> 192.168.253.35 TELNET R port=1246 Using device /dev/pc
    192.168.4.150 -> (broadcast)  ARP C Who is 192.168.4.200, 192.168.4.200 ?
    192.168.4.200 -> (broadcast)  ARP C Who is 192.168.4.150, 192.168.4.150 ?
    #

    抓源地址或目的為 202.101.98.55的數(shù)據(jù)流:

    # snoop 202.101.98.55
    Using device /dev/pcn0 (promiscuous mode)
    192.168.253.35 -> dns.fz.fj.cn DNS C www.163.com. Internet Addr ?
    dns.fz.fj.cn -> 192.168.253.35 DNS R www.163.com. Internet CNAME www.cache.split.netease.com.

    #

    說明:internet cname 后的為解析www.163.com的名字時(shí),代表www.163.com回答的主機(jī)的域名。

    抓 192.168.253.35和202.101.98.55之間的數(shù)據(jù)流(雙向都抓)

    # snoop 192.168.253.35 202.101.98.55
    Using device /dev/pcn0 (promiscuous mode)
    192.168.253.35 -> dns.fz.fj.cn DNS C www.google.com. Internet Addr ?
    dns.fz.fj.cn -> 192.168.253.35 DNS R www.google.com. Internet CNAME www.l.google.com.
    #

    抓完存在當(dāng)前目錄下的cap文件中并查看

    # snoop -o cap1 -P      -P表示處在非混雜模式抓數(shù)據(jù),只抓廣播、主播、目的為本機(jī)的數(shù)據(jù)
    Using device /dev/pcn0 (non promiscuous)
    15 ^C                           15的含義是:顯示目前抓了多少個(gè)數(shù)據(jù)流
    #

    # snoop -i cap1
      1   0.00000 192.168.253.35 -> solaris      TELNET C port=1246
      2   0.18198 192.168.253.35 -> solaris      TELNET C port=1246
      3   0.37232 192.168.4.199 -> 192.168.255.255 NBT Datagram Service Type=17 Source=WB-200[20]
      4   0.00016            ? -> (multicast)  ETHER Type=EF08 (Unknown), size = 180bytes
      5   0.62546 192.168.253.35 -> solaris      TELNET C port=1246
      6   0.13822            ? -> (multicast)  ETHER Type=0000 (LLC/802.3), size = 52 bytes
      7   0.06283 192.168.253.35 -> solaris      TELNET C port=1246
      8   0.90301 192.168.253.35 -> solaris      TELNET C port=1246
      9   0.19781 192.168.253.35 -> solaris      TELNET C port=1246
    10   0.81493            ? -> (multicast)  ETHER Type=0000 (LLC/802.3), size = 52 bytes
    11   0.07018 192.168.253.35 -> solaris      TELNET C port=1246
    12   0.19939 192.168.253.35 -> solaris      TELNET C port=1246
    13   0.90151 192.168.253.35 -> solaris      TELNET C port=1246
    14   0.18904 192.168.253.35 -> solaris      TELNET C port=1246
    15   0.68422            ? -> (multicast)  ETHER Type=0000 (LLC/802.3), size = 52 bytes
    #snoop -i cap1 -p 10,12            只看10-12條記錄

    #snoop -i cap1 -p10                  只看第10條記錄

    # snoop -i cap1 -v -p101            查看第10條數(shù)據(jù)流的包頭的詳細(xì)內(nèi)容

    #snoop -i cap1 -v -x 0 -p101   查看第10條數(shù)據(jù)流的全部的詳細(xì)內(nèi)容

    抓主機(jī)192.168.253.35和202.101.98.55之間的tcp或者udp端口53的數(shù)據(jù)

    # snoop 192.168.253.35 and 202.101.98.55 and \(tcp or udp\) and port 53

    輸入(的時(shí)候要加轉(zhuǎn)義符號\


    snoop的詳細(xì)參數(shù)
    Snoop 是Solaris 系統(tǒng)中自帶的工具, 是一個(gè)用于顯示網(wǎng)絡(luò)通訊的程序, 它可捕獲IP 包并將其顯示或保存到指定文件. (限超級用戶使用snoop)
    Snoop 可將捕獲的包以一行的形式加以總結(jié)或用多行加以詳細(xì)的描述(有調(diào)用不同的參數(shù)–v -V來實(shí)現(xiàn)). 在總結(jié)方式下(-V ) , 將僅顯示最高層的相關(guān)協(xié)議, 例如一個(gè)NFS 包將僅顯示NFS 信息, 其低層的RPC, UDP, IP, Ethernet 幀信息將不會顯示, 但是當(dāng)加上相應(yīng)的參數(shù)(-v ), 這些信息都能被顯示出來.

    -C

    -D

    -N

    -P 在非混雜模式下抓包

    -S 抓包的時(shí)候顯示數(shù)據(jù)包的大小

    -V 半詳細(xì)的顯示抓的數(shù)據(jù)的信息

    -t [ r | a | d ] 顯示時(shí)間戳,-ta顯示當(dāng)前系統(tǒng)時(shí)間,精確到毫秒

    -v 最詳細(xì)的顯示數(shù)據(jù)的信息

    -x offset [ , length] 以16進(jìn)制或ACSII方式顯示某數(shù)據(jù)的部分內(nèi)容,比如 -x 0,10 只顯示0-10字節(jié)

    #snoop -i cap1 -v -x 0 -p101 查看被抓獲的第101個(gè)數(shù)據(jù)流的全部內(nèi)容


    表達(dá)式:

    根據(jù)地址:

    #snoop x.x.x.x         IPV4的IP

    #snoop 0XX:XX:XX:XX    ETHERNET的MAC地址

    數(shù)據(jù)的方向:

    from x.x.x.x 或者 src x.x.x.x

    to x.x.x.x 或者 dst x.x.x.x

    可用的數(shù)據(jù)類型的關(guān)鍵詞:

    ip, ip6, arp, rarp, pppoed, pppoes,pppoe,broadcast,multicast,apple,decnet

    udp, tcp, icmp, icmp6, ah, esp

    greater length
          True if the packet is longer than length.

    less length
          True if the packet is shorter than length.

    net net

    # snoop from net 192.168.1.0 抓來自192.168.1.0/24的數(shù)據(jù)

    # snoop from net 192.168.0.0 抓來自192.168.0.0/16的數(shù)據(jù)

    port xx XX為TCP或者UDP的端口號或者 /etc/services里定義的名字

    #snoop to udp and port 53    抓到UDP53的數(shù)據(jù)

    posted @ 2008-10-21 21:30 Coolfiry 閱讀(723) | 評論 (0)編輯 收藏

    在項(xiàng)目使用CXF的過程中,遇到了有關(guān)List作為傳輸參數(shù)的時(shí)候,如果WebService端沒有明確給出List的泛型類型會報(bào)錯(cuò)。
    例如
    CXF的WebService端口接口的一個(gè)方法為為:
    1 public boolean updateMessageStatus(List batchIds);

    客戶端的的調(diào)用為:
    1 //預(yù)先初始化cxf對象cxfObj
    2 List<String> list=new ArrayList<String>();
    3 list.add("1");
    4 cxfObj.updateMessageStatus(list);


    在客戶端進(jìn)行調(diào)用WebService時(shí)會發(fā)生錯(cuò)誤,錯(cuò)誤為:unexpected element (uri:"", local:"arg0")等,據(jù)分析生成的wsdl,這是因?yàn)镃XF在進(jìn)行數(shù)據(jù)marshal時(shí)不知道要將要轉(zhuǎn)換的類型。

    解決辦法是:在WebService端的接口必須用List的泛型類型參數(shù),如:

    1 public boolean updateMessageStatus(List<String> batchIds);

    這樣就完全解決問題了。

    posted @ 2008-08-05 20:09 Coolfiry 閱讀(4956) | 評論 (1)編輯 收藏

    現(xiàn)在正在學(xué)習(xí)linux shell編程
    first.sh
    while read line
    do
            echo 
    "$line"
    done 
    <"$1"
    這是第一個(gè)shell程序小例子,就相當(dāng)于一個(gè)學(xué)習(xí)其他語言的hello world了吧。用法first.sh test,將test文件中的每一行輸出到stdout中。

    second.sh
    number=0;
    while [ "$number" -lt 100 ]
    do
            echo 
    "$number"
            number
    ='expr $number + 1'
    done
    echo
    這是第二個(gè)shell程序小例子,作用是輸出0到99的數(shù)字到stdout中。其中用到的expr的作用是使expr的參數(shù)轉(zhuǎn)化為數(shù)字并相加。兩個(gè)單引號的作用是引號所包圍的命令被命令的標(biāo)準(zhǔn)輸出替換,并輸出賦值給我number,得到了如同java中number=number+1的效果。


    posted @ 2008-07-20 20:34 Coolfiry 閱讀(587) | 評論 (2)編輯 收藏

    主站蜘蛛池模板: 亚洲成人动漫在线| 久香草视频在线观看免费| 破了亲妺妺的处免费视频国产| 老司机在线免费视频| 亚洲精品无AMM毛片| 老司机亚洲精品影视www| 免费国产污网站在线观看15 | 久久午夜夜伦鲁鲁片免费无码影视 | 亚洲日韩国产精品无码av| 国产亚洲精品免费| 国产精品白浆在线观看免费 | 羞羞漫画在线成人漫画阅读免费| 国内精自视频品线六区免费| 亚洲日本成本人观看| 亚洲精品无码永久中文字幕| 无限动漫网在线观看免费| 本免费AV无码专区一区| 亚洲一区二区三区高清在线观看| 久久久久国色AV免费观看性色| 亚洲成人黄色网址| 国产国拍亚洲精品福利| aa级一级天堂片免费观看| 三年片免费观看大全国语| 亚洲国产成人综合精品| 亚洲最新永久在线观看| 亚洲色偷偷综合亚洲AV伊人| 最近免费中文字幕视频高清在线看 | 亚洲国产精品一区二区久久| 亚洲AⅤ永久无码精品AA| 午夜性色一区二区三区免费不卡视频 | 国产又黄又爽胸又大免费视频| 亚洲综合图色40p| 午夜a级成人免费毛片| 免费人成网站在线观看不卡| 免费国产高清毛不卡片基地| 亚洲人成在线免费观看| 亚洲av无码一区二区三区网站| 亚欧免费无码aⅴ在线观看| 免费看黄网站在线看| 亚洲精品欧美综合四区| 亚洲国产成人va在线观看网址|