2013年5月编程语言排行榜:UNIX下的Bash
| 2013-05-10 05:07
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