第14讲shell交互功能和变量主要内容一.简介二.Shell的启动和建立三.shell命令行形式四.Shell环境五.shell变量六.Shell的内部命令第14讲shell交互功能和变量一.简介shell是UNIX系统中最重要的程序之一,它具有两大功能:•命令解释器解释执行所有的用户命令•程序设计语言具有高级语言的所有功能shell有两种主要语法类型:Bourneshell和Cshell,彼此不兼容。•Bourneshell家族:shkshbashpshzsh;•Cshell家族:cshtcsh。其中bash和zsh在不同程度上支持csh的语法Bash特点Bash是大多数Linux系统的默认Shell。Bash有以下的优点:1)补全命令。在Bash命令提示符下输入命令或程序名时,若没有输全命令或程序名,按“Tab”键,Bash将自动补全命令或程序名。2)通配符。在Bash下可以使用通配符“*”和“?”。“*”可以替代多个字符,而“?”则替代一个字符。3)历史命令。Bash能自动跟踪用户每次输入的命令,并把输入的命令保存在历史列表缓冲区中。4)别名。在Bash下,可用alias和unalias命令给命令或可执行程序起别名和删除别名,这样就可以用自己习惯的方式输入命令。5)输入/输出重定向。输入重定向用于改变命令的输入,输出重定向用于改变命令的输出例:输入重定向。$wc/etc/passwd2023726/etc/passwd分别显示行数、字数、字节数和文件名。例:输出重定向。$lsdir.out上面命令将ls命令的输出保存为文件dir.out。$lsdir1.out6)管道。管道用于将一系列的命令连接起来,也就是把前面命令的输出作为后面命令的输入。管道的命令是“|”。管道的功能和用法与DOS/Windows系统的完全相同。例:$catdir.out|greptest|wc–l7)提示符。Bash有两级提示符。第一级提示符就是登录Shell时见到的,默认为“$”。可以通过重新给PS1变量赋值来改变第一级提示符。当Bash需要进一步提示以便补全命令时,它会显示第二级提示符。第二级提示符默认为“”,可以通过重新给PS2变量赋值来改变第二级提示符。一些特殊意义的字符也可以加入提示符赋值中。一般设为PS1=[\u@\h\W]\\$意思是:[用户名@主机名当前目录]。8)作业控制。作业控制是指在一个作业执行过程中,控制执行的状态。可以挂起一个正在执行的进程,并在以后恢复执行该进程。Ctrl+z,bg,fg等装入UNIX硬件检测安装rootfs建立0号进程产生新进程swap对换进程1号进程init执行/etc/inittab初始化各端口gettygetty用户注册正确吗建立shell进程二.Shell的启动和建立子父boot…..NYBA三.shell命令行形式1.单条命令:$catfile1最常用命令形式2.多条命令:$pwd;who;date提高键盘命令输入效率3.复合命令:$ps–e|grepstudent2$(ls;catfile3;pwd)run_log方便灵活,运行效率高4.后台命令:$ls–lRfile_list&多进程并发,充分利用系统资源四.Shell环境每一个shell都有一个用户可设置修改的独立的运行环境,使这个shell按照特定的方式来运行。shell的环境由一组环境变量确定,系统的基本环境变量放在/etc/profile中,用户环境变量放在用户主目录下的.profile文件中,用户shell启动时,先执行/etc/profile,再执行用户的.profile。环境变量可在shell运行时动态修改。常用的shell环境参数(变量)及实例:HOME=/usr/computer/student6用户主目录,注册时的初始目录PATH=/bin:/usr/bin:$HOME/bin:./键盘命令的搜索路径SHELL=/bin/sh当前运行的shell名称TERM=vt100当前所用的终端类型PS1=$shell的主提示符IFS=域分隔符,通常为空白符,用来分隔命令行各个域五.shell变量shell实际上是基于字符串的程序设计语言,但也有变量。shell变量能够而且只能存储正文字符串,即它只有一种类型的变量即串变量。但从赋值的形式上看,则可以分成四种类型的变量或变量形式。变量的名字必须以字母或下划线开头,可以包括字母、数字和下划线。1、用户自定义变量用户自定义变量语法格式:name=string,赋值号“=”两边不允许有空白符。例:nodehost=beijing.UUCPpath=/bin:/usr/bin:/etc/bincount=10允许多个赋值操作,按从右到左的顺序进行。例:$A=$BB=abcC=″OK″$echo$A$B$CabcabcOK当引用一个未设置的变量时,其隐含值为空。例:$echo″$mailispathofmailbox″ispathofmailbox如果用双引号“”将值括起来,则括起来的字符串允许出现空格、制表符和换行符等特殊字符,而且允许有变量替换。例1:$MAIL=/var/mail/fk$var=″$MAILispathofmailbox″$echo$var/var/mail/fkispathofmailbox例2:$str=″Thisis\nabook″$echo$strThisisabook如果用单引号‘’将值括起来,则括起来的字符串允许出现空格、制表符和换行符的特殊字符,但不允许有变量替换。例3:$BOOK=″Englishbook″$MSG=′$BOOK′$echo$MSG$BOOK例4:$msg=′TodayisSunday′$echo$msgTodayisSunday引用变量的值时,可以用花括号{}将变量名称括起来,使变量名称与它的后续字符分隔开,如果紧跟在变量名称后面的字符是字母、数字或下划线时,必须要使用花括号。例5:$str=′Thisisastring′$echo″${str}enttestofvariables″Thisisastringenttestofvariables$echo″$strenttestofvariables″testofvariables可将变量设置为只读形式,格式为,readonly变量名1变量名2例6:$ux=UNIX.SUN$readonlyux$ux=UNIX.SCOux:isreadonly查看只读形式的变量,格式为readonly例7:$readonlyreadonlyux2、位置变量位置变量顾名思义是与变量所在位置有关的变量,这是一种特殊的变量。当一个shell过程被调用时,shell隐含地为它建立一系列的位置变量。这种位置变量是系统预定义好的,可以直接引用。如命令行的shell过程名本身被指定为位置变量$0,第一个命令参数为$1,……,第九个命令参数为$9。例:ls//bin/etc/usr/bin/dev$0$1$2$3$4$53、环境变量shell执行环境由一系列环境变量组成,这些变量是由shell维护和管理的。所有这些变量都可被用户重新设置,变量名由大写字母或数字组成。CDPATH执行cd命令时使用的搜索路径;HOME用户的home目录;PATH寻找命令或可执行文件的搜索路径;PS1主命令提示符,默认为“$”;PS2从命令提示符,默认为“”;TERM使用的终端类型。4、预定义变量常用系统变量:$0当前shell程序的名字$1~$9命令行上的第一到第九个参数$#命令行上的参数个数$*命令行上的所有参数$@分别用双引号引用命令行上的所有参数$$当前进程的进程标识号(PID)$?上一条命令的退出状态$!最后一个后台进程的进程标识号系统变量只能引用不能修改!例1:$echoaabbccdd$$aabbccdd2391$catfile1file2file32errlog$echo$?1(非0表示命令运行失败,错误信息在errlog文件中)$echo(空行,即echo输出串尾隐含的换行符)$echoThisisatest.(单词间多个空格)Thisisatest.$echo“Thisisatest.”(用引号包括时结果如何?)例2:显示所有参数及其总数。①先将下面源代码用vi编辑器存为afile文件#!/bin/bashechoAllargumentlist:$@//存储所有命令行输入的参数echoThetotalnumberofargumentis:$#//程序中命令行参数的个数#end//“#”为注释符号,“#!”为特殊的注释符号,它告诉操作系统使用其后面的程序来解释这个文件。②存盘后执行chmoda+xafile$./afileredhatlinux//输入三个参数Allargumentlist:redhatlinux//显示参数Thetotalnumberofargumentis:3//显示参数的个数六.Shell的内部命令evalcd改变当前工作目录pwd显示当前工作目录read读标准输入,赋给后面的变量readonlytime显示当前shell运行命令所花费的时间echoexport说明:shell的内部命令包含在shell命令内部,不是一条单独的操作系统命令,因此无法在文件系统中查找到.变量输出命令exportshell变量定义后或修改值后,如果未经export命令输出,则只在当前的shell中起作用,对其各个子shell不产生任何影响.经过export命令输出的变量对当前shell的各个子shell、以及子shell的子shell起作用。例如:$PATH=$PATH:./;exportPATH说明:1.export后面的变量名前不加$符号2.经export输出给子shell的变量如果在子shell中被修改,则只影响子shell,不影响父shell;如果在子shell中被输出,则只影响子shell的子shell3.export命令常用在.profile文件中echo命令的使用echo命令的基本功能就是在标准输出上显示后面的字符串,或变量的值。当字符串中带空白符或其它控制字符时,用引号将其括起来。例如:$echo1234512345$echo“departmentcomputer”departmentcomputer$echo“Myhomedirectoryis:$HOME”Myhomedirectoryis:/usr/teacher/david$echo–e“Inputyourchoice(y/n)[]\b\b\c”Inputyourchoice(y/n)[_]echo特殊字符串引用的例外引用双引号、单引号和转意符都不能消除对echo命令有特殊功能的控制字串的特殊含义。这些控制字串是:\b退格\c显示后不换行\f在终端上屏幕的开始处显示\n换行\r回车\t制表符\v垂直制表符\反斜杠删除环境变量设置unset$unsetNAME(如果NAME为一个环境变量)设置环境变量的文件使用BashShell时,有以下几个文件和用户的作业环境有关:1)/etc/profile2)/etc/bashrc3)/etc/inputrc4)$HOME/.bash_profile5)$HOME/.bashrc6)$HOME/.inputrc7)$HOME/.bash_login