第四章UNIX系统的shell_第1页
第四章UNIX系统的shell_第2页
第四章UNIX系统的shell_第3页
第四章UNIX系统的shell_第4页
第四章UNIX系统的shell_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、SHELL的基本功能;的基本功能;2、SHELL的种类;的种类;3、SHELL命令的解释过程;命令的解释过程;4、UNIX系统定义的标准流及重定向方法;系统定义的标准流及重定向方法;5、SHELL的环境变量及其设置方法;的环境变量及其设置方法;6、基本的系统配置文件;、基本的系统配置文件;7、SHELL变量的设置变量的设置vShell的基本功能的基本功能 命令的解释执行:接收用户的命令输入、解释命令的解释执行:接收用户的命令输入、解释分析命令含义、执行用户命令;分析命令含义、执行用户命令; 环境变量的设置:对用户工作环境进行修改和环境变量的设置:对用户工作环境进行修改和设定,根据规则选择和

2、设定相关的环境变量;设定,根据规则选择和设定相关的环境变量; 输入输入/输出的重定向管理:实现对系统标准流的输出的重定向管理:实现对系统标准流的修改;修改; Shell程序的设计:用户使用程序的设计:用户使用shell脚本语言完成脚本语言完成比较复杂的命令执行过程或用户环境设置过程。比较复杂的命令执行过程或用户环境设置过程。vBourne shell:AT&T公司开发的,标准的公司开发的,标准的unix shell,优点是简洁、快速,默认提示符优点是简洁、快速,默认提示符$;vC shell:Berkeley开发的,加了一些新的如开发的,加了一些新的如history、alias、作业控

3、制(、作业控制(job control)等功能,优点是易)等功能,优点是易于完成交互模式的作业,默认提示符于完成交互模式的作业,默认提示符%;vKorn shell: AT&T公司开发的,是公司开发的,是Bourne shell的的扩展,支持可编辑的历史记录操作、扩展,支持可编辑的历史记录操作、alias定义、正定义、正则表达式广义字符处理等,默认提示符则表达式广义字符处理等,默认提示符%。在在Linux中有一些改变,中有一些改变, Bourne shell称为称为bash、 C shell称为称为csh、 Korn shell称为称为ksh可执行文件存放的位置可执行文件存放的位置v默

4、认默认shell的概念的概念/ etc/passwd配置文件中设置配置文件中设置 如果只是希望临时设置其他如果只是希望临时设置其他shell作为解释器,则作为解释器,则通过命令调用,可直接启动其他通过命令调用,可直接启动其他shell解释器;解释器;例如,当前处于例如,当前处于bash,这时希望启动,这时希望启动ksh(csh)解释器,则直接输入命令解释器,则直接输入命令ksh(csh),系统将创),系统将创建一个新的子进程,在该子进程中运行建一个新的子进程,在该子进程中运行ksh,执行,执行完成后,可通过完成后,可通过exit命令退出该子进程。命令退出该子进程。vShell程序是系统与用户输

5、入命令的接口程序程序是系统与用户输入命令的接口程序 步骤步骤1:根据当前的:根据当前的shell类型向标准输出流输类型向标准输出流输出默认的出默认的shell提示符;提示符; 步骤步骤2:等待标准输入流传递来的信息,对收:等待标准输入流传递来的信息,对收到的信息进行解读和分析;到的信息进行解读和分析; 步骤步骤3:根据命令分析结果转向不同的命令程:根据命令分析结果转向不同的命令程序执行入口;序执行入口; 步骤步骤4:命令执行结束,返回步骤:命令执行结束,返回步骤1。v信息流的概念信息流的概念 在操作系统中,将命令处理过程看作在操作系统中,将命令处理过程看作“加工加工”过程,将加工输入的信息和加

6、工输出的信息过程,将加工输入的信息和加工输出的信息看作信息流。看作信息流。vUNIX系统对信息流的标准定义系统对信息流的标准定义0标准输入流标准输入流键盘键盘1标准输出流标准输出流显示器显示器2标准错误流标准错误流显示器显示器vshell的重定向操作符,可以改变命令获取获取输入的重定向操作符,可以改变命令获取获取输入/输出的地方,也就是对系统默认信息流的标准定义输出的地方,也就是对系统默认信息流的标准定义进行修改。进行修改。v标准输入重定向的例子:标准输入重定向的例子:v标准输出重定向的例子:标准输出重定向的例子:rootstu1 unix_2010# cat test_cuthello, w

7、elcome to the linux world!rootstu1 unix_2010# cat 0 test_cutrootstu1 unix_2010# ls 1 test_cut演示演示v标准错误重定向标准错误重定向 错误信息默认的输出是显示器,如果希望将结果错误信息默认的输出是显示器,如果希望将结果重定向到某个文件,则需要特别指出重定向到某个文件,则需要特别指出例如:编译一个错误的例如:编译一个错误的hello.c文件,标准输出为文件,标准输出为rootstu1 unix_2010# gcc -o hello hello.chello.c: In function main:hell

8、o.c:9: syntax error before return若希望将错误信息重新定位到若希望将错误信息重新定位到debug文件,文件,则需要输入的命令是则需要输入的命令是rootstu1 unix_2010# gcc -o hello hello.c 2debugv课程意见反馈课程意见反馈 没有参考书,无法预习和复习:以没有参考书,无法预习和复习:以PPT为主线,为主线,我会尽可能在本次课的时候将下一次课的课件我会尽可能在本次课的时候将下一次课的课件放到课程网站;放到课程网站; 内容比较散:我会尽可能综合成一条主线索内容比较散:我会尽可能综合成一条主线索 示例演示太快:放慢演示速度,增加

9、互动示例演示太快:放慢演示速度,增加互动 板书字太小、声音较小板书字太小、声音较小 PPT没有趣味性没有趣味性欢迎大家随时提出意见,比如说没有改欢迎大家随时提出意见,比如说没有改正好的意见,或者一些方式上的建议正好的意见,或者一些方式上的建议vShell的环境变量:用户的环境变量:用户进入系统后,对用户工进入系统后,对用户工作产生影响并且可以被作产生影响并且可以被修改的参量;修改的参量;vwindows系统下面也有类系统下面也有类似的变量似的变量以前学过的环境变量以前学过的环境变量PATH、HOMEv设置环境变量:设置环境变量:v引用环境变量引用环境变量 :$变量名变量名export 变量名变

10、量值变量名变量值说明:通过说明:通过export修改变量值是暂时的,如修改变量值是暂时的,如果希望永久改变则需要修改果希望永久改变则需要修改.profile文件文件rootstu1 unix_2010# PATH=/rootstu1 unix_2010# export PATHrootstu1 unix_2010# echo $PATH/v常用环境变量常用环境变量 HOME变量:用户宿主目录的完整路径变量:用户宿主目录的完整路径rootstu1 root# echo $HOME/rootrootstu1 root# HOME=“/“rootstu1 root# cdrootstu1 /#可以用

11、可以用env命令对当前设置的环境变量进行查看命令对当前设置的环境变量进行查看v常用环境变量常用环境变量 PATH变量变量:设置命令搜索路径:设置命令搜索路径rootstu1 unix_2010# echo $PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/ns/ns2/bin# PATH=$PATH:/PATH变量指向路径的添加变量指向路径的添加v常用环境变量常用环境变量 PS1变量变量:

12、设置作为命令提示符的字符串:设置作为命令提示符的字符串 PS2变量变量:设置作为命令提示符的字符串,该提:设置作为命令提示符的字符串,该提示符在用户尚未键入完整命令前按下回车键示符在用户尚未键入完整命令前按下回车键后显示的提示符。后显示的提示符。rootstu1 unix# PS1=MJLIU:MJLIU: echo $PS1MJLIU:MJLIU: PS1=uh W$ v常用环境变量常用环境变量 SHELL变量变量:设置用户登录:设置用户登录shell所运行的所运行的shell解释程序;解释程序; TERM变量变量:设置用户终端类型:设置用户终端类型rootstu1 root# echo $

13、SHELL/bin/bashrootstu1 root# echo $TERMxtermv系统配置文件:所有的系统配置文件:所有的shell配置文件都保存在配置文件都保存在/etc目录中,包括:目录中,包括:bashrc、profile以及以及/etc/profile.d目录中的脚本文件目录中的脚本文件/ etc/bashrc:设定别名和一些其它的功能,该文件设定:设定别名和一些其它的功能,该文件设定了了umask的数值,该参数决定了新创建的文件的默认权的数值,该参数决定了新创建的文件的默认权限,另外还设定了命令行下的提示符。限,另外还设定了命令行下的提示符。/ etc/profile:用于设

14、定系统环境,设定:用于设定系统环境,设定PATH、USER、LOGNAME、MAIL、HOSTNAME、HISTSIZE以及以及INPUTRC变量变量, 以及最后运行以及最后运行/etc/profile.d目录中的脚目录中的脚本文件。本文件。/ etc/profile.d:一个包含若干用:一个包含若干用bash语言写的语言写的shell脚本脚本文件的目录,这些脚本文件由文件的目录,这些脚本文件由/etc/profile启动运行。启动运行。v在在/etc/profile文件中增加语句文件中增加语句echo welcome to the Linux world!请同学上台演示请同学上台演示v用户的

15、配置文件用户的配置文件./ bash_profile:用户可使用该文件设置专用于:用户可使用该文件设置专用于自己的自己的shell信息,该文件仅在用户登录时执行一信息,该文件仅在用户登录时执行一次!默认情况下次!默认情况下,它设置一些环境变量,执行用它设置一些环境变量,执行用户的户的.bashrc文件;文件;./ bashrc:该文件包含专用于用户的:该文件包含专用于用户的shell信息信息, 每当启动一个新的窗口时该文件被读取;每当启动一个新的窗口时该文件被读取;./ bash_logout:当每次退出系统:当每次退出系统(退出退出bash shell)时时,执行该文件执行该文件v注意事项注

16、意事项/ etc/profile等系统配置文件中设定的变量可以作等系统配置文件中设定的变量可以作用于用于,而,而/.bash_profile等用户配置文等用户配置文件中设定的变量只能作用于件中设定的变量只能作用于; 用户登录时首先执行用户登录时首先执行/etc/profile等系统配置文件,等系统配置文件,然后执行然后执行/.bash_profile等用户配置文件,因此等用户配置文件,因此当两个文件中的变量定义有冲突时,最后有效的当两个文件中的变量定义有冲突时,最后有效的是用户配置文件中的定义;是用户配置文件中的定义;实例:实例:/etc/profile文件中定义文件中定义PATH=/root

17、, /.bash_profile文件中定义文件中定义PATH=$PATH:/root/unix_2010,则则echo $PATH=?v注意事项注意事项./ bash_profile文件仅在用户登录时执行,文件仅在用户登录时执行,而而.bashrc文件是每次打开新窗口的时候运行,如文件是每次打开新窗口的时候运行,如果修改了果修改了/.bash_profile文件中的变量,为了使文件中的变量,为了使其立即产生作用,需执行以下命令其立即产生作用,需执行以下命令source 文件名文件名rootstu1 root# source .bash_profile/.bash_profile 是交互式、是交

18、互式、login 方式进入方式进入 bash 运行运行echo welcome to my super duper unixTERM=ansiPS1=MJLIUexport TERM PS1calduv重定向重定向 标准输入(标准输入(0)、标准输出()、标准输出(1)、标准错误输出)、标准错误输出(2)、定向文件()、定向文件(/dev/null)、)、2&1v环境变量:环境变量: 变量设置方法、读取方法、作用域范围变量设置方法、读取方法、作用域范围(export)、常用变量常用变量HOME/PATH/PS1/SHELLv系统配置文件系统配置文件/ etc/bashrc、/etc/p

19、rofile、/etc/logoutv用户配置文件用户配置文件./ bash_profile、/.bashrc、/.bash_logoutv下列语句的含义是什么下列语句的含义是什么v现有现有shell脚本程序脚本程序/root/frog,希望任何用户在任何,希望任何用户在任何目录下都能直接运行目录下都能直接运行frog程序,则需要完成的操作程序,则需要完成的操作0 3 * * * root tar czf /usr/local/daily/etc.tar.gz /etc /dev/null 2&1 vshell变量的类型:字符串类型变量的类型:字符串类型v设置变量:设置变量:v引用变量

20、:引用变量:v清除变量:清除变量:v查看变量:查看变量:设置变量的示例:设置变量的示例:a=helloa=100a=“hello world”引用变量示例:引用变量示例:echo “a=$a”清除变量:清除变量:unset ashell将所赋的每个值都当作字符串,如果串将所赋的每个值都当作字符串,如果串中含有空白字符,应用中含有空白字符,应用“”“”括起来括起来rootstu1 no8# a=-ilrootstu1 no8# ls $a262345 -rwxr-r- 1 root root 326 2009-04-04 1.sh变量作为命令的一部分变量作为命令的一部分注意:变量名由下划线(注意

21、:变量名由下划线(_)、字母、数字组成,)、字母、数字组成,v局部变量和全局变量局部变量和全局变量 局部变量:只作用于当前为它赋值的局部变量:只作用于当前为它赋值的shell进程,进程,对其他各个子对其他各个子shell进程不产生影响;进程不产生影响; 全局变量:经过全局变量:经过 export 命令输出的变量对当前命令输出的变量对当前shell的各个子的各个子shell、以及子、以及子shell的子的子shell起作用。起作用。例如:例如:$ PATH=$PATH:./ ; export PATH注意:注意:export后面的变量名前不加后面的变量名前不加$符号;符号;经经export输出给

22、子输出给子shell的变量如果在子的变量如果在子shell中中被修改被修改, 则只影响子则只影响子shell, 不影响父不影响父shell; 如果在如果在子子shell中被输出中被输出,则只影响子则只影响子shell的子的子shell;1. export命令常用在命令常用在.profile文件中。文件中。rootstu1 no8# ux=UNIXrootstu1 no8# echo $uxUNIXrootstu1 no8# bashrootstu1 no8# echo $ux rootstu1 no8# exitrootstu1 no8# export uxrootstu1 no8# bash

23、rootstu1 no8# echo $uxUNIXv变量置换变量置换如果设置了参数变量,则用参数的值置如果设置了参数变量,则用参数的值置换变量的值,否则用换变量的值,否则用wordword置换。即这种置换。即这种变量的值等于某一个参数的值,如果该变量的值等于某一个参数的值,如果该参数没有设置,则变量就等于参数没有设置,则变量就等于wordword的值。的值。a=/home/stuword=/rootdir=$a:-$wordecho dir=$dir a=$a word=$word演示演示v变量置换变量置换如果设置了参数变量,则用参数的值置如果设置了参数变量,则用参数的值置换变量的值,否则把

24、变量设置成换变量的值,否则把变量设置成wordword,。注意,位。注意,位置参数不能用于这种方式,因为在置参数不能用于这种方式,因为在shellshell程序中不能为位置参数赋值。程序中不能为位置参数赋值。#a=/home/stuword=/rootdir=$a:=$wordecho dir=$dir a=$a word=$wordv变量置换变量置换如果设置了参数变量,则用参数的值置换变如果设置了参数变量,则用参数的值置换变量的值,量的值,否则就显示否则就显示wordword并从并从shellshell中退出中退出,如果省略了如果省略了wordword,则显示标准信息。这种变,则显示标准信息

25、。这种变量要求一定等于某一个参数的值。如果该参量要求一定等于某一个参数的值。如果该参数没有设置,就显示一个信息,然后退出,数没有设置,就显示一个信息,然后退出,因此这种方式常用于出错指示。因此这种方式常用于出错指示。word=/rootdir=$a?$wordecho dir=$dir a=$a word=$wordrootstu1 unix_2010# ./zhihuan.sh./zhihuan.sh: line 28: a: /rootv变量置换变量置换如果设置了参数,则用如果设置了参数,则用wordword置置换变量,否则不进行置换。换变量,否则不进行置换。 示例演示示例演示a=/hom

26、e/stuword=/rootdir=$a:+$wordecho dir=$dir a=$a word=$wordv由由shell在程序运行时设置在程序运行时设置v共共10个变量,从程序名开始依次为个变量,从程序名开始依次为0-9$0$1 $2$3 请大家尝试写出请大家尝试写出sharg.sh的代码的代码$0当前当前shell程序的名字程序的名字$1 $9命令行上的第一到第九个参数命令行上的第一到第九个参数$# 命令行上的参数个数命令行上的参数个数$* 命令行上的所有参数命令行上的所有参数$ 分别用双引号引用命令行上的所有参数分别用双引号引用命令行上的所有参数$ 当前进程的进程标识号当前进程的

27、进程标识号(PID)$? 上一条命令的退出状态上一条命令的退出状态$! 最后一个后台进程的进程标识号最后一个后台进程的进程标识号 rootstu1 no8# echo aa bb cc dd $aa bb cc dd 4251当前进程的进程标识号当前进程的进程标识号rootstu1 no8# cat file1 file2 file3 2errlogrootstu1 no8# echo $?1非非0 0表示命令运行失败,错误信息表示命令运行失败,错误信息errlogerrlog文件中文件中rootstu1 no8# ./1_shell.sh 1 2 3 helloThe following is output of the ./1_shell.sh script:Total number of command lin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论