Linux的shell编程.ppt_第1页
Linux的shell编程.ppt_第2页
Linux的shell编程.ppt_第3页
Linux的shell编程.ppt_第4页
Linux的shell编程.ppt_第5页
免费预览已结束,剩余129页可下载查看

下载本文档

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

文档简介

第5章Linux的shell编程 5 1什么是shell 当一个用户登录Linux系统之后 系统初始化程序init就为每一个用户运行一个称为shell 外壳 的程序 shell就是一个命令行解释器 一般的Linux系统都将bash作为默认的shell 5 2几种流行的shell 目前流行的shell有ash bash ksh csh zsh等 bash是Linux系统默认使用的shell 可以用下面的命令来查看shell的类型 echo SHELLSHELL是一个环境变量 它记录用户所使用的shell类型 几种流行的shell 续 可以用命令 shell name来转换到别的shell exit退出子shell 5 3shell程序设计 使用shell编程类似于DOS中的批处理文件 称为shellscript 又叫shell程序或shell命令文件或者shell脚本 Shell脚本程序是按行来解释的 脚本程序总是以 bin sh开始的 符号 用来告诉系统它后面的参数是用来执行该文件的程序 如果要执行该脚本 还必须使其可执行 chmod xfilename然后 您可以通过输入 filename来执行您的脚本 catfirstscript sh bin shecho Youarewelcometousebase echo Currentworkdirectoryis PWD echo Youare LOGNAME 增加执行权限 chmod xfirstscript sh开始运行程序 firstscript sh 执行结果 Youarewelcometousebase Currentworkdirectoryis rootYouareroot shell只有字符型变量 shell变量无需初始化 一个没有初始化的shell变量自动被初始化为一个空串 shell变量名大小写敏感 5 4shell基础编程 5 4 1shell变量 BourneShell有如下四种变量 本地变量 用户自定义变量 位置变量即shellscript之参数预定义变量 特殊变量 环境变量 参考shell定制部分 shell变量 续 5 4 1 1本地变量 用户自定义变量 本地变量在用户现在的shell生命期的脚本中使用 要设置一本地变量 格式为 variable name value或 variable name value 因为大部分LINUX命令使用小写字符 因此在shell编程中变量通常全部大写 变量的引用 在变量前加 1 显示变量 使用echo命令输出单个变量的值 此时要在变量名前加 WEEK Satur echoTodayis WEEKday 输出 Todayis 使用花括号来告诉shell我们要显示的变量 echoTodayis WEEK day输出 TodayisSaturday 2 清除变量 使用unset命令删除变量的赋值 Z hello echo Zhello unsetZ echo Z 3 显示所有本地shell变量 使用set命令显示所有本地定义的shell变量 4 结合变量值 Echo variable name1 variable name2 A Hello B World echo A B Hello World 5 设置变量的默认值 BourneShell允许对变量设置默认值 其格式如下 variable defaultvalue color blue echo Theskyis color grey today 输出结果 Theskyisbluetoday color blue unsetcolor echo Theskyis color grey today Theskyisgreytoday echo color 改变变量的值 格式如下 variable value color blue unsetcolor echo Theskyis color grey today Theskyisgreytoday echo color grey 6 使用变量来保存系统命令参数 可以用变量保存系统命令参数的替换信息 source etc passwd cd source 7 设置只读变量 格式 variable name valuereadonlyvariable name查看所有只读变量 使用命令readonly 5 4 1 2环境变量 环境变量用于所有用户进程 经常称为子进程 登录进程称为父进程 shell中执行的用户进程均称为子进程 环境变量应用于用户进程前 必须用export命令导出 1 设置环境变量 VARIABLE NAME value exportVARIABLE NAME也可 VARIABLE NAME valueexportVARIABLE NAME 环境变量 续 2 显示环境变量显示环境变量与显示本地变量一样 使用env命令可以查看所有的环境变量 3 清除环境变量使用unset命令清除环境变量 4 set命令 不带参数的set命令输出目前所有的shell变量 含用户自定义的变量 和它们的当前值 5 将变量导出到子进程 catfather bin sh fatherscriptecho thisisthefather FILM AFewGoodMen echo Ilikethefilm FILM child callthechildscriptecho backtofather echo andthefilmis FILM 将变量导出到子进程 续 catchild bin sh childscriptecho calledfromfather iamthechild echo filmis FILM FILM DieHard echo changingfilmto FILM 显示结果 thisisthefatherIlikethefilm AFewGoodMencalledfromfather iamthechildfilmis changingfilmto DieHardbacktofatherandthefilmis AFewGoodMen catfather2 bin sh father2scriptecho thisisthefather FILM AFewGoodMen echo Ilikethefilm FILM callthechildscript butexportvariblefirstexportFILM 在调用脚本前导出变量 childecho backtofather echo andthefilmis FILM 输出结果 father2 thisisthefatherIlikethefilm AFewGoodMencalledfromfather iamthechildfilmis AFewGoodMenchangingfilmto DieHardbacktofatherandthefilmis AFewGoodMen 5 4 1 3位置变量参数 如果要向一个shell脚本传递信息 可以使用位置参数完成此功能 参数相关数目传入脚本 此数目可以任意多 但只有前9个可以被访问 使用shift命令可以改变这个限制 参数从第1个开始 在第9个结束 每个访问参数前要加 符号 第一个参数为0 表示预留保存实际脚本名字 位置变量参数 续 如向脚本传送DidYouSeeTheFullMoon信息 0 1 2 3 4 5 6脚本名字DidYouSeeTheFullMoon 7 8 9 1 在脚本中使用位置参数 catparam bin sh paramecho Thisisthescriptname 0 echo Thisisthefirstparameter 1 echo Thisisthe2ndparameter 2 echo Thisisthethirdparameter 3 echo Thisisthe6thparameter 6 echo Thisisthe7thparameter 7 输出结果 执行 paramDidYouSeeTheFullMoon Thisisthescriptname paramThisisthefirstparameter DidThisisthe2ndparameter YouThisisthethirdparameter SeeThisisthe6thparameter MoonThisisthe7thparameter 2 向系统命令传递参数 catfindfile bin sh findfilefind name 1 print 5 4 1 4预定义变量 预定义变量是在shell一开始时就定义了的变量 用户不能重定义它 所有预定义变量都是由 符和另一个符号组成的 常用的预定义变量 传递到脚本的参数个数 以一个单字符串显示所有向脚本传递的参数 与位置变量不同 此选项参数可超过9个 脚本运行的当前进程ID号 预定义变量 续 后台运行的最后一个进程的进程ID号 与 相同 但是使用时加引号 并在引号中返回每个参数 显示shell使用的当前选项 与set命令功能相同 显示最后命令的退出状态 0表示没有错误 其他任何值表明有错误 1 最后的退出状态 cpok txt tmp echo 0 cpok txt usr bin aaa bbbcp cannotcreateregularfile usr bin aaa bbb Nosuchfileordirectory echo 1 5 4 2条件测试 1 测试文件状态test一般有两种格式 即 testcondition或 condition 使用方括号时 要注意在条件两边加上空格 测试文件状态 续 r文件名 如果文件存在且可读则为真 w文件名 如果文件存在且可写则为真 x文件名 如果文件存在且可执行则为真 s文件名 如果文件存在且至少有一个字符则为真 d文件名 如果文件存在且为目录则为真 f文件名 如果文件存在且为普通文件则为真 e文件名 如果文件存在则为真 c文件名 如果文件存在且为字符型特殊文件则为真 b文件名 如果文件存在且为块特殊文件则为真 测试文件scores txt是否可写 ls lscores txt rw r r 1daveadmin0May1511 29scores txt wscores txt echo 0 test wscores txt echo 0 简单的算术运算 格式 expression 例如 var1 2var2 var1 10 1 则 var2的值为21 数值数据处理 Bash提供了3种方法对数值型数据进行算术运算 1 使用let命令 2 使用shell扩展 expression 3 使用expr命令 1 let命令 语法 letexpress list功能 求出算术表达式的值如果最后的表达式取值为0 则let命令返回1 否则返回0 let a 8 b 13 命令中的表达式含空格 需加双引号 letc a b echo Thevalueofcis c Thevalueofcis21 let a b echo Thenewvalueofais a theproductofaandb Thenewvalueofais104 theproductofaandb Bash扩展 语法 expression 功能 计算expression并返回它的值 a 8b 13 echo Thenewvalueofcis a b Thenewvalueofcis21 expr命令 语法 exprargs功能 计算args的值 并返回它的值到标准输出 var1 10 var1 expr var1 1 echo var111 2 测试时使用逻辑操作符号 Shell提供了三种逻辑操作完成两个文件状态比较的功能 a逻辑与 o逻辑或 逻辑否测试两个文件是否均可写 wscores txt a wresults txt echo 0 3 字符串测试 字符串测试共包含五种格式 test string teststring operator string test string string operator string string operatorstring stringstring operatorstring String operator可以为 两个字符串相等 两个字符串不等 z 空串 n 非空串 比较两个字符串是否相等 TAPE1 dev rmt0 TAPE2 dev rmt1 TAPE1 TAPE2 echo 1 4 数值测试 格式 number numeric operator number 或 number numeric operator number numeric operator一般为 eq 数值相等 ne 数值不相等 gt 大于 lt 小于 le 小于等于 ge 大于等于 测试两个数是否相等 NUMBER 130 NUMBER eq 130 echo 0 测试两个表达式 990 le 995 a 123 gt 33 echo 0 5 4 3控制流结构 1 if语句 if expression1 thencommand list elif expression2 thenthen command list elseelse command list fi在这里 一个expression是一系列命令 也可采用如下格式 if expression1 thencommand list elif expression2 thenthen command list elseelse command list fi 三种典型的if结构 第一种if语句 ifexpressionthenthen commandsfi 第二种if语句 ifexpressionthenthen commandselseelse commandsfi 第3种if语句ifexpression1thenthen commandselifexpression2thenelif1 commandselifexpression3thenelif2 commands elseelse commandsfi 例如 catgrade evaluate sh bin sh Usage grade evaluategrade gradeshouldbebetween0and100 including0and100if 1 lt 0 thenecho Error invalidgrade elif 1 lt 60 thenecho nopass elif 1 lt 70 thenecho pass elif 1 lt 80 thenecho good elif 1 le 100 thenecho excellent elseecho Error invalidgrade fi 2 case语句 格式 casetest stringin模式1 command list1 模式2 command list2 command listN 1 esac case语句 续 in的每一模式必须以右括号 结束 取值可以为变量或常数 匹配发现string1取值符合某一模式后 其间所有命令开始执行直至 如果模式1 模式2中没有和strings1相符合的 则星号 下面的语句被执行 模式匹配符 代表任意字符 表示任意单个字符 表示类或范围中任意字符 catcaseexample sh bin shecho n Doyouwanttocontinuethisoperation n readyesnocase yesnoiny Y Yes yes echo systemwillcontinuethisoperation n N no NO echo systemwillskipthisoperation echo Incorrectinput exit1 esac 3 for语句 有两种使用for语句的表达式 第一种形式是 forvarinlistdocommandsdone 第二种形式是 forvardostatementsDone使用这种形式时 变量var的取值是位置参数 catsimplefor sh bin shforiin13579doecho Idone 4 while和until循环 while循环的一般格式为 whileexpressiondostatementsdone catwhileexample sh bin shwhilereadstringdoecho yourstringis string doneecho Thankyou Bye bin bash programtest while count 1while n doecho Thisisparameternumber count 1 shiftletcount count 1done until语句的格式为 untilexpressiondocommandsdone bin bash programtest until count 1until z doecho Thisisparameternumber count 1 shiftletcount count 1done catuntilexample sh bin shuntilreadstringdoecho yourstringis string doneecho Thankyou Bye 输出结果 yourstringis 程序继续 abcThankyou Bye Shell还提供了true和false两条命令用于建立无限循环结构的需要 它们的返回状态分别是总为0或总为非0 5 breakandcontinue break退出循环 catbreakexample sh bin shwhile doreadstringif 0 thenbreakfidone catcontinueexample sh bin shfor i 0 i 20 i i 1 doecho n iif i lt10 thenecho continuefiecho Thisisatwodigitalnumeric done 5 4 4shell内嵌命令 shell内嵌命令 续 shell内嵌命令 内部命令 是由Bourneshell本身提供的 不是存在于 bin或usr bin目录里 内部命令比系统里的相同命令执行得快 eval 命令格式 evalargs功能 当shell程序执行到eval语句时 shell读入参数args 并将参数连接成一个新的命令让shell执行 evalexpr1 12 echo 0 exec 命令格式 exec命令命令参数功能 当shell执行到exec语句时 不会去创建新的子进程 而是转去执行指定的命令 当指定的命令执行完时 该进程 也就是最初的shell就终止了 所以shell程序中exec后面的语句将不再被执行 execls l exec不会创建新的进程而是让ls l直接取代当前的shell进程 export 命令格式 export变量名或 export变量名 变量值功能 shell用export把它的变量导出到子进程 但子进程不能用export把它的变量导出到父进程 不带任何变量名的export语句将显示出当前所有的export变量 readonly 命令格式 readonly变量名功能 将一个用户定义的shell变量标识为只读 不带任何参数的readonly命令将显示出所有只读的shell变量 pwd 显示当前当前目录 return 命令格式 return n 功能 退出函数并返回给定的值n 当n值缺省时 返回值是函数体内最后一个执行的命令的返回值 exit 功能 退出shell程序 在exit之后可有选择地指定一个数字作为返回状态 shift 命令格式 shift n 功能 重新分配命令行参数与位置参数的对应关系 在shiftn以后 所有的S 中的参数会向左移动n个位置 同时 会减n 默认的n为1 set 功能 除了可以显示所有本地变量 还可以用于在脚本内部给出其运行参数 使得在脚本调试时不用重复输入参数 catsetexample sh bin shsetfistsecondwhile 0 doecho 1shiftdone 执行结果 setexample shfirstsecond times 显示shell运行过程的用户和系统时间 timesls l0m0 010s0m0 030s0m0 510s0m0 090s wait 功能 等待直到一个用户子进程完成 可以在wait命令中指定进程ID号 如果未指定 则等待直到所有子进程完成 wait 点 命令格式 Shell程序文件名功能 使shell读入指定的shell程序文件并依次执行文件中的所有语句 5 4 5shell函数 函数定义的基本格式为 functionname 若干命令行 调用函数的格式为 functionnameparam1param2 5 4 5shell函数 续 在函数定义时不用带参数说明 但在调用函数时可以带有参数 此时函数将会把这些参数视为位置参数 分别赋予 1 2 及 catfunction sh bin shhello echo Hello world 运行 function sh helloHello world 也可以这样处理 catfunction sh bin shhello echo Hello world hello 运行 function sh或者 function sh 5 4 6shell输入与输出 1 echo功能 在屏幕上显示出由arg指定的字符串 输出的字符串间以空格隔开 并在最后加上换行符 命令格式 echo n e 字符串 或echo help version echo选项 n不要在最后自动换行 e若字符串中出现以下字符 则特别加以处理 而不会将它当成一般文字输出 a发出警告声 b删除前一个字符 c最后不加上换行符号 f换行但光标仍旧停留在原来的位置 n换行且光标移至行首 r光标移至行首 但不换行 t插入tab v与 f相同 插入 字符 nnn插入nnn 八进制 所代表的ASCII字符 echo选项 help显示帮助 version显示版本信息 catechoexample sh bin shecho n Pleaseinputname readnameecho n Pleaseinputsex readsexecho n pleaseinputage readageecho n Pleaseinputsecondname readname2echo n Pleaseinputsecondsex readsex2echo n pleaseinputsecondage readage2 echo e n nThisisastudentlist echo n Name echo e n t tSex echo e t tAge echo e name t t sex t t age echo e name2 t t sex2 t t age2 2 read 命令格式 read变量名列表功能 从键盘或文件输入数据 赋值给变量 shell用空格作为变量之间的分割符 按回车键或者CTRL D结束输入 当read从文件中读取数据时候是按照行读取的 即一次读取一行 如果没有碰到回车符 则一直读到文件末尾 读取数据的方式和从键盘输入时相同 read 续 readnamesexageYangailinmale25 echo nameYangailin echo sexmale echo age25 read 续 readnamesexYangailinmale25 echo nameYangailin echo sexmale25 从文件中读取数据 catread from file sh bin shwhilereadLINE do do可以另起一行 此时 LINE后面的分号可有可无echo LINE 在标准输出上显示文件的内容echo LINE path WRITE FILE TXT WRITE FILE TXT是写入数据的文件名done path READ FILE TXT READ FILE TXT是要从中读取数据的文件名 3 管道pipe 可以通过管道将一个命令的输出传递给另一个命令作为输入 管道用竖杠 表示 它的语法格式如下 命令1 命令2 管道pipe 续 catread from file2 sh bin shcatREAD FILEwhilereadLINE READ FILE TXT是要从中读取数据的文件名do 文件应该带上路径echo LINE 在标准输出上显示文件的内容echo LINE path WRITE FILE TXT WRITE FILE TXT是写入数据的文件名done 4 cat命令 cat命令可以用来显示文件内容 创建文件 还可以用来显示控制符号 用 v选项 cat命令一下子显示整个完整的文件 如果希望每次显示一页 可以使用more命令 catfilename morefilename 连接文件 catfilename1filename2 filename3 该命令把两个文件连成一个文件filename3 输入文件 cat a txtabcefg 5 tee 功能 tee命令从标准输入设备读取数据 将其内容输出到标准输出设备 同时将输出的一个副本保存成文件 语法 tee a i help version 文件 参数 a附加到文件的后面 而非覆盖它 如果tee指令的文件已经存在 没有 a则会覆盖该文件的内容 有 a 数据会新增在该文件内容的最后面 而不会删除原先之内容 i忽略中断信号 help在线帮助 version显示版本信息 6 文件重定向 在Linux中 每一个进程都有三个特殊的文件描述指针 标准输入 standardinput 文件描述符为0 标准输出 standardoutput 文件描述符为1 标准错误输出 standarderror 文件描述符为2 在Linux中 可以通过文件重定向指定命令的标准输入 标准输出和标准错误输出 在shell中 使用者可以利用 和 来进行输入输出重定向 文件重定向 续 command filename 将标准输出重定向到文件filename command1 filename 将标准输出重定向到文件filename command filename 将标准输出重定向到文件filename 追加 command filename2 1将标准输出和标准错误输出一起重定向到文件filename command2 filename 将标准错误输出重定向到文件filename command2 filename 将标准错误输出重定向到文件filename 追加 文件重定向 续 command filename2 1将标准输出和标准错误输出一起重定向到文件filename中 追加 commandfilename2 让command命令以文件filename为标准输入 以文件filename2为标准输出 command filename 让command命令以文件filename为标准输入 command delimiter 让command命令以标准输入作为输入 直到遇到delimiter分界符 文件重定向 续 command m 把标准输出重定向到文件描述符m中 command 关闭标准输入 5 5shell高级编程5 5 1命令排列 调度与替换 1 命令排列shell允许用户在不同的命令之间 放上特殊的排列字符 用户如果需要在一行中给

温馨提示

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

评论

0/150

提交评论