您好,欢迎访问三七文档
1嵌入式操作系统适用专业:物联网工程任课教师:兰方鹏联系方式:13453194233E-mail:lfp424@163.comQQ:275392011TaiyuanUniversityofTechnology太原理工大学·计算机科学与技术学院2Shell编程shell概述变量输入/输出条件表达式条件选择语句分支选择语句循环语句函数3Shell编程什么是ShellShell就是UNIX提供用户的使用界面Shell为用户提供了输入命令和参数并可得到命令执行结果的环境Shell本身并不神秘,只是一个普通的应用程序用户将多个命令按语法规则写在文本文件中,该文本文件就是Shell脚本4Linux系统层次结构图Shell编程5Shell的双层性Shell编程命令解释程序(命令解释器)Shell解释用户输入的命令行,提交系统内核处理,并将结果返回给用户程序设计语言Shell命令与Unix命令的区别:一旦用户注册到系统后,Shell就被系统装入内存,并一直运行到用户退出系统为止;一般命令仅当被调用时,才由系统装入内存执行。6Shell是解释性的,多数高级语言是编译性的;Shell语言与高级语言处理的对象不同;Shell与系统有密切的关系;Shell易编写、调试、灵活性较强,但速度慢;Shell作为命令级语言,命令组合功能很强。Shell的特点Shell编程7Shell的种类Shell编程shBourneShell由Bell实验室的StevenBourne为UNIX开发的,它是UNIX的默认Shell,也是其它Shell的开发基础。BourneShell编程方面比较优秀,与用户的交互不如其它几种Shell。cshCShell由美国加州伯克利大学的BillJoy为BSDUNIX开发,提供了BourneShell不能处理的用户交互功能,但是CShell和BourneShell不兼容kshKornShell由Bell实验室的DavidKorn开发,继承了CShell和BourneShell的优点,其执行效率较高,命令交互界面和编程交互也很好bashBash(BornAgainShell)是GNU项目的一部分,bash是GNU/Linux系统的标准Shell(bash),目前,被大多数Linux发行系统作为缺省的登录Shell,也是RedhatLinux缺省的shell。8一个简单的Shell脚本Shell编程1.#!/bin/bash2.#sh1.sh3.var=“WelcometouseShellscript”4.echo$var5.pwd6.ls-i第1行:#!具有特定的含义,表示Shell脚本解释器的版本第2行:#开始表示注释第3行:定义变量var,并复制第4行:命令恶臭显示变量var的值第5、6行:Shell命令9Shell脚本的解析过程Shell编程取shell脚本的第1条命令合法性检查内部命令调用shell函数脚本结束?结束取下一条命令创建子进程,并在子进程中通过exec函数加载外部命令不合法合法外部命令是是否10用户自定义变量Shell编程-变量命名规则:变量组成是字母、数字或下划线,不能以数字开头变量赋值:变量名=变量值变量的引用:$变量名清除变量的值:unset变量名查看变量值:set11用户自定义变量Shell编程-变量var=123str=“Welcometobash”unsetstrecho$varecho“hello”setsh2.sh:12用户自定义变量Shell编程-变量num=1echo“Thisisthe$numnd”思考://结果为Thisisthenum=1echo“Thisisthe${num}nd”//结果为Thisisthe1nd13环境变量Shell编程-变量环境变量又称为全局变量,一般用大写字母表示,通常由系统在启动时设置。输出用户自定义变量为环境变量语法规则:export用户自定义变量语义:将“用户自定义变量”输出为环境变量实例:用户自定义环境变量14Shell编程-变量实例:用户自定义环境变量x=“Hellowelcome”bashecho$xexitexportxbashecho$xx=“Linux”echo$xexitecho$x//自定义变量x,并赋值//创建子bash//变量x未定义//退出子bash//将变量x输出为环境变量//显示环境变量x的值//定义同名的局部变量x//显示局部变量x的值//显示环境变量x的值15环境变量Shell编程-变量Linux系统环境变量USER:用户名HOME:当前用户主目录PATH:命令搜素路径LOGNAME:用户登录名PWD:当前用户目录UID:当前用户标识符LANG:语言SHELL:Shell版本PS1:第一命令提示符PS2:第二命令提示符16Shell编程-变量Linux系统环境变量PS1:第一命令提示符提示符含义\w当前工作目录\h主机名\u用户名\d日期\t时间\a响铃提示PS1=“\w”:设置当前工作目录的提示符为字符PS2:第二命令提示符在接收用户命令的过程中,用户在行末尾输入“\”回车,或者当用户敲回车时Shell判断出用户输入的命令没有结束时,显示这个辅助提示符,缺省为“”17Shell编程-变量位置变量Shell内部定义的和传递参数的位置有关的变量位置变量含义$0脚本程序的名称$1,$2…传递给脚本的参数,$1代表第1个参数,$2代表第2个参数,依次类推#hellofile1file2file3$0这个程序的文件名hello$1这个程序的第1个参数file1$2这个程序的第2个参数file2$3这个程序的第3个参数file318Shell编程-变量预定义变量Shell内部定义的具有特殊含义的变量预定义变量含义$#传递给脚本参数的个数$*传递给脚本所有参数的内容$?命令执行后返回的状态,0表示成功,其他值表示错误$$当前进程的进程号$!后台运行的最后一个进程例1:#myprogabc则$#的值为3例2:iftest$#-lt2thenecho“twoormoreargsrequired”exitfi19Shell编程-变量预定义变量sh3.sh:#!/bin/bashecho“numberofvars:”$#echo“valuesofvars:”$*echo“valueofvar1:”$1echo“valueofvar2:”$2echo“valueofvar3:”$3echo“valueofvar4:”$4./sh3.sh123420Shell编程-输入和输出read语法:read[选项]变量名列表功能:通过键盘给变量赋值选项含义-pprompt设置提示信息-nnum当read读num个字符后返回-s键盘输入屏幕不回显,可用于密码输入-ttimeout设置超时时间为timeout-r取消转移字符的转义作用-ddelim定义新的换行符例3:read-s-n1-p“Yes(Y)ornot(N)?”answer//从键盘读入1个字符,不回显例4:readvar1var2//输入变量var1和var221Shell编程-条件表达式测试文件状态语法:test条件表达式功能:测试条件表达式是否为真,若真返回0,否则返回1选项含义-dfilename若文件filename为目录文件,则返回回真-ffilename若为普通文件,返回真-rfilename若文件可读,返回真-sfilename若文件长度大于0,返回真-wfilename若文件可写,返回真-xfilename若文件可执行,返回真例5:test!-rfile1//file1文件不可读时为真22Shell编程-条件表达式逻辑操作符操作符含义e1–ae2逻辑表达式e1和e2同时为真时返回0,否则返回1e1–oe2逻辑表达式e1和e2有一个为真时返回0,否则返回1!e1若逻辑表达式e1不为真时返回0,否则返回1例6:test-rfile1-a-ffile2//file1可读且file2为普通文件时返回真例7:-r“$file”-a-s“$file”//file变量中存放的文件可读并且长度不为0时返回真23Shell编程-条件表达式字符串操作符操作符含义string若字符串string非空,返回真-nstring若字符串长度大于0,返回真-zstring若字符串长度为0,返回真string1=string2若字符串string1和string2相等,则返回真String1!=string2若字符串string1和string2不相等,则返回真例8:两个字符串比较str1=internettest“$str1”=intranetecho$?1特别注意:字符串比较符号“=”两边必须都有空格24Shell编程-条件表达式数字操作符操作符含义n1-eqn2n1和n2相等,返回0,否则返回1n1-nen2n1和n2不相等,返回0,否则返回1n1-ltn2n1小于n2,返回0,否则返回1n1-gtn2n1大于n2,返回0,否则返回1n1-len2n1小于或等于n2,返回0,否则返回1n1-gen2n1大于或等于n2,返回0,否则返回1if[a-gtb]if[$a-gt$b]//判断整数a是否大于整数b//判断变量a是否大于变量b特别注意:在符号“[”和“]”左右都有空格25Shell编程-条件选择语句ifthen语句:if[条件表达式]then语句1fiifthenelse语句:if[条件表达式]then语句1else语句2fi26Shell编程-条件选择语句ifelif语句:if[条件表达式1]then语句1elif[条件表达式2]then语句2else语句3fish4.sh:27Shell编程-条件选择语句cmp.sh:a=$1b=$2if[-z$a]||[-z$b]thenechopleaseenter2numberexit1fiif[$a-eq$b]thenechonumbera=numberb“elseif[$a-gt$b]thenechonumberanumberbelif[$a-lt$b]thenechonumberanumberbfifi28Shell编程-循环语句for循环语句:for变量in数组do语句doneselect循环语句:select变量in数组do语句done29Shell编程-条件选择语句sh5.sh:#!/bin/bashcounter=0forfilesin*doif[-f$files]thencounter=`expr$counter+1`fidoneechoThereare$counterfilesin`pwd`expr用于计算算术表达式的值,在每个算术运算符的两边必须用空格分隔expr[参数1]算术运算符[参数2]//反引号``:将一对反引号之间的命令用该命令的执行结果来代替30Shell编程-分支选择语句分支语句:case变量in值1)命令序列1;;值2)命令序列2;;……值n)命令序列n;;esac31Shell编程-分支选择语句分支语句:在case语句中,会出现一些特殊的字符,用于模式匹配,这些字符的含义见下表:模式匹配方式*匹配所有字符串?匹配任意单个字符[…]定义某个范围内的字符集|分隔不同的值,表示“或者”例sh6.sh:获取系统时间,并给出判断结构例sh7.sh:选择菜单32Shell编程-循环语句while循环语句:while条件表达式do语句doneuntil循环语句:until条件表达式do语句done33例sh8.sh:从若干数中寻找最小值例sh9.sh:在当前目录下逐个显示Shell脚本的内容Shell编程-循环语句例sh10.sh:计算1到100的和34Shell编程-函数函数的定义:函数名(){命令列表return}函数的调用形式
本文标题:5-shell编程
链接地址:https://www.777doc.com/doc-4353065 .html