




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十课shell编程 硬件 核心与Shell 应用程序是在最外层 就如同鸡蛋的外壳一样 因此这个咚咚也就被称呼为壳程序 shell 啰 壳程序的功能只是提供使用者操作系统的一个接口 因此这个壳程序需要可以调用其它软件才好 这些命令都是独立的应用程序 但是我们可以透过壳程序来操作这些应用程序 让这些应用程序呼叫核心来运作所需的工作哩 这样对于壳程序是否有了一定的概念了 Linux使用的是哪一个shell呢 哪一个 难道说shell不就是 一个shell吗 哈哈 那可不 由于早年的Unix年代 发展者众 所以由于shell依据发展者的不同就有许多的版本 例如常听到的BourneSHell sh 在Sun里头预设的CSHell 商业上常用的KSHell 还有TCSH等等 每一种Shell都各有其特点 至于Linux使用的这一种版本就称为 BourneAgainSHell 简称bash 这个Shell是BourneShell的增强版本 也是基于GNU下发展出来的 第一个流行的shell是由StevenBourne发展出来的 为了纪念他所以就称为Bourneshell 或直接简称为sh 而后来另一个广为流传的shell是由伯克利大学的BillJoy设计依附于BSD版的Unix系统中的shell 这个shell的语法有点类似C语言 所以才得名为Cshell 简称为csh 由于在学术界Sun主机势力相当的庞大 而Sun主要是BSD的分支之一 所以Cshell也是另一个很重要而且流传很广的shell之一 目前我们的Linux有多少我们可以使用的shells呢 bin sh 已经被 bin bash所取代 bin bash 就是Linux预设的shell bin ksh Kornshell由AT TBelllab 发展出来的 兼容于bash bin tcsh 整合CShell 提供更多的功能 bin csh 已经被 bin tcsh所取代 bin zsh 基于ksh发展出来的 功能更强大的shell 虽然各家shell的功能都差不多 但是在某些语法的下达方面则有所不同 因此建议你还是得要选择某一种shell来熟悉一下较佳 Linux预设就是使用bash 所以最初你只要学会bash就非常了不起了 另外 咦 为什么我们系统上合法的shell要写入 etc shells这个档案啊 这是因为系统某些服务在运作过程中 会去检查使用者能够使用的shells 而这些shell的查询就是靠 etc shells这个档案 当我登入的时候 系统就会给我一个shell让我来工作了 而这个登入取得的shell就记录在 etc passwd这个档案内 History 这么多的指令记录在哪里呢 在你的家目录内的 bash history啦 不过 需要留意的是 bash history记录的是前一次登入以前所执行过的指令 而至于这一次登入所执行的指令都被暂存在内存中 当你成功的注销系统后 该指令记忆才会记录到 bash history当中 内建命令与外部命令 aliaslm ls al type tpa name选项与参数 不加任何选项与参数时 type会显示出name是外部指令还是bash内建指令 t 当加入 t参数时 type会将name以底下这些字眼显示出他的意义 file 表示为外部指令 alias 表示该指令为命令别名所设定的名称 builtin 表示该指令为bash内建的指令功能 p 如果后面接的name为外部指令时 才会显示完整文件名 a 会由PATH变量定义的路径中 将所有含name的指令都列出来 包含alias Shell的定义 shell是一种命令解释程序 shell解释用户输入的命令行 提交系统内核处理 并将结果返回给用户 与Linux命令一样都是实用程序 但两者又有区别 一旦用户注册到系统后 shell就被系统装入内存 并一直运行到用户退出系统为止 而一般命令仅当被调用时 才由系统装入内存 shell本身也是一种可编程的程序设计语言 用shell写的程序 shell脚本 相当于DOS WINDOWS环境下的批处理文件 它可以简单到只有一条命令 也可以复杂到包括大量循环 条件语句 数学运算 控制结构 也可以是介于两者之间的程序 Bash的特点 Bash是大多数Linux的缺省shell 它克服了Bourneshell的缺点又与之完全兼容 其特点如下 自动补全功能 输入命令或文件名时 只要按下Tab键就会在可能的命令或文件名中寻找匹配者 找自动补齐 命令行编辑程序 可以编辑命令行 命令历史 记录曾经输入的命令以备查用 如按向上键可以调出前一个命令 shell的基本功能 程序的运行当用户输入一行命令后 shell负责解释 分析输入的内容 并且决定做什么 同时替系统内核删除命令行中不必要的信息 包括空格符 水平制表符 换行符等 命令可以是一个可执行的Linux命令 程序 工具或shell脚本 例如 echo WelcometoTsinghuaUniversity echoWelcometoTsinghuaUniversity 变量 文件名的替换 文件名的替换shell在命令行中将文件名进行替换 事实上 shell在确定要执行的程序名和它的自变量之前 要对命令行扫描 找出元字符进行相应的文件名的替换 例如 ls xfile1file2file3file4 echo file1file2file3file4 输入输出重定向 shell处理命令行的输入输出重定向 它扫描命令行中特殊改向字符 msg catmsgPleasecallme 62781849 例1 将myfile1作为sort的输入 sortmyfile2例3 将ls l追加到myfile3文件中 ls l myfile3 管道 正如shell扫描命令查找重定向符一样 它也查找管道字符 对于所发现的每个管道字符 它将管道字符前面的命令的标准输出连接到管道字符后面的命令的标准输入中 然后启动两个程序的执行 例如 假设有8个用户上机 w wc l8 命令替换 当一个字符串被括在反撇号 中时 该字符串将作为命令被shell解释执行 即用命令的执行结果来替换这个字符串本身 此处大家要注意反撇号与单引号的区别 例如 now date echo nowdate now date echo nowTueMar211 31 53CST2004 shell变量 shell实际上是基于字符串的程序设计语言 但也有变量 shell变量能够而且只能存储正文字符串 即它只有一种类型的变量即串变量 但从赋值的形式上看 则可以分成四种类型的变量或变量形式 变量的名字必须以字母或下划线开头 可以包括字母 数字下划线 位置变量 位置变量是与变量所在位置有关的变量 这是一种特殊的变量 当一个shell过程被调用时 shell隐含地为它建立一系列位置变量 这种位置变量是系统预定义好的 可以直接引用 如命令行的shell过程名本身被指定为位置变量 0 第一个命令参数为 1 第九个命令参数为 9 例如 ls bin etc usr bin dev 0 1 2 3 4 5 内部命令shift的作用当位置变量个数超出9时 就不能直接引用位置大于9的位置变量了 必须用shift命令存取 每执行一次shift命令 删除 1位置变量 并使其它的所有位置变量向左移动一个位置 例如 0 1 2 3 4 5 6 7 8 9myprogabcdefghijshiftbcdefghijshiftcdefghijshiftdefghij 用set命令进行强制性赋值位置变量可以使用set命令进行强制性赋值 例如 setSunMonTueWedThuFriSta结果 1 2 3 4 5 6 7 setsunmontuewedthufrista echo 1sun echo 1 2 3 4 5 6 7sunmontuewedthufrista注意 0是不能用这种方法赋值的 环境变量 预定义的特殊变量 在shell中有一组特殊的变量 其变量名和变量值只有shell本身才可以设置 记录传递给shell的自变量个数 包含最近一次命令执行后的退出状态 执行成功返回码为0 执行失败返回码为1 记录当前shell的进程号 由命令行所有参数组成的一个字符串例1 myprogabc echo 3例2 iftest lt2thenecho twoormoreargsrequired exitfi 取最近一次命令执行后的退出状态 执行成功返回码为0 执行失败返回码为1 例如 test rmy file 假设my file文件不可读 echo 1 记录当前shell的进程号 shell脚本 显示当前的日期时间 执行路径 用户账号及所在的目录位置 在命令行中输入 viexample1在vi编辑器中输入下列内容 bin bash Thisscriptisatest echo n Dateandtimeis dateecho n Theexecutablepathis PATHecho Yournameis whoami echo n Yourcurrentdirectoryis pwd end 执行shell脚本 执行shell脚本的方式基本上有下述三种 1 输入定向到shell脚本 其一般形式是 bash 脚本名例如 bash example1 2 以脚本名作为参数 其一般形式为 bash脚本名 参数 例如 bashexample1如果以当前shell执行一个shell脚本 则可以使用如下简便形式 脚本名 参数 3 将shell脚本的权限设置为可执行 然后在提示符下直接执行它 使用chmode命令修改文件的属性 然后再执行例如 chmoda xexample1 example1 shell的控制结构 条件与test命令在程序设计语言中 作出决策的结构称为条件 在高级语言中决策的作出是依赖于基本运算的结果 在shell语言中 作出决策所依赖的条件是所执行命令的 出口状态 当shell命令或程序执行成功时 它返回一个 零 出口状态 即 为零 如果执行的命令或程序出错时 则返回一个 非零 的出口状态 即 不为零 If语句举例 bin bash ifstatementaplicationif 1 yes thenecho valueisyes elif 1 no thenecho valueisno elseecho invalidvalue fi end运行这个脚本 wuxy localhostpro bashexampl9yesvalueisyes case语句 用 字符串 的值依次与各模式字符串进行比较 如果发现同某一个匹配 那么就执行该模式字符串之后的各个命令 直至遇到两个分号为止 如果没有任何模式字符串与该字符串的值相符合 则执行 后面的命令 例 以月份数字作为参数 编写一个回显月份名的脚本 回显月份名 bin bashcase 1in1 echo monthisJanuary 2 echo monthisFebruary 3 echo monthisMarch 4 echo monthisApril 5 echo monthisMay 6 echo monthisJune 7 echo monthisJuly 8 echo monthisAugust 9 echo monthisSeptember 10 echo monthisOctober 11 echo monthisNovember 12 echo monthisDecember echo Invalidparameter esac end 运行脚本 wuxy localhostpro bashexampl2monthisFebruary 其它语句 要读取来自键盘输入的变量 就是用read这个指令了 这个指令最常被用在shellscript的撰写当中 想要跟使用者对谈 用这个指令就对了 read之后不加任何参数 直接加上变量名称 那么底下就会主动出现一个空白行等待你的输入 如范例一 如果加上 t后面接秒数 例如上面的范例二 那么30秒之内没有任何动作时 该指令就会自动略过了 read 提示使用者30秒内输入自己的大名 将该输入字符串作为名为named的变量内容 root www read p Pleasekeyinyou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年线上线下融合销售返点政策执行合同范本
- 2025年度新能源车辆租赁合同履约保证金及租赁法律风险防范协议
- 2025年文化创意产业全职员工劳动合同定制范本
- 2025年药用植物提取物品质监控与供应链整合采购合同
- 2025年直播带货品牌合作推广服务合同
- 2025版电动叉车驾驶员劳动合同范本及执行要点解析
- 2025年高科技园区工业用地场地平整及基础设施配套建设合同
- 2025年销售人才招募与团队业务增长保障服务协议
- 2025年企业级资料员专业能力提升培训服务合同
- 2025年校园安全设施安装及验收服务合同
- 2024年成都新都投资集团有限公司招聘笔试真题
- 产科危急重症管理制度
- 【生物 安徽版】2025年普通高等学校招生选择性考试(原卷版)
- 2025年《数字孪生与虚拟调试技术应用》课程标准
- 医院价格公示管理制度
- 地产交叉检查管理制度
- T/CACEM 22.5-2023校车运营服务管理第5部分:信息化管理规范
- 建设工程设计合同(业主、管理人、设计人三方)
- 新生儿竞赛试题及答案
- 龙舟体育考试试题及答案
- 家庭储能系统的市场前景分析
评论
0/150
提交评论