shell
UNIX命令解释器
Shell-UNIX命令解释器
问题引入:
DOS系统的命令由command负责执行,并且对重复性或多个命令运行可写成批处理文件,只要执行这个批处理文件就等於执行这些命令。UNIX系统如何处理?
Shell: shell是一种命令语言,同时又是一种程序设计语言。
UNIX系统利用shell命令解释器(command-language interpreter),完成用户输入命令的执行,是用户与系统交互的界面,是命令与kernel之间的接口。
shell接收用户输入的命令,对命令作出解释,然后发送给kernel执行之。
shell的另一个重要特性就是它自身是一个解释型的程序设计语言。
shell程序(脚本)相当于dos的批处理文件,可简单到只有一条命令,也可以包括大量循环、条件语句、数学运算、控制结构的程序,完成复杂的管理任务。
shell命令和UNIX程序的区别1
shell命令和UNIX程序都是系统的实用程序,但两者又有区别:
UNIX系统规定用户键入任何命令,均被shell所解释。
UNIX命令包括两种类型:
一种命令是shell内建的命令集。包含在kernal内部(就象DOS的内部命令)。如命
令pwd、history 。
另一种是存在于文件系统中某个目录下的实用或应用程序(utilities and application programs)。如命令cp、rm等。
系统管理员应该掌握命令的类型区别。
一旦注册用户登录到系统后,shell就被系统装入内存,并一直运行到用户退出系统之止;而一般UNIX命令仅当被调用时,才由系统装入内存执行
shell命令和UNIX程序的区别2
shell 执行命令时:
linux循环执行命令脚本step 1、shell 首先检查输入命令是内部命令,执行之。
step 2、对非内部命令,检查是否是一个程序。shell在搜索路径里寻该程序。直到到可执行程序文件,执行之。
shell的内部命令或应用程序将被分解为系统调用并传给Linux内核。
如果键入的命令:
(1)不是一个内部命令
(2)在路径里没有到程序
(3)程序不具备可执行的权限文件
将会显示一条错误信息。终止进程。
shell语言特点
shell允许通过编程来完成复杂的功能处理,但其作为语言与高级语言相比较具有不同的特点:
(1)shell是解释性的,多数高级语言是编译性的;
(2)shell语言与高级语言处理的对象不同;
(3)shell与系统有密切的关系;
(4)shell易编写、调试、灵活性较强,但速度低;
(5)shell作为命令级语言,命令组合功能很强。
Shell种类
UNIX操作系统具有多种 Shells种类,彼此不兼容。其中应用较多的有三种:Bourne shell (bash)
为 AT&T UNIX 环境而开发。是Solaris、Linux的缺省shell。
超级用户的提示符#,普通用户的提示符$
工作路径 /usr/bin/sh
Korn shell (ksh)
Bourne shell的一个超级。它增加了别名、历史记录以及命令行编辑等功能。
超级用户的提示符#,普通用户的提示符$
工作路径 /usr/bin/ksh
C shell (csh)
C shell的语法类似于C语言。
超级用户的提示符#,普通用户的提示符%
工作路径 /usr/bin/csh
bash的特点
(1)自动补全功能
对于要输入的命令很长,仅需输入开始的部分命令字符,再按一个Tab键,bash就会在可能的命令类中寻匹配的命令,到的话就会自动补齐。用户输入的字符越多,bash 搜寻匹配的命令就越容易到。
(2)命令行编辑程序
bash的命令行编辑是在提示符下,可对未执行的命令字符任意地修改,即使拼错了也不需要重新输入
整个命令,只需在执行命令前使用左右方向键移动光标,用backspace键或del键删除字符来编辑打错的命令,利用编辑功能纠正错误。
(3)命令历史(command history)
所谓的命令历史就是把曾经输入过的命令记录起来,方便查询与再使用。bash利用上、下键就可以显示和选择以前输入过的命令。
shell的启动
1.系统在用户登录时启动shell
系统引导过程中,需要调用login进程,负责验证用户身份,验证后把控制权交给shell 程序。shell根据环境文件建立系统范围内的工作环境和该用户自己的工作环境,最后显示命令提示符(#、$、%)。
在/etc/passwd文件中指定要启动的shell,如下所示:
root:x:0:0 :root:/root:/bin/bash
jobn:x:701:10 :Certer starf:/home/john:/bin/csh
2.命令行状态下的交互shell启动
在系统中可能有多种版本的shell存在,可通过相应的命令来启动,如:
$bsh
$ksh
$csh
3.执行用户命令时启动shell
由系统生成新的子shell来执行该命令。
管道与命令表
管道:
一个命令的标准输出是另一个命令的标准输入,不经过任何中间文件;
管道操作符:用符号“|”表示。
例: ps –ef | grep ftp
命令表:
由命令分隔符连接的命令序列。命令分隔符如下:
;表示按顺序执行命令;
command1;command2;command3
&&表示根据条件(true),执行其后的命令;
command1 &&command2
|| 表示根据条件(false),执行其后的命令;
command1 || command2
管道与命令表
例:$ ls –l /etc/rc
$ who|wc –l
$ ps
等价于$ ls –l /etc/rc ; who|wc –l ; ps
例:$ copy || echo UNIX has no such command!
UNIX has no such command!
$
例:$ who l grep liu || echo Liu is not logged in
Liu is not logged in
$
例:$ who l grep root && mail john < letter
root tty1 may 11 17:30
$
后台执行命令&
使用权限 : 所有使用者
使用方式 : command &
说明 : 系统在运行时,一条命令由一个进程执行。只有前一条命令的进程执行结束,才调度运行下一条命令进程。后台执行命令则无须当前命令运行结束,shell程序就开始执行新的命令(异步执行)。
例:
$ cc prog.c &
[1] 307
$ ls
dir1 dir2 dir3 dir4 dir5
[1] Done cc prog.c
$
反引号‘ ‘
使用权限 : 所有使用者
使用方式 : ‘command ‘
说明 : 反引号内的字符作为命令执行。
例:
$ each The current time is ‘ date ‘
The current time is May 15 17:43:23 2002
例:
$ each The current path is ‘ pwd ‘
The current path is /home/liu例:
$ each The current path is pwd
The current path is pwd
反引号’ ’
使用权限 : 所有使用者
使用方式 : ’command ’
说明 : 禁止单引号内的任何语法分析。
例:
$ each The current time is ‘ date ‘
The current time is May 15 17:43:23 2002
例:
$ each ’ The current time is ‘ date ‘ ’
The current time is ‘ date ‘
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论