shell 脚本语法

shell解释器不仅可以直接运行脚本,而且为了支持脚本实现更复杂的功能,shell还提供了一系列的语法支持,比如支持选择程序结构if-else、支持循环程序结构while、for复合命令等,可以构建更复杂的逻辑功能。

复合命令

shell中,复合命令都有固定的结构,一般都是以shell保留的关键字开头,然后由与之对应的关键字结束,构成整个复合命令结构。如while循环的结构是:

while 条件判断; do 命令1; 命令2; done

逗号分隔符仅仅是起了分隔的作用,没有其他任何含义。为了让程序更加易读,结构更加清晰,在shell脚本中,while循环结构一般会写成下面的形式:

while 条件判断
do
    命令1
    命令2
done

除此之外,shell还提供了变量设置、数组、字符串、函数等功能,基本具备了编程语言的所有要素。所以说,shell其实也是一门编程语言。不同的shell解释器,由于其内部实现的不同,语法和使用可能各有差异,一般来讲Bash是兼容sh的语法的,zsh和Bash的语法是不兼容的,但zsh可以运行在仿真模式,来模拟Bash的运行。

shell 扩展

shell除了支持基本的语法外,还支持各种扩展。shell的强大,很大程度上得益于其扩展功能。通过变量扩展,你可以在命令中嵌入其他命令,在参数中嵌入其他命令,或者嵌入变量,插入路径匹配符。通过算术扩展,基本上在C语言中可以用到的运算符、算术运算,在shell都同样都可以用。shell常用的扩展方式主要有七种:

  • 大括号扩展:如 a{1,2,3}就相当于a1,a2,a3
  • 波浪号扩展:如~/.bashrc,就相当于$HOME/.bashrc
  • 参数和变量扩展:如 * 和 @,$* 表示传递给脚本和函数的所有参数
  • 命令替换:用命令的输出取代命令本身。如 $(命令)或`命令`
  • 算术扩展:如for ((i=0;i<100;i++)),实现跟C语言类似的for循环
  • 单词拆分:使用空格、tab键、新行将命令拆分为单词
  • 文件名扩展等:如模式匹配, *.c表示所有的C源文件

接下来的教程,将会以Bash为例,讲解shell脚本编程的常用语法及一些常用的扩展。

《Linux三剑客》视频教程:Linux下开发工具vim、Git、Makefile、autotools、qemu、debug精讲,从零开始一步一步写项目的Makefile,提供企业级Makefile模板,Git操作实战,vim从新手到高手,一步一步打造类似Source Insight的IDE!详情点击:王利涛老师个人淘宝店:Linux三剑客