




已阅读5页,还剩75页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
shell编程 1 1认识shell及shell脚本 shell 命令解释器 其主要功能是负责解释和执行命令行上键入的内容 shell也提供了完善的编程能力 流行的shell有多种 如Bash Tcsh Ksh等 2 1认识shell及shell脚本 shell作用示意图 3 1认识shell及shell脚本 Shell类型 bin sh 最早的shell程序 已经被 bin bash所取代 bin bash 通常情况下Linux系统默认的shell bin ksh 贝尔实验室开发 兼容于bash bin zsh 基于ksh开发 功能更加强大 bin csh 语法和C语言相似 更多的考虑了用户界面的友好性 bin tcsh csh的增强版 取代csh 提供更多的功能 4 1认识shell及shell脚本 Bash的重要功能命令和文件补全命令历史记录功能命令别名设置功能通配符功能作业控制 前后台控制 5 1认识shell及shell脚本 shellscript就像是早期批处理文件 最简单的功能就是将多条指令汇整写在一起 只需执行一次就可以轻松处理复杂的动作 root serverroot vie1 sh内容如下 bin bashlsecho Hello world 说明 shell脚本是按行解释的 每个脚本的第一行总是以 bin bash开头在shell脚本中 以 开头的行表示注释shell将忽略对该行的处理 即不进行解释 显示和执行 6 认识shell及shell脚本 有两种执行shell脚本程序的方法 直接执行1给脚本e1 sh增加执行权 root serverroot chmoda xe1 sh2键入 el sh直接执行脚本 root serverroot e1 she1 shHello world 键入sh脚本名 root serverroot she1 shHello world 7 环境变量 环境变量在用户登录时 Linux系统会自动设置一些变量 这些变量的值决定了用户的工作环境和外观 因此称为环境变量 可用 env environment 列出所有的环境变量及内容 8 环境变量 常用环境变量HOSTNAME 代表主机名称 SHELL 当前环境下使用的shell程序 如果是bash的话 默认是 bin bash HISTSIZE 记录曾经执行过的历史命令条数 USER 用户的名称 ENV 用户所用的个性化环境设置文件的读取文件 HOME 代表用户的家目录 很多程序都可能会用到这个变量的值 MAIL 当使用mail命令收信时 系统会去读取的邮件信箱文件 PATH 执行文件搜索的路径 目录之间以冒号 分割 顺序很重要 决定查询顺序 PWD 当前工作目录 SHLVL环境变量 SHELL的层数 显示环境变量 echo 变量名 9 环境变量 可写的shell环境变量可以对它们进行赋值 大部分可写的shell变量都在登录过程执行 etc profile文件时初始化用户也可以修改自己的启动文件用户目录 bash profile来定制自己的运行环境环境变量一般是大写的 系统启动后自动加载 可写的环境变量用户也可以随时进行修改 root localhost echo PS1 u h W root localhost PS1 u h root localhost 10 环境变量 设置环境变量用户定义的普通变量通过导出也可以成为环境变量 环境变量就可以被其他的程序或下级子shell所访问 设置的命令是export 其格式如下 export变量名 root server exportMYVAR hello root server echo MYVARhello 11 本地用户变量 本地变量一般地 shell变量不需要先定义 就可以直接为其赋值 即在赋值的同时完成变量的定义 为变量赋值的格式如下 变量名 变量值 root serverroot a 1注意 在等号的左右两边不能出现空格 12 本地用户变量 当赋值的内容包含空格时 要使用 将内容括起来 否则只将空格前面的内容赋值给该变量 jacky bogon tom jacky sfather jacky bogon echo tomjacky sfather 13 本地用户变量 双引号中出现其它变量名时 在显示内容时会将该变量的内容显示出来 而单引号则只是原封不动的显示字符 即一些特殊字符失去意义 例如 jacky bogon name jacky jacky bogon test1 nameseven jacky bogon echo test1 nameseven jacky bogon test2 nameseven jacky bogon echo test2jackyseven 14 本地用户变量 反引号括起来的字符串被shell解释为命令行 jacky bogon mydate mytimeis date jacky bogon echo mydatemytimeis 2012年3月15日星期四13 20 23CST可使用declare指令来声明变量并设置变量的属性 root localhost桌面 declarea 10 root localhost桌面 echo a 15 本地用户变量 使用变量值在变量名前加上前缀 符号 variable echo mydate 大括号在不引起歧义的情况下也可以省略 以下例子表示使用变量时的不同情况 jacky bogon name jacky jacky bogon echo name seven注 带有大括号相当于拼合字符串jackyseven jacky bogon echo nameseven注 name和seven间无空格 表空串 jacky bogon echo nameseven注 name和seven间有空格jackyseven 16 本地用户变量 清除变量使用 unset 命令将其清除 jacky bogon tom jacky sfather jacky bogon echo tomjacky sfather jacky bogon unsettom jacky bogon echo tom 17 特殊变量 特殊变量 位置变量和特定变量参数如果要向一个shell脚本传递信息 可以使用位置参数来完成 0表示命令或shell脚本 无论脚本是否有参数 此值均可用 1 9表示位置参数 如果参数个数多于9个 则多出的参数将会被忽略 jacky bogon autobak sh etc home jacky usr boot opt lib 18 特殊变量 位置参数 请看以下位置参数示例 root servermyshell vie2 sh内容如下 bin bashecho 1 2 3 4 5 6 7 8 9 10 11 root servermyshell e2 shabcdefghijka b c d e f g h i a0 a1 19 特殊变量 位置参数 通过shift命令可以实现位置参数的左移 其格式如下 shift 前移量 位置参数移位示例 root servermyshell cate3 sh bin shshiftecho 1shift2echo 1 root servermyshell e3 shabcdbd 20 特殊变量 特定变量参数表示的相关控制信息 21 打印特殊变量 root servermyshell vispecialvar sh bin bashecho is echo is echo is echo is echo 0is 0 22 元字符 元字符 具有特殊的含义与作用 无法像普通字符那样使用它们 如果想把它们用作普通字符 比如说在echo语句中 就需要用一个反斜杠对它们进行转换 当然也可以使用单引号 将元字符或者含有元字符的变量字符串括起来 同样可以达到相同的目的 23 变量操作 read命令 用来从键盘或文件的某一行文本中读入信息 并将其赋给一个变量 一般形式 readvarible1varible2 jacky bogon readtestthisisatest jacky bogon echo testthisisatest jacky bogon readtest1test2 输入内容第一个空格之后的内容全部赋予最后一个变量thisisatest jacky bogon echo test2isatest 24 变量操作 25 变量操作 expr 该命令一般用于整数值 也可用于字符串 格式 exprargumentoperatorargument jacky bogon expr3 5 运算符两侧无空格原样输出3 5 jacky bogon expr3 5 任何一侧无空格均会被认为是语法错误8 jacky bogon var 8 jacky bogon expr var 5 可以使用变量参与运算3 jacky bogon expr var 8 使用 在 前避免认为其是通配符64 26 学习ShellScript shell脚本实质上就是一个文本文件 内容是多条命令和变量通过控制语句结合在一起来完成特定的功能 因此编辑shell脚本可以通过vim来实现 如使用脚本实现环境变量PATH的设置 在屏幕上显示 Ourfirstshellscript n 提示字符串 vie4 sh bin bash firstshellprogramPATH bin sbin usr sbin sur local bin usr local sbin exportPATHecho e Ourfirstshellscript n exit0 27 学习ShellScript 通常编写一个shell命令脚本程序需要经过以下几个基本步骤 1 打开vim等文本编辑器 准备输入脚本内容 2 添加shell定义语句 使linux操作系统知道用户使用哪一种shell语言 3 编写shell命令脚本程序 4 保存命令脚本程序并退出 5 使用 chmodu x 命令来修改这个脚本文件的权限使它可以执行 6 终端提示符后输入 脚本名称 或使用 sh脚本名称 来执行该脚本 7 如执行错误进行必要调试 转步骤4 执行 28 条件判断式 shell中提供了test命令来实现上述的条件测试功能 在shell脚本中条件测试既可以用在分支结构中 又可以用在循环结构中 29 条件判断式 test命令 1 test命令有两种使用格式 第一种是在test语句后加上测试条件 第二种是用方括号代替test 2 test命令的格式如下 test测试条件或 测试条件 30 条件判断式 文件测试 文件测试条件示例 root servermyshell test fe2 sh root servermyshell echo 0功能 测试文件e2 sh是否为普通文件 测试结果为e2 sh是普通文件 root servermyshell fe60 sh root servermyshell echo 1 31 条件判断式 文件测试 要求 测试文件le2 sh是否为符号连接文件 root servermyshell ln se2 shle2 sh root servermyshell Lle2 sh root servermyshell echo 0要求 测试文件 dev hda1是否是块设备文件 root servermyshell b dev hda1 root servermyshell echo 0 32 条件判断式 字符串测试 string1 string2功能 字符串string1和字符串string2相等string1 string2功能 字符串string1和字符串string2不相等 nstring1功能 字符串string1非空 zstring1功能 字符串string1为空 33 条件判断式 字符串测试 字符串测试示例 root serverroot echo LOGNAMEroot root serverroot LOGNAME root root serverroot echo 0 34 条件判断式 数值测试 expr1 eqexpr2功能 当表达式expr1的值与表达式expr2的值相等expr1 neexpr2功能 当表达式expr1的值与表达式expr2的值不相等expr1 gtexpr2功能 当表达式expr1的值大于与表达式expr2的值expr1 ltexpr2功能 当表达式expr1的值小于与表达式expr2的值expr1 geexpr2功能 当表达式expr1的值大于等于表达式expr2的值expr1 leexpr2功能 当表达式expr1的值小于等于表达式expr2的值 35 条件判断式 数值测试 root serverroot a 10 root serverroot b 20 root serverroot declare ic root serverroot c a b root serverroot echo c30 36 条件判断式 数值测试 root serverroot c eq30 root serverroot echo 0 root serverroot c eq 30 root serverroot echo 0 root serverroot c ne30 root serverroot echo 1 root serverroot c ge35 root serverroot echo 1 37 条件判断式 逻辑操作符 shell提供的逻辑操作符有三个 一是逻辑与 二是逻辑或 三是逻辑非 38 条件判断式 与或非 逻辑与操作符示例 root serverroot name Tom root serverroot password abc root serverroot name Tom a password abc root serverroot echo 0功能 测试变量 name是否等于 Tom 并且 password是否等于 abc 39 条件判断式 与或非 示例 root serverroot ls le3 sh rw r r 1rootroot41Jan1412 16e3 sh root serverroot re3 sh a xe3 sh root serverroot lecho 1功能 测试文件e3 sh是否同时具有读权限和可执行权限 40 条件判断式 与或非 root serverroot name Tom root serverroot password abc root serverroot name Tom o password 123456 root serverroot echo 0 41 条件判断式 与或非 逻辑非操作符示例 root serverroot ls le3 sh rw r r 1rootroot41Jan1412 16e3 sh root serverroot xe3 sh root serverroot echo 1 root serverroot xe3 sh root serverroot echo 0需要注意的是 逻辑非 的两边也必须各有一个空格 42 分支控制结构 在shell中有两种形式的分支结构 一种是if分支结构 另一种case分支结构 43 分支控制结构 if分支结构的基本格式如下 if条件测试1 then条件测试1为真时的语句序列 elif条件测试2 then 条件测试2为真时的语句序列 else 条件测试为假时的语句序列fi 44 分支控制结构 if分支结构示例一 用户输入字符串 判断其内容是否与存储在变量 name中的内容相同 root serverroot cate10 sh bin shname garfield echo n Pleaseinput readuservalueif uservalue name thenecho same elseecho difference fi 45 分支控制结构 执行 root serverroot e10 shPleaseinput abcdifference root serverroot e10 shPleaseinput garfieldsame 46 分支控制结构 if分支结构示例二 判断今天是不是星期一 root serverroot cate12 sh bin shtoday date u if today 1 thenecho TodayisMonday elseecho TodayisnotMonday fi 47 分支控制结构 执行 root serverroot dateSunJan1417 12 25CST2007 root serverroot e12 shTodayisnotMonday 48 分支控制结构 if分支结构示例三 判断用户指定文件的类型 root serverroot cate13 sh bin shusefile 1if d usefile thenecho directory elif f usefile thenecho normal elif b usefile thenecho blockdevice elif c usefile thenecho chardevice elseecho other fi 49 分支控制结构 执行 root serverroot e13 she13 shnormal 50 分支控制结构 case语句的结构如下 case值in模式1 语句组1 模式2 语句组2 语句组nesac 51 分支控制结构 case分支结构示例一 通过判断 1的值 设置用户指定文件的权限 root serverroot cate16 sh bin bashoption 1filename 2case optioninr chmodu r filename w chmodu w filename x chmodu x filename echo error exit1 esacexit0 52 分支控制结构 root serverroot ls labc rw r r 1rootroot161Jan1321 36abc root serverroot e16 shxabc root serverroot ls labc rwxr r 1rootroot161Jan1321 36abc 53 分支控制结构 case分支结构示例二 提示键入 y 或 n 根据实际输入执行相应分支 bin shecho n Pleaseinputyourchoice y n readchcase chiny Y yes YES echo goon n N no NO echo cancel echo error youshouldinput y n exit1 esacexit0 54 分支控制结构 执行 root serverroot e17 shPleaseinputyourchoice y n ygoon 55 循环结构 1 for循环其典型格式如下 for变量in值1值2 值ndo语句1语句2 done 56 循环结构 for循环示例一 显示全部位置变量参数 root serverroot cate19 sh bin bashforiin doecho idone root serverroot e19 shabc de abcde说明 如果省略了in 则默认从 或 中取值 57 循环结构 for循环示例二 显示 PATH变量中各目录的名称 root serverroot cate20 sh bin bashIFS fordirin PATHdols ld dirdoneecho Finished 58 循环结构 执行 root serverroot e20 shdrwxr xr x2rootroot4096Feb71996 usr local bindrwxr xr x2rootroot4096Feb182003 bindrwxr xr x2rootroot36864Aug2422 00 usr bindrwxr xr x2rootroot4096Feb182003 usr X11R6 binFinished 59 循环结构 for循环示例三 与C语言相似的格式用法 root serverroot cat e21 sh bin bashfor i 1 i 6 i dofor j 1 j i j doecho e c doneechodone 60 循环结构 root serverroot e21 sh 61 循环结构 while循环的格式如下 while条件do语句1语句2 done 62 循环结构 while循环示例 逐行显示一个文本文件的内容 忽略以符号 开头的行 并在所显示的每一行前加上行号 root serverroot cate23 sh bin bashcounter 1whilereadlinedoif line 0 1 thenecho counter line counter counter 1 fidone 1 63 循环结构 root serverroot e23 she23 sh1 counter 12 whilereadline3 do4 if line 0 1 then5 echo counter line 6 counter counter 1 7 fi8 done 1 64 循环结构 until控制结构 形式 until循环条件do程序段done 65 循环结构 实现循环输入结束的字母 直到符合条件时退出循环viuntil bin bashecho pressy Ytostop readinputuntil input Y input y doecho errorinput pleasetryagain readinputdoneecho stophere 66 循环结构 break和continuebreak命令允许跳出循环 通常在进行一些处理后退出循环或case语句continue的作用是跳出本次循环 进行下次循环 一个不带参数的continue命令只去掉本次循环的剩余代码 而continueN将会把N层循环剩余的代码都去掉 但是循环的次数不变 67 循环结构 bin bashforiin x y z doecho i forjin seq8 seq命令用来打印一个序列 后跟数字时从1开始doif j eq4 thenbreakfiecho j donedone 68 shell函数 函数的定义在shell中定义函数有两种格式 functionfuncname shellcommands 或funcname shellcommands 69 shell函数 定义函数示例 定义一个shell函数 root serverroot cate29 sh bin bashmyfunction echo Hello world 70 shell函数 调用shell函数示例 利用select循环
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 林学专业试题及答案
- 考研水产专业试题及答案
- 煤气专业试题及答案
- 客车专业试题及答案解析
- 汽车专业综合试题及答案
- 水暖专业试题及答案详解
- 飞行器总体设计课程导引课件
- 河北省唐山市路北区2024-2025学年三年级上学期期末数学试题
- 贵州省黔东南州凯里市凯里学院附属中学2024~2025学年九年级上学期第二次物理质量监测试卷(无答案)
- 普洱外墙保温施工方案
- 可爱的中国教案全册
- 小数除法竖式专项计算144题(有答案)
- 婚姻家庭咨询师(三级)电子教材
- 平凉市崆峒区大寨乡柳沟村地热水矿产资源开发利用方案
- 隧道安全质量培训课件
- 六年级上册语文期末复习句子专项训练及答案
- 2019人教版高中英语选择性必修一UNIT 1 People of Achievement 单词表
- 电力变压器基础知识课件
- JJG 373-1997四球摩擦试验机
- GB/T 37785-2019烟气脱硫石膏
- GB/T 29343-2012木薯淀粉
评论
0/150
提交评论