2013年5月編程語言排行榜:UNIX下的Bash

jopen 11年前發布 | 15K 次閱讀 語言

2013 年 5 月 9 日,Tiobe 公司發布新一期編程語言排行榜。新一期榜單前 10 位沒有太多的變化,只是 Objective-C 與C++,Ruby 與 JavsScript 在互相交換位置罷了。今天我們要關注的是排在 TOP 20 后半部的一門語言——Bash。

        大家先請看本期 TOP20 榜單:

2013年5月編程語言排行榜:UNIX下的Bash

        從 2013 年 4 月的編程語言排行榜我們驚異的發現 Bash 這門 UNIX 下的殼語言,竟然有了飛速的上升。從第 34 位最高上升到第 13 位。究竟這門語言有什么獨特之處?

2013年5月編程語言排行榜:UNIX下的Bash

Bash 語言 2013 年以來的增長勢頭

        Bash 的誕生

        Bash 這個單詞的來源十分晦澀,它的名字是一系列縮寫:Bourne-Again SHell — 這是關于 Bourne shell(sh)的一個雙關語(Bourne again / born again)。

2013年5月編程語言排行榜:UNIX下的Bash

Bash 語言之父 Stephen R. Bourne

        Bash 是大多數 Linux 系統以及 Mac OS X v10.4 默認的 shell,它能運行于大多數 Unix 風格的操作系統之上,甚至被移植到了 Microsoft Windows 上的 Cygwin 系統中,以實現 windows 的 POSIX 虛擬接口。此外,它也被 DJGPP 項目移植到了 MS-DOS 上。

        Bash 是 Linux 的敲門磚,如果不懂 Bash 那其他東西就不用學習了。Linux 透過終端下達指令,都是通過 Bash 來執行。

        Bash 語法

        用 vi 編輯器編輯一個 hello 文件如下:

#!/bin/bash  
# This is a very simple example echo Hello World

        這樣最簡單的一個 BASH 程序就編寫完了。這里有幾個問題需要說明一下:

        一,第一行的 #! 是什么意思

        二,第一行的 /bin/bash 又是什么意思

        三,第二行是注釋嗎 

        四,echo 語句

        如何執行該程序呢?有兩種方法:一種是顯式制定 BASH 去執行:

        $ bash hello 或$ sh hello(這里 sh 是指向 bash 的一個鏈接,“lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh -> bash”)

        或者可以先將 hello 文件改為可以執行的文件,然后直接運行它,此時由于 hello 文件第一行的 "#! /bin/bash" 的作用,系統會自動用/bin/bash 程序去解釋執行 hello 文件的:

$ chmod u+x hello 
$ ./hello

        此處沒有直接 “$ hello”是因為當前目錄不是當前用戶可執行文件的默認目錄,而將當前目錄“.”設為默認目錄是一個不安全的設置。

        需要注意的是,BASH 程序被執行后,實際上 Linux 系統是另外開設了一個進程來運行的。

        Bash 命令行參數

        在使用 wget 的時候,我喜歡加上一個-c 的參數,這樣可以讓 wget 啟用斷點續傳功能。這里的-c 就是一個命令行參數。

        在寫c語言的時候,我們使用字符串數組存儲命令行參數,像我們所熟悉的 argv[]。當然我們也需要命令行參數的個數,這存儲在名為 argc 的整型變量中。argc 和 argv 是約定俗成的名稱,當然你可以使用自己的名稱作為 main 函數的形參。

        在編寫 Bash 腳本的時候,也同樣可以使用命令行參數。在 Bash 函數中也可以使用參數,特殊的是,Bash 中的函數是沒有參數列表的,例如 function foo

        這樣便完成了一個函數頭的定義,但是沒有任何的形參名稱,這是由于 Bash 中特殊的參數傳遞方法所致。

        這里需要說明的是,在 Bash 編程中命令行參數和函數的形參都采用統一的規則。

        Bash 的函數規則

        在 Bash 中,所有變量在賦值是賦值號左側直接寫變量名。而在引用變量的值時,變量名的左側需要加上$符號。寫過 PHP 腳本可能對此深有印象,不過 PHP 是賦值和引用都要寫。

        Bash 的參數是按照位置傳遞的,而且自動給出變量名稱,例如$1 就表示第一個參數,當然$2 就是第二個參數,參數之間用空格區分。這樣你可以順序寫到$n(n表示一個正整數),有幾個參數都可以按照順序引用。

        $0 表示當前運行命令的名稱,這個其實是特殊的參數,但是往往很少用到。

        如果你想得到參數的個數,它保存在一個特殊名稱的變量里,叫做$#。

        $*和$@表示所有的參數,具體區別和其他一些特殊參數請見這里。

        注:后面我們會用到一個$?參數,這表示上一條獨立命令運行的結果。我們才c語言寫程序的時候,常常以 return 0 作為程序正常退出的標志,這個 0 就被返回給 Bash,而$?可以引用到上一個程序運行的結果。還記得 Bash 函數的參數和命令行參數是相同的嗎?如果剛剛執行完一個 Bash 函數,$?里就保存著這個函數的運行結果,即 return 的值。

        Bash 學習資料(繁體版)http://linux.vbird.org/linux_basic/0320bash.php#bash

        Bash 相關資源下載:http://www.gnu.org/software/bash/

        前 10 名編程語言走勢圖

2013年5月編程語言排行榜:UNIX下的Bash

        20 到 50 名語言排行

Position Programming Language Ratings
21 MATLAB 0. 591%
22 SAS 0. 587%
23 Ada 0. 583%
24 R 0. 543%
25 ABAP 0. 501%
26 COBOL 0. 458%
27 Fortran 0. 419%
28 Scheme 0. 396%
29 Prolog 0. 326%
30 Haskell 0. 323%
31 Erlang 0. 315%
32 Common Lisp 0. 307%
33 Scratch 0. 303%
34 D 0. 301%
35 Scala 0. 300%
36 Logo 0. 282%
37 NXT-G 0. 243%
38 F# 0. 240%
39 Smalltalk 0. 237%
40 APL 0. 226%
41 Forth 0. 220%
42 ActionScript 0. 204%
43 ML 0. 204%
44 RPG (OS/400) 0. 178%
45 Awk 0. 162%
46 Tcl 0. 152%
47 PL/I 0. 149%
48 LabVIEW 0. 138%
49 Ladder Logic 0. 137%
50 JScript.NET 0. 136%

        下面是第 50 到 100 的編程語言排名

        (Visual) FoxPro, ABC, Agilent VEE, Algol, Alice, Apex, ATLAS, AutoLISP, bc, BlitzMax, C shell, CFML, CL (OS/400), Clarion, Clipper, Clojure, Dart, Dylan, Eiffel, Emacs Lisp, Fantom, Gambas, Go, Groovy, Heron, Icon, IDL, Informix-4GL, J, JavaFX Script, Lasso, LPC, MUMPS, Oberon, OCaml, Occam, OpenCL, Oz, Pike, PowerShell, REXX, S, sed, SPARK, thinBasic, VBScript, VHDL, WebDNA, xBase, XSLT

        數據來源:TIOBE

        注:TIOBE 編程語言社區排行榜是編程語言流行趨勢的一個指標,每月更新。這份排行榜排名基于互聯網上有經驗的程序員、課程和第三方廠商的數量。排名使用著名的搜索引 擎(諸如 Google、 MSN 、雅虎)以及 Wikipedia 和 油Tube 進行計算。請注意,這個排行榜只是反映某個編程語言的熱門程度,并不能說明一門編程語言好不好,或者一門語言所編寫的代碼數量多少。這個排行榜可以用來考 查你的編程技能是否與時俱進,也可以在開始開發新系統時選擇語言時用來進行策略性的決策。

來自: 51CTO
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!