shell脚本介绍PPT课件_第1页
shell脚本介绍PPT课件_第2页
shell脚本介绍PPT课件_第3页
shell脚本介绍PPT课件_第4页
shell脚本介绍PPT课件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、2021/4/81课程内容 什么是shell 基本思路 变量、条件、判断和程序控制 函数 调试 正则表达式2021/4/82SHELL入门2021/4/83什么是shell 用户与linux系统间的接口 功能强大 bash2021/4/84Shell程序的特点 可快速、简单地完成编程 适合于编写一些执行相对简单任务的小工具 易于配置、维护和可移植 执行效率较低2021/4/85各种shellShell名名称称相关信息相关信息sh(Bourne)源于Unix早期版本的最初shellcsh,tcsh,zshcsh及其变体ksh,pdksh许多商业版本Unix的默认shelbash来自GNU项目,是

2、linux的主要shell,它的优点是可以免费获取其源代码,可移植性很好2021/4/86管道和重定向 重定向输出 ls -l out.txt ls -l out.txt 以下命令可以让标准输出和错误输出分别重定向 pkill sleep pkillout.txt 2pkillerr.txt pkill sleep pkillout.txt 2&1 pkill sleep /dev/null 2&1 输入重定向 管道 2021/4/87将shell做为程序设计语言 交互式程序$for file in *doif grep -l std $filethenmore $filefi

3、done 脚本程序2021/4/88通配符可以帮助我们 *号可以代表任何字符串,而?号可以代表任一一个字符 set可以表示一个集合,set可以取反 可以代表一种让你将任何的字符串组放入集合中 ls a.out, txt l 有特殊功能 more grep -l std * 也可以这样 more $(grep l std *)2021/4/89创建脚本 什么是脚本 一个脚本的示例#!/bin/sh#first shell programfor file in *do if grep -l std $filethenmore $filefidoneexit 02021/4/810脚本及执行 #!紧

4、跟的是执行后面文本的程序 #开始的是注释 脚本程序本质上被看成shell的标准输入 exit命令的作用是保证脚本程序返回一个有意义的退出码 脚本的扩展名或后缀是任意的,一般习惯上使用.sh 让脚本执行 /bin/sh first.sh 或加执行权限直接执行 也可以让当前shell直接执行 source first.sh . first.sh2021/4/811SHELL基础语法2021/4/812变量 变量并不需要之前事先声明 默认情况下,所有的变量都当做字符串处理并以字符串存储,即使他们被赋值也是如此 在shell中,可以通过$变量名来访问它的内容var=abcecho $var #abcr

5、es=1+2echo $res #1+2 可以用read读取用户的输入 read var echo $var2021/4/813 引号的使用 想要包含空白字符,使用双引号 如果把$包含在双引号中,倒做替换 如果把$包含在单引号中,不会发生替换,可以用转义符var=abcecho $varecho “$var”echo $varecho $var2021/4/814环境变量环境变量环境变量说明说明$HOME当前用户主目录 $PATH搜索路径$PS1命令提示符$PS2二级提示符,用来提示后续输入,通常为$IFS输入域分隔符,当shell读取输入时,用来分隔单词的一组字符,通常是制表符、空格、换行符

6、$0Shell脚本的名字$#传递给脚本的参数个数$Shell脚本的进程号,脚本通常用它来生成一个唯一的临时文件,如/tmp/tmpfile_$2021/4/815参数变量 如果脚本程序调用时带有参数,一些额外的变量就会被创建,即使没有变量传入,环境变量$#也依然存在,只是它的值为0参数变量参数变量说明说明$1,$2,$3 脚本程序的参数$*在一个变量中列出所有参数,各参数之间用IFS环境变量中的第一个字符分隔开,如果IFS被修改,那么S*的分隔方式也随之改变$*的一种变体,它不使用IFS环境变量2021/4/816条件 test或 布尔判断命令 test f file -f file 是命令,

7、所以要注意空格字符串比较字符串比较结果结果string1 = string2相同为真string1! = string2不同为真-n string不为空为真-z string如果为null则为真2021/4/817算术比较算术比较结果结果expr1 eq expr2两个表达式相等结果为真expr1 ne expr2两个表达式不等结果为真expr1 gt expr2如果1大于2结果为真expr1 ge expr2如果1大于等于2结果为真expr1 lt expr2如果1小于2结果为真expr1 le expr2如果1小于等于2结果为真文件测文件测试试结果结果-d file如果是目录则为真-e f

8、ile如果文件存在则结果为真,可能不能移植,尽量使用-f-f file文件是普通文件则为真-r file文件可读为真-s file文件大小不为0为真2021/4/818控制结构-if if语句 if conditionthen statementselsestatementsfi elif语句 给变量加上引号 当变量没值时也可以确保一个合法的测试2021/4/819控制结构-for for语句for var in valuesdostatementsdone 简单的for示例for foo in abc def 123doecho $foodone 使用$()for file in $(ls

9、f*.sh); domore $filedone 2021/4/820while循环 for特别适合于对一系列字符串进行处理,而while适合于处理不知道执行次数的情况while condition dostatementsdone 示例,一个简单的密码验证程序echo “Enter password:”read pass;while “$pass” != “abc123” ; doecho “Error, try again”read pass;done2021/4/821until语句 语法:until conditionndostatementsdone 与while相似,只是条件反过来

10、了until who | grep “$1” /dev/nulldosleep 60doneecho e aecho “* $1 has just logged in*”2021/4/822case语句 语法case var inpattern | pattern ) statements;pattern | pattern ) statements;esac 注意,每个模式行用双分号(;)结束case “$var” inyes) echo yes;no) echo no;*) echo default;esac2021/4/823case语句 case 只匹配一个分支,即使其他的分支也成立c

11、ase “$var” inyes | y | Yes | YES ) echo OK;n* | N* ) echo No;* ) echo otheresaccase “$var” inyes | y | Yes | YES ) echo OK;nN* ) echo No;* ) echo otheresac2021/4/824命令列表 and列表 statement1 & statememt2 &statememt3 & if -f filea & echo “hello” & -f fileb & otherthenecho “in if”e

12、lseecho “in else”fi OR列表 statement1 | statement2 | statement3 | 2021/4/825语句块 如果想在某些只允许使用单个语句的地方使用多条语句,可以把他们括在中来构造一个语句块get_confirm & grep v “std” $file $otherfilecat $otherfileechoadd2021/4/826函数2021/4/827函数 可以在shell中定义函数,如果写的shell程序是大型的,函数是一种很好的选择 在shell中定义函数,只需一个名字,一对括号和函数体function_name () sta

13、tements2021/4/828一个简单的函数foo()echo “function foo”echo “start script”fooecho “end script” 有函数的脚本程序依然是从顶向下执行的 必需有调用一个函数之前先定义,不存在函数向前声明的概念 当一个函数被执行时,脚本程序的位置参数($*,$,$#,$1,$2)会被替换为函数的参数,这也是读取传递给函数参数的办法,函数执行结束后,参数会恢复以前的值2021/4/829调用函数 可以用return命令让函数返回数字值 并可以用$?获取返回码 让函数返回字符串的常用方法是在函数中将返回值保存到变量中 此外,还可以echo一

14、个字符串,捕获其结果,如 foo() echo ABC;result=“$(foo)” 可以使用local关键字在shell函数中声明局部变量 return 0被认为是逻辑真2021/4/830命令2021/4/831命令 内部命令和外部命令 内部命令是由shell实现的,它不能做为外部程序被调用,效率较高 大多数内部命令同时提供独立运行的程序版本,这是PISOX规范所要求的2021/4/832命令 break命令 用于跳出for,while until循环 :命令 空命令 有时会被用于简化条件逻辑,相当于true while : 被当作无限循环 $(var:=value) 以防止shell把

15、var当作一个命令 continue 使for,while,untile跳到下一次循环2021/4/833source和点(.) .命令 点(.)用于在当前shell中执行命令 通常,当脚本执行外部命令或脚本时,会创建新的环境(子shell),但.可以让我们在当前环境下执行命令 可以使用.让当前shell的环境设置改变 source 同.命令2021/4/834echo 输出结尾带有换行的字符串 如何去掉换行符 Linux常用的解决方法: echo n “string to output” 还有: echo e “string to outputc” c表示去掉换行符 为了更好的移植性时,可考

16、虑使用printf2021/4/835eval命令 允许对参数求值,shell的内置命令foo=10 x=fooy=$xecho $y以上代码结果为$foofoo=10 x=fooeval y=$xecho $y结果为10 eval允许代码被随时生成并运行,非常有用,但调试复杂2021/4/836exit n命令 使用脚本程序以退出码n结束运行 如果没有指定一个脚本的退出码,那最后一条命令的状态将被用作返回值 在shell中,退出码0代表成功,1125是可以使用的错误代码。其余数字具有保留含义退出码退出码说明说明126文件不可执行127命令未找到128及以上出现一个信号2021/4/837ex

17、port命令 将做为它参数的变量导出到子shell中有效。默认情况下,一个shell中创建的变量在子shell中是不可用的。 一旦一个变量被导出,它就可以被该shell调用的任何脚本使用,也可以被后续依次调用的任何shell使用2021/4/838expr命令 将参数当作表达来求值 x=expr &x + 1 x=$(expr $x + 1) expr的功能很多表达式示值表达式示值说明说明expr1 | expr2 如果expr非零,则等于expr1,否则等于expr2expr1 & expr2只要有一个为零,则为零,否则等于expr1expr1 = expr2expr1 ex

18、pr2expr1 = expr2expr1 + expr2expr1 - expr22021/4/839printf 语法 printf “formart string” parameter1 parameter2 新版的shell支持这个命令 功能和c语言的函数printf相似 不支持浮点数输出 printf “%sn” helloprintf “%s %dt%s” “Hi There” 15 people2021/4/840set命令 为shell设置参数变量set abc def 123echo $1echo $2echo $3set $(date)echo $22021/4/841sh

19、ift 把所有参数变量左移一个位置,使$2变成$1,$3变成$2,以此类推。原来$1的值会被丢弃,$0保持不变 shift可以指定一次左移的个数 左移时,$*,$, $#会随之改变while “$1” != “” ; doecho “$1”shiftdone2021/4/842trap命令 指定当接收到信号后将要采取的行动 trap有两个参数: trap command signal 第一个参数是接收到信号所采取的行动,第二个是什么信号 如果command为-,则会重置信号处理方式为默认 如果command为,则会忽略某个信号 trap INT2021/4/843unset 从环境中删除变量和

20、函数foo=“Hello”echo $foounset fooecho $foo作用和foo=差不多,但不同2021/4/844find命令 find path options tests actions 选项选项选项含义含义-depth在查看目录本身之前先搜索目录的内容-follow跟随符号链接-maxdepths N最多搜索N层目录-mount(或-xdev)不搜索其他文件系统2021/4/845find命令 测试部分测试测试含义含义-atime N 文件在N天之前被最后访问过-mtime N文件在N天之前被最后修改过-name pattern 文件名匹配提供的模式-newer other

21、file文件比otherfile要新-type c文件的类型为c, c是特殊类型,d为目录 f为普通文件-user username文件拥有者是指定用户2021/4/846find命令 组合测试 可以用圆括号改变测试的优先级,不过为了不让shell 处理圆括号,需要进行转义find . (-name “_*” or newer file2 ) type f -print操作符,短格操作符,短格式式操作符,长格式操作符,长格式 含义含义!-not测试取反-a-and两个测试都必需为真-o-or两个测试有一个必需为真2021/4/847find命令 actions部分find . newer fi

22、le2 type f exec ls l ;魔术字符串是-exec或-ok命令的一个特殊类型,它将被当前文件的完整路径取代动作动作含义含义-exec command执行一条命令,必需以;结束-ok command与-exec类似,但在执行命令之前对每个要处理的文件提示用户确认,必需以;结束 -print默认动作,打印文件名-ls对当前文件使用命令ls-dils2021/4/848grep命令 General Regular Expression Parse 通用正则表达式解析器 语法:greap options PATTERN FILES 如果没有提供文件名,将搜索标准输入选项选项含义含义-c

23、输出匹配行的数目-E启用扩展表达式-h取消每个输出行的普通前缀-i忽略大小写-l只列出包含匹配的文件名-v模式取反2021/4/849正则表达式 正则表达式本质是一个匹配字符串特殊字符特殊字符含义含义行首$行尾.任意单个字符一个范围内的字符,或加表示不在一个范围内的字符2021/4/850正则表达式匹配模式匹配模式含义含义:alnum:字母与数字字符:alpha:字母:ascii:ASCII字符:blank:空格或制表符:cntrl:ASCII控制字符:digit:数字:graph:非控制、非空格:lower:小写字母:print:可打印字符:punct:标点符号字符:space:空白字符:upper:大写字母2021/4/851正则表达式选项选项含义含义?匹配是可选的,但最多匹配一次*必须匹配0或多次+必须匹配1或多次n必须匹配n次n,必须匹配n次或以上n,m匹配次数在n到m之间,包括n,mg

温馨提示

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

评论

0/150

提交评论