2013年5月编程语言排行榜:UNIX下的Bash

jopen 12年前

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