Linux下命令解释器称为ShellShell是一种具备特殊功能的程序它是介于使用者和UNIX/Linux操作系统之核心程序(kernel)间的一个接口它接收用户输入的命令并把它送入内核去执行不仅如此Shell有自己的编程语言用于对命令的编辑它允许用户编写由shell命令组成的程序Shell编程语言具有普通编程语言的很多特点比如它也有循环结构和分支控制结构等用这种编程语言编写的Shell程序与其他应用程序具有同样的效果
Linux系统提供多种不同的Shell以供选择常用的有BourneShell(简称sh)CShelll(简称csh)KornShell(简称ksh)和BourneAgainShell(简称bash)以下内容来自于教材
()BourneShell是AT&TBell实验室的StevenBourne为AT&T的Unix开发的它是Unix的默认Shell也是其它Shell的开发基础BourneShell在编程方面相当优秀但在处理与用户的交互方面不如其它几种Shell
()CShell是加州伯克利大学的BillJoy为BSDUnix开发的与sh不同它的语法与C语言很相似它提供了BourneShell所不能处理的用户交互特征如命令补全命令别名历史命令替换等但是CShell与BourneShell并不兼容
()KornShell是AT&TBell实验室的DavidKorn开发的它集合了CShell和BourneShell的优点并且与BourneShell向下完全兼容KornShell的效率很高其命令交互界面和编程交互界面都很好
()BourneAgainShell(即bash)是自由软件基金会(GNU)开发的一个Shell它是Linux系统中一个默认的ShellBash不但与BourneShell兼容还继承了CShellKornShell等优点
不论是哪一种Shell它最主要的功用都是解译使用者在命令列提示符号下输入的指令
当登录系统(login)时一个交谈式的shell会跟着起动并提示您输入命令在键入一个命令后接着就是shell的工作了它会进行
语法分析命令列
处理万用字符(wildcards)转向(redirection)管线(pipes)与工作控制(jobcontrol)
另外shell还管理档案输入输出及幕后处理(backgroundprocessing)在处理命令列之后shell会寻找命令并开始执行它们
刚开始学UNIX/Linux系统时大部份的时间会花在于提示符号(prompt)下执行命令
Shell的另一个重要功用是提供个人化的使用者环境这通常在shell的初始化档案中完成(profilelogincshrctcshrc等等)这些档案包括了设定终端机键盘和定义窗口的特征设定变量定义搜寻路径权限限提示符号和终端机类形以及设定特殊应用程序所需要的变量例如窗口文字处理程序及程序语言的链接库
知道了shell以后我们来举例说明shell程序如何编写
范例一让变量sum进行++的加总结果
[root@linux~]#sum=++
[root@linux~]#echo$sum
++
[root@linux~]#declareisum=++
[root@linux~]#echo$sum
使用任意一种文字编辑器比如geditkeditemacsvi等来编写shell脚本它必须以如下行开始(必须放在文件的第一行)
#!/bin/bash
…
注意最好使用!/bin/bash而不是!/bin/sh如果使用tcshell改为tcsh其他类似
符号#!用来告诉系统执行该脚本的程序本例使用/bin/bash编辑结束并保存后如果要执行该脚本必须先使其可执行
chmod+xfilename
此后在该脚本所在目录下输入/filename即可执行该脚本
[root@localhostshell]#vishsh
#!/bin/bash
#Program:
#Thisprogramshows"HelloWorld!"inyourscreen
#History:
#//XJMFirstrelease
echoe"HelloWorld!\a\n"
exit
功能说明显示文字
语法echo[ne][字符串]或echo[help][version]
补充说明echo会将输入的字符串送往标准输出输出的字符串间以空白字符隔开并在最后加上换行号
参数n不要在最后自动换行
e若字符串中出现以下字符则特别加以处理而不会将它当成一般
文字输出
\a发出警告声
\b删除前一个字符
\c最后不加上换行符号
\f换行但光标仍旧停留在原来的位置
\n换行且光标移至行首
\r光标移至行首但不换行
\t插入tab
\v与\f相同
\\插入\字符
\nnn插入nnn(八进制)所代表的ASCII字符
–help显示帮助
–version显示版本信息
简单shell程序(脚本一)使用Shell命令实现