




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 shell编程基础 本章主要介绍shell编程的基础知识 shell脚本的执行类似于Linux下的任何其他命令 脚本可以包含复杂的逻辑 也可以包含一系列Linux命令行指令 在一个shell程序内可以运行其他shell脚本 通过本章的学习 读者可以学到如何使用bash 最流行的Linuxshell之一 编写和执行简单的shell程序 还可以获得shell语法结构的概貌 2 3shell编程的意义 从命令行输入命令时 每输入一次命令 就可获得系统的一次响应 当需要经常一个接一个地连续执行命令 才能得到最后的结果时 这种操作方法就显得效率很低 在这种情况下 可以利用shell程序或者shell脚本实现这一目的 尽管可以使用命令历史功能 但是shell脚本能增加使用命令行参数替换和内部帮助的灵活性 2 3shell的基本语法 在正式进行shell编程之前 还需要先了解shell的基本语法 包括怎样在shell脚本中定义和使用变量 如何使用变量表达式 以及了解shell中的某些特殊字符在shell编程中的作用等 3 Shell脚本 Shell脚本shell还可以用来进行程序设计 它提供了定义变量和参数的手段以及丰富的程序控制结构 使用shell编程类似于DOS中的批处理文件 称为shellscript 又叫shell程序或shell命令文件 Shell脚本仅仅是文本文件而已 通常用编辑器创建 创建脚本的步骤 确定要执行的动作决定完成该命令使用什么命令用编辑器将命令序列存入文件中 3 1shell中的变量 shell也提供了说明和使用变量的功能 在shell程序中 所有变量的取值都是一个字符串 shell程序采用 var的形式来引用名为var的变量的值 1 shell定义的环境变量2 用户变量3 内部变量4 位置参数 5 shell程序的变量和参数 shell定义的环境变量和系统的工作环境有关的变量 这些变量用户可以重新定义用户定义的变量用户建立的变量都只是当前shell的局部变量 所以不能被shell运行的其他命令或shell程序所利用 环境变量 环境变量用于所有用户进程 一般环境变量均为大写 环境变量应用于用户进程前 必须用export命令导出 环境变量与本地变量设置方式相同 variable name valueexportvariable或exportvariable valueenv显示所有的环境变量 预留的环境变量 这些变量都有特殊的意义 不能够用做他用 HOME用户的根目录LOGNAME用户登录名MAIL保存用户邮箱路径MAILCHECK多长时间检查邮箱PATH保存进行命令或脚本查找的目录顺序 PS1shell提示符echoPS1 u h W 用户提示符 W 当前运行目录基名 w 当前运行目录的全路径 d 显示星期 月和日期号 h 运行shell的主机名 H 长主机名 v shell版本 n 新行 nnn 八进制表示的字符 s 显示当前shell t 按小时 分 秒显示时间 AM PM格式显示时间 u 当前用户名 PS2附属提示符 缺省为 SHELL保存缺省的shellTERM保存终端类型PWD当前目录EDITOR设置默认的编辑器 用户定义的变量 用户可以按照下面的语法规则定义自己的变量 变量名 变量值注意 在定义变量时 变量名前不应加符号 在引用变量的内容时则应在变量名前加 在给变量赋值时 等号两边一定不能留空格 若变量中本身就包含了空格 则整个字符串都要用双引号括起来 本地变量 本地变量在用户现在的shell生命期的脚本中使用 如果在shell中启动另一个进程或退出 此值将无效 使用变量时 如果用花括号将之括起来 可以防止shell误解变量值 variable name value给变量赋值echo variable name显示变量的内容echo variable name 如 test 1echo testecho test set显示所有的本地变量unsetvariable name清除变量 测试变量是否被设置 variable name value 若variable name为空或未设置 则用value代替variable name 否则不作替换 variable name的值不变 variable name value 若variable name为空或未设置 则用value代替variable name 否则不作替换 variable name的值改变 variable name message 若variable name为空或未设置 则message作为标准错误信息打印出来echo test Thisvariablehasnotbeenset variable name value 若variable name设置了 则用value代替variable name 否则不作替换 variable name的值不变 环境变量 环境变量用于所有用户进程 一般环境变量均为大写 环境变量应用于用户进程前 必须用export命令导出 环境变量与本地变量设置方式相同 variable name valueexportvariable或exportvariable valueenv显示所有的环境变量 全局变量 export命令可以将一局部变量提供给shell执行的其他命令使用 其格式为 export变量名也可以在给变量赋值的同时使用export命令 export变量名 变量值使用export说明的变量 在shell以后运行的所有命令或程序中都可以访问到 位置参数 位置参数是一种在调用shell程序的命令行中按照各自的位置决定的变量 是在程序名之后输入的参数 位置参数之间用空格分隔 shell取第一个位置参数替换程序文件中的 1 第二个替换 2 依次类推 0是一个特殊的变量 它的内容是当前这个shell程序的文件名 所以 0不是一个位置参数 在显示当前所有的位置参数时是不包括 0的 预定义变量 预定义变量和环境变量相类似 也是在shell一开始时就定义了的变量 所不同的是 用户只能根据shell的定义来使用这些变量 而不能重定义它 所有预定义变量都是由 符和另一个符号组成的 常用的shell预定义变量有 位置参数的数量 所有位置参数的内容 命令执行后返回的状态 用于检查上一个命令执行是否正确 在Linux中 命令退出状态为0表示该命令正确执行 任何非0值表示命令出错 当前进程的进程号 最常见的用途是用作临时文件的名字以保证临时文件不会重复 后台运行的最后一个进程号 0 当前执行的进程名 Shell脚本执行 脚本执行的方法shfile这实际上是调用一个新的bash命令解释程序 而把shell程序文件名作为参数传递给它 新启动的shell将去读指定的文件 执行文件中列出的命令 当所有的命令都执行完结束 该方法的优点是可以利用shell调试功能 sh file这种方式就是利用输入重定向 使shell命令解释程序的输入取自指定的程序文件 chmod xfile然后 file运行该文件 Shell脚本 事务标志 所有脚本都包括这行 表示注释 这一行用于描述该脚本的功能 用vi编辑文件1 内容如上所示保存文件 按esc 输入 wq给予执行权限chmod x 1 在编写shell时 第一行一定要指明系统需要那种shell解释你的shell程序 如 bin bash bin csh还是 bin tcsh 位置参数 1 0 2 相当于 find namepasswd print Shell脚本 read允许shell交互地从标准输入读入参数 然后将读入的值赋给变量 可以同时输入多个参数 用空格或tab分隔如在脚本中输入read a b c 在shell中输入参数123 分别赋值给a b c三个变量 如果参数数目多于变量数 则将多余的参数合并起来赋给最后一个变量 如果参数数目小于变量数 则多余的变量赋予一个空字符串 echo在屏幕上打印出指定的字符串 Shell脚本 把前面那个小脚本做修改如下 n表示不换行显示 shell程序设计的流程控制 和其他高级程序设计语言一样 shell提供了用来控制程序执行流程的命令 包括条件分支和循环结构 用户可以用这些命令建立非常复杂的程序 与传统的语言不同的是 shell用于指定条件值的不是布尔表达式而是命令和字符串 test测试命令 test用于检查某个条件是否成立 它可以进行数值 字符和文件三个方面的测试经常在条件语句和循环语句中被用来判断某些条件是否满足 语法格式 testexpression或者 expression 文件测试 testoptionfile或 optionfile 测试选项 bfile文件存在且是一个块文件 cfile文件存在且是一个字符文件 dfile文件存在且是一个目录 efile文件存在 ffile文件存在且是一个普通文件 gfile文件存在且设置了SetGID位 hfile文件存在且为一个符号链接 kfile文件存在且设置了Sticky位 pfile文件存在且为一个命名管道 rfile文件存在且可读 sfile文件存在且大小大于零 ufile文件存在且设置了SetUID位 wfile文件存在且可写 xfile文件存在且可执行 ofile文件存在且被有效用户ID所拥有 bin shif xscore then scorefi 字符串测试 testoptionstring或 optionstring 测试选项 zstring若string长度为0 则为真 nstring若string长度不为0 则为真测试两个字符串string1 string2若两个字符串相等 则为真string1 string2若两个字符串不相等 则为真 数值测试 testint1operatorint2或 int1operatorint2 操作符int1 eqint2若int1等于int2 则为真int1 neint2若int1不等于int2 则为真int1 ltint2若int1小于int2 则为真int1 leint2若int1小于等于int2 则为真int1 gtint2若int1大于int2 则为真int1 geint2若int1大于等于int2 则为真 复合表达式 expr若expr为假 则复合表达式为真expr1 aexpr2若expr1和expr2都为真 则为真expr1 oexpr2若expr1和expr2有一个为真 则为真 算术运算 expr以数值和算术运算符作为参数 计算结果 将其返回标准输出 expr4 59 合法算术运算符有 和 在 和 之前必须冠以反斜线 已防被SHELL先行解释 bash也能完成简单的算术运算 格式如下 expression var1 2var2 var1 10 1 echo var2exit用于结束SHELL脚本 可以带一个返回值 流控制语句 流控制语句ifif condition1 thencommands2elsecommands3fi Shell脚本 流控制 case语句 casestringinpattern1 commands pattern2 commands commands esac bin shecho n enteranumberfrom1to3 readanscase ansin1 echo youselectone 2 echo youselecttwo 3 echo youselectthree echo errorselection esac bin shecho n Doyouwishtoproceed y n readanscase ansiny Y Yes yes echo yesisselected n N No no echo noisselected echo unknownresponse esac select语句 select表达式是一种bash的扩展应用 尤其擅长于交互式使用 用户可以从一组不同的值中进行选择 selectvarin dobreakdone now varcanbeused bin shecho WhatisyourfavouriteOS selectvarin Linux GnuHurd FreeBSD Other dobreakdoneecho Youhaveselected var 循环语句 使用控制结构语句可以使一些复杂的操作变得简单明了 例如 当需要重复同样的操作时 使用重复语句可以使程序大大简化 并且使程序易懂 条理清楚 同其他的编程语言一样 shell常见的循环语句有for循环 while循环和until循环等 循环语句 循环语句for do done由for已经知道要循环多少次了while do done当满足while后面的条件时候就继续做until do done直到满足until后面的条件时才结束 for语句 Shell中的for循环语句与一般编程语言里的for语句有些不同 在shell中 for的作用是对一组参数都执行一个操作 循环 for for变量名in列表docommandsdone bin shforxin0123456789doecho xdone bin shfornamein ls doecho namedone bin shif d back thenmkdirbackfiforfilein ls doif f file thencp file back file bakfidone while语句 while语句是shell提供的另一种循环语句 它在指定条件为真时用于执行一组语句 条件一旦为假 循环就马上终止 如果指定条件开始就为假 循环将不会执行 循环 while whileconditiondocommandsdone bin shx 0while x lt10 doecho xx expr x 1 done 从文件中输入 bin shwhilereadLinedoecho Linedone test 跳出循环 breakcontinue bin shwhile doecho n Enteranumber 1 5 readanscase ansin1 2 3 4 5 echo youenter ans echo badanswer break esacdone 空
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中级会计师《中级经济法》考点融资租赁合同2篇
- 北京市行纪合同4篇
- 租赁合同模板商用3篇
- 农业碳汇项目碳排放权交易市场潜力及发展路径报告
- 农业碳汇项目碳排放权交易市场交易机制优化与创新发展报告
- 玲珑金矿安全培训平台课件
- 玫瑰痤疮课件
- 广西百菲乳业股份有限公司年产30000吨水牛奶制品扩建项目建设项目(非辐射类)环境影响报告表
- 广西上华林业有限责任公司年产8万立方米胶合板生产线项目环境影响报告表
- 安全教育理论培训课件
- 2025年私人住宅装修合同及详细工程清单
- 变压器装配工职业技能考核试卷及答案
- 潍坊工会社会工作者考试试题(含答案)
- 水利工程建设项目安全生产 风险管控“六项机制”建设标准
- 2025广东广州市海珠区人民检察院招聘劳动合同制司法辅助人员5人笔试备考试题及答案解析
- 师恩如灯照亮我们的成长路教师节主题班会课件
- 2025医学支气管哮喘防治考试题目及答案
- 2025年教育局遴选笔试重点解析
- 2025-2026学年北师大版数学小学三年级上册(全册)教案设计及教学计划
- 2025年部编版新教材道德与法治二年级上册教学计划(含进度表)
- 铭记历史缅怀先烈-珍爱和平开创未来
评论
0/150
提交评论