2013年5月程式語言排行榜:UNIX下的Bash
2013年5月9日,Tiobe公司釋出新一期程式語言排行榜。新一期榜單前10位沒有太多的變化,只是Objective-C與C++,Ruby與JavsScript在互相交換位置罷了。今天我們要關注的是排在TOP 20後半部的一門語言——Bash。
大家先請看本期TOP20榜單:
Position May 2013 | Position May 2012 | Delta in Position | Programming Language | Ratings 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位。究竟這門語言有什麼獨特之處?
Bash語言2013年以來的增長勢頭
Bash的誕生
Bash這個單詞的來源十分晦澀,它的名字是一系列縮寫:Bourne-Again SHell — 這是關於Bourne shell(sh)的一個雙關語(Bourne again / born again)。
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名程式語言走勢圖
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% |
原文:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
譯文:http://developer.51cto.com/art/201305/392833.htm
相關文章
- 本文幫你在 Unix 下玩轉 C 語言
- Bash 和 Python 程式語言優缺點分析Python
- 扒一扒程式語言排行榜
- 2021 程式語言排行榜出爐!C#年度語言獎C#
- python是如何登上程式語言排行榜榜首的Python
- StackOverflow最不喜歡的程式語言排行榜 - Oreilly
- 2018年11月程式語言排行榜
- 程式語言 PYPL 指數排行榜_2019.09
- 程式語言 PYPL 指數排行榜_2019.08
- 程式語言安全性排行榜:Ruby最佳,C語言漏洞最多?C語言
- Stack Overflow:2019全球程式語言高薪排行榜高薪
- TIOBE:2020年4月全球程式語言排行榜 少兒程式語言Scratch入圍
- TIOBE:2018年5月全球程式語言排行榜
- TIOBE:2019年12月全球程式語言排行榜
- TIOBE:2019年11月全球程式語言排行榜
- 全球程式語言薪資排行榜(Stack Overflow)_2019.08
- 2014年6月 TIOBE 程式語言排行榜單
- Python崛起,TIOBE程式語言排行榜再創新高!Python
- IEEE Spectrum :2021年度程式語言排行榜
- 最新!2020年10月程式語言排行榜出爐
- 2020年4月中國程式語言排行榜
- 2020年2月中國程式語言排行榜
- 程式設計師福布斯排行榜,看你學的語言排第幾?程式設計師
- TIOBE 5 月程式語言排行榜:暴漲的 C,逆襲的 Scala
- TIOBE程式語言排行榜2019年 Python穩居前三Python
- 4月TIOBE程式語言排行榜來了!這些程式語言教程限時送
- 函數語言程式設計下的Iterator模式函數程式設計模式
- Linux下C語言驗證多程式LinuxC語言
- TIOBE:2020年11月最受歡迎程式語言排行榜 Python超越Java成第二最受歡迎程式語言PythonJava
- 這些程式語言薪資比較高 位居排行榜之首
- 2019年11月中國大陸程式語言排行榜
- TIOBE:2020年9月程式語言排行榜 C++增速最快C++
- 使用crul庫和R語言的下載器程式R語言
- 聊聊C語言/C++—程式和程式語言C語言C++
- TIOBE 2月程式語言排行榜:Python逼近C,Groovy重回TOP 20Python
- TIOBE公佈11月程式語言排行榜,Go挺進前十!Go
- C語言:一種高效、易學的程式語言C語言
- 程式語言的變遷
- 函數語言程式設計瞭解一下(下)函數程式設計