Bomi
分类: 系统运维
2012-02-05 00:48:26
Shell是一种特殊的程序,它是用户和UNIX体系结构的操作系统“心脏”之间的接口。它本身也是一个工具程序,在用户登陆系统后启动。它解释并运行由命令行或脚本文件输入的命令,从而实现用户与内核的交互。
当用户登陆成功,系统会启动一个交互式的shell来提示用户输入指令。用户键入命令后,shell开始执行任务:先解析命令行,再处理通配符、重定向、管道和作业控制,然后查找命令,找到后开始执行。
UNIX系统大都支持3种主流的shell,分别是:Bourne shell,C shell和Korn shell。交互式运行时,这三种shell很相似,但是作为脚本语言,他们在语法和效率上有一定的区别。由于篇幅有限,在这里我就不做过多解释了。
shell的作用:
1.读取输入并解释命令行
2.使用保留字和替换特殊字符,如通配符和历史命令符
3.设置管道、重定向和后台处理
4.可处理程序命令
5.维护一些变量和进行环境控制
6.支持shell编程
看到这里,我想各位读者也觉得shell是一个包含大量内容的技术,用一篇文章肯定说不完,那么这篇文章就作为一个开头,介绍一些概念性的东西,我会在随后的文章里继续撰写关于shell的内容。
同样,Solaris也是UNIX体系结构的操作系统,也支持shell。那么我通过下面一个小例子来给大家一个直观的印象,看看什么是shell。当然,这只是shell的极小部分内容。
首先创建一个空白脚本文件:$touch check.sh
为该文件添加执行权限: $chmod +x check.sh
用VI编辑该文件: $vi check.sh
然后在文件里添加如下命令行:
#!/bin/bash
for i in aaa bbb ccc ddd eee
do
FILENAME=$i".dat"
echo "checking" $FILENAME
if test -s $FILENAME
then
echo $FILENAME"has 0 length"
else
echo $FILENAME "is OK"
fi
done
$./check.sh
整个程序的作用是:使用For循环产生一系列文件名(循环了5次),然后用test工具来检查这些文件名,以确定他们是否空文件。如果是就打印“XXX has 0 length”,否则就打印“XXX is OK”。
现在对该脚本逐行解释
1.告诉内核正在运行的是一个Bourne shell脚本
2.循环5次,分别用变量i取文件名aaa(第一次循环),bbb(第二次循环)……
3.执行
4.用FILENAME取带后缀“.dat”的文件名,如FILENAME=aaa.dat(第一次循环)
5.打印,例如输出“checking aaa.dat”
6.if语句,用test关键字去检测aaa.dat文件。
7和8.如果是空文件,就输出“aaa.dat has 0 length”
9和10.如果不是,则输出“aaa.dat is OK”
11.if结束
12.执行结束
以上是以第一个aaa.dat文件为例的,其他的道理也一样。