snifer

【原创】Linux下Shell编程全解析

0
阅读(2928)

今天,我们从一个问题开始:

一台计算机要播放出”music”,需要些什么呢?


1、需要有“声卡芯片”硬件设备,否则怎么会有声音。

2、操作系统的核心可以支持这个芯片集,当然还需要提供芯片的驱动程序。

3、需要用户(就是你)输入发生声音的命令。

操作系统是一个系统资源的管理者与分配者,当有需求时,得向系统提出;从操作系统的角度来看,它也必须防止使用者因为错误的操作而造成系统的伤害。

 操作计算机,可以通过命令(command)或是程序(program)

程序有编译器(compiler)将程序转为计算机识别的二进制代码,可是命令呢?其实命令由输入设备读取,然后由命令解析器将其转为计算机可以了解的机器码,然后执行它。

Linux下命令解释器称为Shell,Shell是一种具备特殊功能的程序,它是介于使用者和 UNIX/Linux 操作系统之核心程序(kernel)间的一个接口。它接收用户输入的命令并把它送入内核去执行。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。

Linux系统提供多种不同的Shell以供选择。常用的有Bourne Shell(简称sh)、C-Shelll(简称csh)、Korn Shell(简称ksh)和Bourne Again Shell (简称bash)。----以下内容来自于教材。


(1)Bourne Shell是AT&T Bell实验室的 Steven Bourne为AT&T的Unix开发的,它是Unix的默认Shell,也是其它Shell的开发基础。Bourne Shell在编程方面相当优秀,但在处理与用户的交互方面不如其它几种Shell。

(2)C Shell是加州伯克利大学的Bill Joy为BSD Unix开发的,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。

(3)Korn Shell是AT&T Bell实验室的David Korn开发的,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。

(4)Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。

不论是哪一种Shell,它最主要的功用都是解译使用者在命令列提示符号下输入的指令。

当登录系统(login)时,一个交谈式的shell 会跟着起动,并提示您输入命令。在键入一个命令后,接着就是 shell 的工作了,它会进行:

1. 语法分析命令列

2. 处理万用字符(wildcards)、转向(redirection)、管线(pipes)与工作控制(job control)

3. 另外,shell 还管理档案输入输出及幕后处理(background processing)。在处理命令列之后,shell 会寻找命令并开始执行它们。

刚开始学UNIX/Linux系统时,大部份的时间会花在于提示符号(prompt)下执行命令


Shell 的另一个重要功用是提供个人化的使用者环境,这通常在 shell 的初始化档案中完成(.profile、.login、.cshrc、.tcshrc 等等)。这些档案包括了设定终端机键盘和定义窗口的特征;设定变量,定义搜寻路径、权限限、提示符号和终端机类形;以及设定特殊应用程序所需要的变量,例如窗口、文字处理程序、及程序语言的链接库。

知道了shell以后,我们来举例说明shell程序如何编写。

范例一:让变量 sum 进行 100+300+50 的加总结果
[root@linux ~]# sum=100+300+50
[root@linux ~]# echo $sum
100+300+50

[root@linux ~]# declare -i sum=100+300+50
[root@linux ~]# echo $sum
450

范例二:将 sum 变成环境变量
[root@linux ~]# declare -x sum

范例三:让 sum 变成唯读属性,不可更改(如需还原只能重启shell)
[root@linux ~]# declare -r sum
[root@linux ~]# sum=tesgting

-bash: sum: readonly variable 


使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):

# !/bin/bash

注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似。


符号#!用来告诉系统执行该脚本的程序,本例使用/bin/bash。编辑结束并保存后,如果要执行该脚本,必须先使其可执行:

chmod +x filename

此后在该脚本所在目录下,输入 ./filename 即可执行该脚本。

[root@localhost shell]# vi sh01.sh
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
 # History:
# 2011/09/13 XJM First release
echo -e "Hello World! \a \n"
exit 0


功能说明:显示文字。
语   法: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命令实现


就写这么多吧,这个是个奇妙的境界,欢迎每一位有志向的孩纸进入这扇大门。