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

發表於2013-05-10

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

  大家先請看本期TOP20榜單:

Position
May 2013
Position
May 2012
Delta in PositionProgramming LanguageRatings
May 2013
Delta
May 2012
Status
1 1 C 18.729% +1.38%   A
2 2 Java 16.914% +0.31%   A
3 4 Objective-C 10.428% +2.12%   A
4 3 C++ 9.198% -0.63%   A
5 5 C# 6.119% -0.70%   A
6 6 PHP 5.784% +0.07%   A
7 7 (Visual) Basic 4.656% -0.80%   A
8 8 Python 4.322% +0.50%   A
9 9 Perl 2.276% -0.53%   A
10 11 Ruby 1.670% +0.22%   A
11 10 JavaScript 1.536% -0.60%   A
12 12 Visual Basic .NET 1.131% -0.14%   A
13 15 Lisp 0.894% -0.05%   A
14 18 Transact-SQL 0.819% +0.16%   A
15 17 Pascal 0.805% 0.00%   A
16 24 Bash 0.792% +0.33%   A
17 14 Delphi/Object Pascal 0.731% -0.27%   A
18 13 PL/SQL 0.708% -0.41%   A
19 22 Assembly 0.638% +0.12%   B
20 20 Lua 0.632% +0.07%   B

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

https://i.iter01.com/images/156cf612513de61e71ec45129509a259be3ef2247e40a52b27187be779139990.jpg

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

Bash的誕生

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

https://i.iter01.com/images/8edb4dc557439bb95fc5fed5cb2dfdc3147a3e3aeadd26f1b9100382b1554723.jpg

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的值。

前10名程式語言走勢圖

20到50名語言排行

PositionProgramming LanguageRatings
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%

原文:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

譯文:http://developer.51cto.com/art/201305/392833.htm

相關文章