《06--shell编程(基础).ppt》由会员分享,可在线阅读,更多相关《06--shell编程(基础).ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、http:/Shell编程主讲:宁恒生http:/中国十大品牌IT教育机构主要内容shell介绍shell基本语法shell常用语句http:/中国十大品牌IT教育机构Shell介绍UNIX的shell程序解释用户的命令,不管是用户直接输入的或者从一个称作Shell脚本或者Shell程序文件读入。Shell脚本是解释型的,而不是编译型的。Shell从脚本行的每行读取命令并在系统中搜索这些命令,当编译器把一个程序转化为可供机器读取的形式时,那么它就可以被以一个可执行文件用在shell脚本当中。除了向内核传送命令之外,shell的主要任务是提供一个可单独配置的使用shell资源配置文件的用户环境。
2、http:/中国十大品牌IT教育机构Shell类型sh或者称作BourneShell:最初的shell并且仍然在UNIX系统和UNIX相关系统中使用。它是基本的shell,是一个特性不多的小程序。虽然不是一个标准的shell,但是为了UNIX程序的兼容性在每个Linux系统上仍然存在。bash或者称作BourneAgainshell:标准的GNUshell,直观而又灵活。或许是初学者的最明智选择同时对高级和专业用户来说也是一个强有力的工具。在Linux上,bash是普通用户的标准shell。这个shell因此称为Bourneshell的超集,一套附件和插件。意味着bash和sh是兼容的:在sh
3、中可以工作的命令,在bash中也能工作,反之则不然。csh或者称作Cshell:语法了类似于C语言,某些时候程序员会使用。tcsh或者称作TurboCshell:普通Cshell的超集,加强了的用户友好度和速度。ksh或者称作Kornshell:某些时候被有UNIX背景的人所赏识。Bourneshell的一个超集,有着对初学者来说就是一场恶梦的标准配置。文件/etc/shellshttp:/中国十大品牌IT教育机构一个简单的shell脚本#!/bin/bash/shell脚本的开始clearecho“Hello,$USER“/打印用户信息echoecho“Todaysdateisdate“/显
4、示日期和时间echoecho“Theuseris:“/提示信息who/who命令echoecho“Thisisuname-s“/cpu信息echoechoThatsallfolks!http:/中国十大品牌IT教育机构Shell如何执行命令执行交互式命令1.外部命令2.内建命令执行脚本的方式:1.sh文件2.先chmod+x文件3.再./脚本例如:1.#!/bin/sh2.cd.3.lshttp:/中国十大品牌IT教育机构启动脚本/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。/etc/bashrc:为每一个运行bashshell的用户执行此文件
5、。当bashshell被打开时,该文件被读取。/.bash_profile:当用户登录时,该文件仅仅执行一次!通常情况下该脚本会去调用/.bashrc。/.bashrc:该文件包含个人的bashshell的bash信息,通常情况下该脚本中会去调用/etc/bashrc。/.bash_logout:当每次退出系统(退出bashshell)时,执行该文件。http:/中国十大品牌IT教育机构Shell基本语法变量环境变量(可以从父进程传给子进程,常用env查看)本地变量(只存在于当前shell进程,用set可以显示)设置变量:VARvalue(本地变量)ExportVAR或者ExportVARva
6、lue(导入成环境变量)Unset命令用户删除已经定义的环境变量或本地变量使用$VAR或者$VAR可以取出变量的值,例如:rootbaozongmyshell#echo$SHELL/bin/bashrootbaozongmyshell#echo$SHELLabcrootbaozongmyshell#echo$SHELLabc/bin/bashabcrootbaozongmyshell#echo$SHELLabc/bin/bashabcrootbaozongmyshell#echo$SHELLabc/bin/bashabchttp:/中国十大品牌IT教育机构变量的定义与删除变量定义的时候不允许有
7、空格例如:STRING=“myname”http:/中国十大品牌IT教育机构导出变量Exporting一个子shell能够改变从父shell变量继承过来的变量,但是在子shell所作的改变对父shell也没有影响http:/中国十大品牌IT教育机构Bourneshell保留变量变量名字变量名字定义定义CDPATH一个由冒号分割的目录列表作为内建命令cd的搜索路径。HOME当前用户的home目录;默认为内建命令cd。这个变量的值同样被扩展使用。IFS分割域的一个字符的列表;用于shell把词分开作为扩展。MAIL如果这个变量设成一个文件名并且MAILPATH变量没有设置,Bash在指定文件中通知
8、用户邮件的到达。MAILPATH一个用冒号分隔的文件名列表,shell周期性地从这个文件里检测新邮件。OPTARGgetopts内建命令处理的最后的选项参数的值。OPTIND最后一个由getopts内建命令处理的选项参数的索引号。PATH一个用冒号分隔的目录列表,shell从这些目录里寻找命令。PS1主要提示符。默认值是“s-v$”。PS2次要提示符。默认值是“”。http:/中国十大品牌IT教育机构变量名变量名定义定义auto_resume这个变量控制shell如何与用户交互和作业控制。BASH用于执行当前Bash实例的全路径。BASH_ENV如果这个变量在Bash调用执行一个shell脚本
9、时已被设置,它的值将被展开并用作在执行脚本前读取的启动文件名。BASH_VERSION当前Bash实例的版本号。BASH_VERSINFO一个只读变量数组,它的成员保存这个Bash实例的版本信息。COLUMNSselect内建命令来决定打印选择列表时终端宽度。在收到SIGWINCH信号时自动设置。COMP_CWORD包含当前光标位置的字的$COMP_WORDS的一个索引。Anindexinto$COMP_WORDSofthewordcontainingthecurrentcursorposition.COMP_LINE当前命令行。COMP_POINT指明相对于当前命令起点的当前光标位置。COM
10、P_WORDS一个由当前命令行中单个词组成的变量数组。COMPREPLY一个变量数组,Bash从中读取由一个可编程完整设备调用的一个shell函数生成的可能的完成。AnarrayvariablefromwhichBashreadsthepossiblecompletionsgeneratedbyashellfunctioninvokedbytheprogrammablecompletionfacility.DIRSTACK一个保存当前目录栈内容的变量数组。Bourneshell保留变量http:/中国十大品牌IT教育机构字符字符定义定义$*展开为位置参数,从1开始。当扩展发生在双引号时,它展开
11、成一个单独的词,每个参数的值由IFS特殊变量的第一个字符分隔。$展开为位置参数,从1开始。当在双引号里展开时,每个参数展开成独立的词。$#把位置参数展开为十进制数字。$?展开成最近执行的前台管道程序的退出状态。$-一个连字符展开为当前选项标志内部命令集或者那些shell自己的集(如-i)$展开成shell的进程ID。$!展开成最近在后台(异步)执行的命令的进程ID。$0展开成shell或者shell脚本名。$_下划线变量在shell启动时设置,包含shell的绝对文件名或者作为参数列表被执行的脚本。随后,它展开为前一个命令扩展后的最后一个参数。它同样设置为每个执行程序的全路径,放在那个命令的输
12、出环境中。当检查邮件时,这个参数保存邮件文件的名字。特殊Bash变量http:/中国十大品牌IT教育机构文件名替换用于匹配的字符称为通配符,例如:1.*匹配零个或者多个任意字符2.?匹配一个任意字符3.若干字符匹配方括号中任意一个字符一次出现如:1.Ls/dev/ttyS*2.Lscheng0?.txt3.Lscheng0-2.txt4.Lscheng0120-9.txthttp:/中国十大品牌IT教育机构命令替换命令替换允许一个命令的输出来替换这个命令本身。命令替换在一个命令这样封装的时候发生:$(command)或command如:1.date=date2.Echo$date或者1.dat
13、e=$(date)2.Echo$datehttp:/中国十大品牌IT教育机构转义字符转义字符:“”http:/中国十大品牌IT教育机构单引号与双引号单引号()用于保持在引号内的每个字符的字面值。双引号保持引号内的所有字符的字面值,除了$,http:/中国十大品牌IT教育机构Shell的输入与输出echo常见-n(禁用转义字符)e(可以使用转义字符)1.#!/bin/sh2.echo-ethis3linesnnn3.echook4.echoenteryouname:5.readname6.echoenteryoupasswd:7.readpasswd8.echo$name$passwdhttp:
14、/中国十大品牌IT教育机构算术替换用于算术计算:$()中的shell变量取值将换成整数,如:var=45echo$($var+3)注意只能用+-*/和(),并且只能做整数计算。http:/中国十大品牌IT教育机构别名:alias一个别名允许使用一个字符串来代替一个字当它作为一个简单命令的第一个字时候。shell维护一个可以用alias和unalias内建命令来设置或者取消的别名列表。用alias命令而不带选项的时候可以显示当前shell所知的别名列表。http:/中国十大品牌IT教育机构shell的历史记录history/bash_history文件中!n执行history中第n条指令!执行h
15、istory中最后一条指令!str执行history中最后以str开头的命令注意:Shell具有的补全功能,请大家利用好。http:/中国十大品牌IT教育机构Shell脚本语法条件测试:test或者可以用test或者测试一个条件是否成立,如果测试结果为真,则该命令退出状态为0,如果为假,状态为1。http:/中国十大品牌IT教育机构test文件测试格式:testoptionfile或者optionfile-bfile块文件-cfile字符文件-dfile目录-efile存在-pfile管道-rfile可读-sfile大于0-wfile可写-xfile可执行f1-eff2f1和f2被链接,指向同
16、一文件(Korshshell)f1-ntf2f1比f2新f1-otf2f1比f2旧http:/中国十大品牌IT教育机构test-a逻辑与,操作符两边均为真,结果为真,否则为假。-o逻辑或,操作符两边一边为真,结果为真,否则为假。!逻辑否,条件为假,结果为真。http:/中国十大品牌IT教育机构test整数比较格式:testint1operatorint2-eq数值相等。-ne数值不相等。-gt第一个数大于第二个数。-lt第一个数小于第二个数。-le第一个数小于等于第二个数。-ge第一个数大于等于第二个数。n1-eqn2n1和n2相等n1-gen2n1大于或者等于n2n1-gtn2n1大于n2n
17、1-len2n1小于或者等于n2n1-ltn2n1小于n2n1-nen2n1不等于n2http:/中国十大品牌IT教育机构test字符串测试格式:testoptionstring或者optionstring1.=两个字符串相等。2.!=两个字符串不等。3.-z空串。4.-n非空串。5.s1=s2相等s1!=s2s1与s2不同s1s2s1的ASCII在s2后http:/中国十大品牌IT教育机构If语句if语句测试条件,测试条件返回真(0)或假(1)后,可相应执行一系列语句。简单的if语句是:1.if条件2.then命令3.fi注意:使用if语句时,必须将then部分放在新行,否则会产生错误。如果
18、要不分行,必须使用命令分隔符。现在简单if语句变为:1.if条件;then2.命令3.fihttp:/中国十大品牌IT教育机构If语句if语句其格式为:1.if条件12.then命令13.elif条件24.then命令25.else命令36.fiIf条件1如果条件1为真Then那么命令1执行命令1elif条件2如果条件1不成立then那么命令2执行命令2else如果条件1,2均不成立命令3那么执行命令3fi结束http:/中国十大品牌IT教育机构case语句case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:1.case值in
19、2.模式1)3.命令14.5.;6.模式2)7.命令28.9.;10.esachttp:/中国十大品牌IT教育机构case语句取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至;取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号*捕获该值,再接受其他输入。模式部分可能包括元字符,与在命令行文件扩展名例子中使用过的匹配模式类型相同,即:*任意字符。?任意单字符。.类或范围中任意字符。http:/中国十大品牌IT教育机构for循环for循环一般格式为:1.for变量名in列表2.do3.命令14.命令25.done当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的shell命令和语句。变量名为任何单词。in列表用法是可选的,如果不用它,for循环使用命令行的位置参数。in列表可以包含替换、字符串和文件名,下面看一些例子。http:/中国十大品牌IT教育机构while循环while循环用于不断执行一系列命令,也用于从输入文件中读取数据,其格式为:1.while 命令2.d o3.命令14.命令25.6.d o n e
限制150内