*Shell是什么?
任何发明都具备供用户使用的界面。UNIX供用户使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要强大的多)。 Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。
为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。
1.UNIX内核和Shell的交互方法
启动UNIX时,程式UNIX(内核)将被调入电脑内存,并一直保留在内存中直到机器关闭。在引导过程中,程式 init将进入后台运行一直到机器关闭。该程式查询文档/etc/inittab,该文档列出了连接终端的各个端口及其特征。当发现一个活动的终端时,init程式调用getty程式在终端上显示login等登陆信息。(username和passwd),在输入密码后, getty调用login进程,该进程根据文档/etc/passwd的内容来验证用户的身份。若用户通过身份验证,login进程 把用户的home目录配置成当前目录并把控制交给一系列setup程式。setup程式能够是指定的应用程式,通常setup程式 为一个Shell程式,如:/bin/sh 即Bourne Shell(command出来了,呵呵)。
得到控制后,Shell程式读取并执行文档/etc/.profile连同.profile。这两个文档分别建立了系统范围内的和 该用户自己的工作环境。最后Shell显示命令提示符,如$。(这是以bsh为例,若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等)
注
不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或 config.sys文档) 当shell退出时,内核把控制交给init程式,该程式重新启动自动登陆过程。有两种方法使shell退出,一是用户执行exit命令,二是 内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后,内核回收用户及程式使用的资源。
用户登陆后,用户命令同电脑交互的关系为:命令进程--->Shell程式--->UNIX内核--->电脑硬件。当用户输入一个命令,如$ls, Shell将定位其可执行文档/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程式执行完毕后,内核取消 该子进程并把控制交给其父进程,即Shell程式。例如执行:
$ps
该命令将会列出用户正在执行的进程,即Shell程式(下来周详说说,别急现在)和ps程式。若执行:
$sleep 10 &
$ps
其中第一条命令将产生一个在后台执行的sleep子进程。ps命令执行时会显示出该子进程。
每当用户执行一条命令时,就会产生一个子进程。该子进程的执行和其父进程或Shell完全无关,这样能够使Shell去做其他工作。(Shell只是把用户的意图告诉内核,然后该干嘛干嘛
) 现在windows有个计划任务(在固定的时间,日期自动执行某任务),其实UNIX很早就有这个功能了,也就是所谓的Shell的自动执行。一些UNIX 资源,如cron能够自动执行Shell程式而无需用户的参和,(这个功能好象在/var/spool/crotab目录里)。 Crontab 程式对于系统管理员来说是很有用的。Cron 服务用于计划程式在特定时间(月、日、周、时、分)运行。我们以root的crontab 为例。根用户的 crontab 文档放在 /var/spool/crontab/root 中,其格式如下:(1) (2) (3) (4) (5) (6)
0 0 * * 3 /usr/bin/updatedb
1. 分钟 (0-60)
2. 小时 (0-23)
3. 日 (1-31)
4. 月 (1-12)
5. 星期 (1-7)
6. 所要运行的程式
2.Shell的功能和特点
1>命令行解释
2>使用保留字
3>使用Shell元字符(通配符)
4>可处理程式命令
5>使用输入输出重定向和管道
6>维护一些变量
7>运行环境控制
8>支持Shell编程
对于"命令行解释"就不多说了,就是在shell提示符(例如:"$","%","#"等)后输入一行unix命令,Shell将接收用户的输入。
"使用保留字":Shell有一些具备特别意义的字,例如在Shell脚本中,do,done,for等字用来控制循环操作,if,then等控制条件操作。 保留字随Shell环境的不同而不同。
"通配符":* 匹配任何位置
? 匹配单个字符
[] 匹配的字符范围或列表 例如:
$ls [a-c]*
将列出以a-c范围内字符开头的任何文档
$ls [a,m,t]*
将列出以e,m或t开头的任何文档
"程式命令" :当用户输入命令后,Shell读取环境变量$path(一般在用户自己的.profile中配置),该变量包含了命令可执行文档可能存在的目录列表。 shell从这些目录中寻找命令所对应的可执行文档,然后将该文档送给内核执行。
"输入输出重定向及管道" :重定向的功能同DOS的重定向功能:
">" 重定向输出
"<" 重定向输入
而管道符号,是unix功能强大的一个地方,符号是一条竖线:"|",用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command 2的输入传给command 2,例如:
$ls -s|sort -nr|pg
该命令列出当前目录中的任何文档,并把输出送给sort命令作为输入,sort命令按数字递减的顺序把ls的输出排序。然后把排序后的 内容传送给pg命令,pg命令在显示器上显示sort命令排序后的内容。
"维护变量" :Shell能够维护一些变量。变量中存放一些数据供以后使用。用户能够用"="给变量赋值,如:
$lookup=/usr/mydir
该命令建立一个名为lookup的变量并给其赋值/usr/mydir,以后用户能够在命令行中使用lookup来代替/usr/mydir,例如:
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




