您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 南邮-Linux-第4章
第4章Shell程序设计郑谦益、韩京宇内容提要4.1Shell概述4.2Shell脚本的定义与执行4.3Shell变量4.4输入和输出4.5Shell中的引号4.6条件表达式4.7判断语句4.8循环语句4.9函数4.1Shell概述1.概念Shell不仅可解释用户输入的命令,同时,可解释执行基于命令的脚本语言。Shell的分类(1)sh(2)csh(3)ksh(4)bash2.Linux系统中的ShellShell名称描述位置ash一个小的Shell/bin/ashbshash的一个符号链接/bin/bshbashBourneAgainShell,来自GNU项目/bin/bashshbash的一个符号链接/bin/shcshCShell,tcsh的一个符号链接/bin/cshtcsh和csh兼容的Shell/bin/tcshkshKornShell/bin/ksh4.2Shell脚本的定义和执行1.Shell脚本2.Shell脚本的执行方法1.Shell脚本#!/bin/bash#script4-1.shvar1=welcometouseShellscriptecho$var1pwdls-i2.Shell脚本的执行方法(1)添加可执行权$chmodu+xdemo.sh#给demo.sh增加可执行权$./demo.sh#直接运行(2)没有给Shell脚本赋执行权的情况下,可以指定Shell命令从而运行$bashdemo.sh#指定由bash解释执行3.Shell脚本的解析过程取shell脚本第1条命令合法性检查内部命令调用shell函数取下一条命令脚本结束结束图4-1shell脚本的执行过程合法是外部命令是创建子进程,并在子进程中通过exec函数加载外部命令不合法否4.3Shell变量Shell变量的分类1.用户自定义变量(局部变量)2.环境变量(全局变量)3.位置变量(局部变量)4.预定义变量(局部变量)注意局部变量和全局变量(pp.58)变量名必须以字符或下划线开始,其余部分可为字母、数字或下划线1.用户自定义变量语法变量名=变量值语义将变量值赋给变量变量名。变量的引用$变量名清除变量的内容:unset变量名查看所有变量的值set1.用户自定义变量实例分析$var1=123#给变量var1赋值123$str1=welcometobash#给变量赋值welcometobash“$unsetstr1#清除变量str1的值$set#显示所有变量的值2.环境变量环境变量又称全局变量,通常,由系统在启动时设置,环境变量一般用大写字母表示,通过env命令可查看系统中定义的环境变量。输出用户自定义变量为环境变量语法export用户自定义变量语义将用户自定义变量输出为环境变量。(1)输出用户自定义变量为环境变量$x=hellowelcome#定义变量x,并赋值hellowelcome$bash#创建子bash$echo$x#变量x未定义$exit#退出子bash$exportx#将变量x输出为环境变量$bash#重新创建子bash$echo$x#显示环境变量x的值hellowelcome$x=Linux#定义同名局部变量x,并赋值为Linux$echo$x#显示局部变量的值,输出为Linux$exit#退出子bash$echo$x#显示环境变量x,输出为hellowelcome(2)Linux系统中的环境变量环境变量名含义HOME当前用户的主目录PATH命令搜索路径LOGNAME用户登录名PS1第一命令提示符PS2第二命令提示符,默认是PWD用户的当前目录UID当前用户标识符(2)Linux系统中的环境变量PATH环境变量PATH的值是由冒号分隔的目录路径名,当Shell在执行外部命令时,Shell将按PATH变量中给出的顺序搜索这些目录,执行与命令名匹配的第一个可执行文件。PS1环境变量PS1,用于设置命令提示符PS2环境变量PS2在Shell接收用户输入命令的过程中,如果用户在输入行的末尾输入“\”然后回车,或者当用户按回车键时Shell判断出用户输入的命令没有结束时,显示这个辅助提示符,缺省的辅助提示符是“”。3.位置变量预定义变量含义$0脚本程序的名字$1,$2...传递给脚本的某个参数,$1代表第1个参数,$2代表第2个参数,依此类推4.预定义变量预定义变量含义$#传递到脚本的参数的数量$*传递到脚本的所有参数内容$?命令执行后返回的状态,0表示成功执行,其他值则表明执行错误$$当前进程的进程号$!后台运行的昀后一个进程号命令替换语法一var=$(command)语法二var=`command`功能将command命令的运行结果赋给变量var。注意第二种写法是反引号。命令替换(1)用户root在名为myLinux的主机上输入以下命令$echoUser$(whoami)ison$(hostname)UserrootisonmyLinux(2)显示当天的日期和时间$echoTodayis`date`TodayisSunJul1708:06:28CDT20114.4输入和输出1.read命令语法read[选项]变量名列表功能从键盘上读取变量的值2.echo命令语法echo[选项]字符串功能显示字符串或变量的值echo命令选项选项含义-n不在昀后自动换行-e启用反斜线控制字符的转换-E不处理转义字符。此为缺省选项;echo命令的转义符转义符含义\a从系统喇叭发送出声音\b向左刪除\c取消行末的换行符号\EESCAPE键\f换页字符\n换行字符\r回车键\t表格跳位鍵\\反斜线本身实例分析#从键盘读取一个字符,不回显$read-s-n1-pYes(Y)ornot(N)?answer#输入变量var1和var2$readvar1var2#2行3列显示$echo-ea\tb\tc\nd\te\tfabcdef4.5Shell中的引号一些字符在Shell中具有特定的含义,这些字符称为元字符。不同的引号对元字符的处理方式不同。1.反引号一对反引号之间的命令用该命令的执行结果来代替。实例分析$var1=`ls–l`#将命令'ls-l'的执行结果赋给变量var1$echo`pwd`#显示当前路径2.单引号在一对单引号中的所有字符(包括元字符),保留原有字符的含义,其中不能包含单引号。实例分析(1)显示当前目录下的所有文件$echo*#将元字符'*'作为通配符处理(2)显示字符'*'$echo'*'#单引号使元字符失去了特定的含义(3)不进行变量替换$text='*meansallfiles'#将单引号内的字符串赋给变量text$echo'$text'#显示'$text',不进行变量替换$echo$text#变量替换,并处理替换后的字符串命令echo$text首先显示当前目录下的所有文件,然后显示'meansallfiles',其功能与下列命令相同。$echo*meansallfiles3.双引号在一对双引号中的字符(包括元字符),除了美元符$、反引号`和反斜杠\外,其余均保留原来字符的含义。双引号的特点:(1)关闭通配符扩展对双引号中的元字符不作处理,保留其原有的含义。(2)支持变量替换将双引号中引用的变量用变量值进行替换。(3)支持命令替换将双引号内一对反引号中的命令替换为该命令运行的结果实例分析(1)假设用户为超级用户root,下面给出双引号对$、`和\的处理方式。$dlist='whoami'$echo*$dlistend*whoamiend元字符'*'不作特殊处理,将变量$dlist替换为变量的值'whoami'。$echo`$dlist`#先变量替换,然后进行命令替换root(2)不加双引号与加双引号的比较$x=*$echo$x#显示当前目录下的所有文件$echo$x#仅显示变量x的值'*'条件表达式用于判断条件是否满足的逻辑表达式。条件为真,返回0,否则,返回1。它是选择和循环语句的基础.使用test命令语法:test条件表达式使用括号[]语法:[条件表达式]条件表达式的值为真返回零,为假时返回14.5条件表达式1.文件状态操作符操作符含义-dfilename若文件filename为目录文件,则返回真-ffilename若文件filename为普通文件,则返回真-rfilename若文件filename可读,则返回真-sfilename若文件filename的长度大于0,则返回真-ufilename若文件filename的SUID位被设置,则返回真-wfilename若文件filename可写,则返回真-xfilename若文件filename可执行,则返回真2.字符串操作符操作符含义string若字符串string非空,则返回真-nstring若字符串string长度大于0,则返回真-zstring若字符串string长度为0,则为返回真string1=string2若字符串string1和string2相等,则返回真string1!=string2若字符串string1和string2不等,则返回真3.数字操作符操作符含义n1–eqn2判断数字n1与n2是否相等,若相等,返回0,否则,返回1n1–nen2判断数字n1与n2是否不等,若不等,返回0,否则,返回1n1–ltn2判断数字n1是否小于n2,若是,返回0,否则,返回1n1–gtn2判断数字n1是否大于n2,若是,返回0,否则,返回1n1–len2判断数字n1是否小于或等于n2,若是,返回0,否则,返回1n1–gen2判断数字n1是否大于或等于n2,若是,返回0,否则,返回14.逻辑操作符操作符含义e1–ae2逻辑表达式e1和e2同时为真时,返回0,否则,返回1e1–oe2逻辑表达式e1和e2有一个为真时,返回0,否则,返回1!e1若逻辑表达式e1不为真时,返回0,,否则,返回14.5.2命令分隔符命令分割符含义cmd1;cmd2以独立的进程依次运行cmd1和cmd2(cmd1;cmd2)在同一进程中依次运行cmd1&cmd2cmd1和cmd2同时运行,分属于不同进程组cmd1&&cmd2当cmd1执行为真时,执行cmd2cmd1||cmd2当cmd1执行为假时,执行cmd2cmd1|cmd2cmd1的输出作为cmd2的输入cmd1&cmd1以后台方式运行4.6判断语句条件语句分枝语句4.6.1条件语句语法一if[条件表达式]then命令序列1else命令序列2fi语义当条件表达式的测试值为真时,执行命令序列1,否则,执行命令序列2。命令序列中的命令可以是一个或者多个。条件语句语法二if[条件表达式];then命令序列fi语义当条件表达式的测试值为真时,执行命令序列,否则,执行条件语句后面的命令。条件表达式与then之间的分号;起命令分隔符的作用。条件语句语法形式三iftest条件表达式1then命令序列1elif[条件表达式2]then命令序列2else命令序列3fi语义这是包含二层嵌套的条件语句,当条件表达式1为真时,执行命令序列1,否则,在条件表达式2为真的情况下,执行命令序列2,否则,执行命令序列3,命令序列3属于第2个条件语句的一部分。实例分析4-2#!/bin/bash#script4-2.shechoEnterafilename:readfileif[-f$file]thenechoFile$fileexists.fi实例分析#!/bin/sh#script4-4.shechoEnterthefirstinteger:readfirstechoEnterthesecondinteger:readsecondif[$first-gt$second]thenecho$firstisgreaterthan$secondelif[$first-lt$second]thenecho$firstislessthan$secondelseecho$firstisequalto$secondfi4.6.2case语句语法case变量
本文标题:南邮-Linux-第4章
链接地址:https://www.777doc.com/doc-4170060 .html