版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 Shell概述概述 第第8讲讲 Shell及其编程及其编程 2 shell脚本脚本 3 shell脚本变量脚本变量 1 Shell概述概述 lshell就是就是可以接受用户输入命令的程序可以接受用户输入命令的程序。lshell隐藏隐藏了操作系统低层的了操作系统低层的细节细节。lUnix下的图形用户界面下的图形用户界面Gnome和和KDE,有时也被叫,有时也被叫做做“虚拟虚拟shell”或或“图形图形shell”。 lLinux操作系统下的操作系统下的shell既是既是用户交互界面用户交互界面,也是控,也是控制系统的制系统的脚本语言脚本语言。l在在Linux系列操作系统下,系列操作系统下,s
2、hell是控制系统启动、是控制系统启动、X Window启动、和很多其他实用工具的启动、和很多其他实用工具的脚本解释程序脚本解释程序。1.1 Bourne Shell l 第一个第一个标准标准Linux Shell是是1970年底在年底在V7 Unix(AT&T第第7版)中引入,以其资助者版)中引入,以其资助者Stephen Bourne的名字命名。的名字命名。lBourne shell 是一个是一个交换式的命令解释器和命令编程语言交换式的命令解释器和命令编程语言, 可以运行为可以运行为login shell或者或者login shell的子的子shelll只有只有login命令可以调
3、用命令可以调用Bourne shell作为一个作为一个login shell。此时,。此时,shell先读取先读取/etc/profile文件和文件和$HOME/.profile文件文件l/etc/profile文件为所有用户文件为所有用户定制环境定制环境,$HOME/.profile文文件为本用户定制环境。件为本用户定制环境。shell读取用户输入。读取用户输入。1.2 C Shell lC Shell 是是Bill Joy在上世纪在上世纪80年代早期,在年代早期,在Berkeley的加利福尼亚大学开发的。的加利福尼亚大学开发的。l目的是让用户更容易的目的是让用户更容易的使用交互式功能使用交
4、互式功能,并,并把把ALGOL风格,适于数值计算的语法结构变风格,适于数值计算的语法结构变成了成了C语言风格语言风格。l它它新增新增了命令历史、别名、文件名替换、作了命令历史、别名、文件名替换、作业控制等功能业控制等功能 1.3 Korn Shell 在很长一段时间里,只有在很长一段时间里,只有两类两类shell供选择,供选择,Bourne shell用来编程,用来编程,C shell用来交互用来交互lAT&T贝尔实验室贝尔实验室的的David Korn开发了开发了Korn shell。lksh结合结合了所有的了所有的C shell的交互式特性,并的交互式特性,并融入融入了了Bourn
5、e shell的语法。的语法。l新增新增了数学计算,进程协作(了数学计算,进程协作(coprocess)、行内编辑()、行内编辑(inline editing)等)等功能功能。lKorn Shell 是一个交互式的命令解释器和命令编程语言。是一个交互式的命令解释器和命令编程语言。它符合它符合POSIX标准标准 1.4 Bourne Again Shell Bourne Again Shell ,简称,简称bash,1987年由布莱恩年由布莱恩福克斯开发的。也是福克斯开发的。也是GNU计划的一部分,用来计划的一部分,用来替代替代Bourne shell。bash是大多数类是大多数类Unix系统以
6、及系统以及Mac OS X v10.4默认的默认的shell,被移植到多种系统中,被移植到多种系统中lbash的语法针对的语法针对Bourne shell的不足做了很多扩展。的不足做了很多扩展。lbash的命令语法很多来自的命令语法很多来自Korn shell 和和C shell l作为一个交互式的作为一个交互式的shell,按下,按下TAB键即可自动补全已部分键即可自动补全已部分输入的程序名,文件名,变量名等等输入的程序名,文件名,变量名等等 1.5 查看用户查看用户shell l使用命令使用命令cat /etc/shells来查看来查看/bin/目录下目录下Ubuntu支持的支持的Shel
7、l lecho $SHELL命令查看当前用户的命令查看当前用户的shelll其他用户的其他用户的shell,可以在,可以在/etc/passwd文件中看到文件中看到 回目录回目录2 shell脚本脚本 shell脚本脚本是利用是利用shell的功能所写的一个的功能所写的一个纯文本程序纯文本程序,将,将各类各类shell命令预先放入到一个文件中,方便一次性执行命令预先放入到一个文件中,方便一次性执行的一个程序文件,方便管理员进行设置或者管理。的一个程序文件,方便管理员进行设置或者管理。 lshell脚本与脚本与Windows下的批处理相似,一个操作执行多个下的批处理相似,一个操作执行多个命令命令
8、lshell script 提供了数组、循环、条件以及逻辑判断等功能提供了数组、循环、条件以及逻辑判断等功能,可以直接以,可以直接以shell来写程序,而不必使用类似来写程序,而不必使用类似C程序语言等程序语言等传统程序编写的语法传统程序编写的语法2.2 执行执行shell脚本脚本 1. Shell脚本执行过程脚本执行过程 shell按照按照脚本中命令的出现的脚本中命令的出现的顺序顺序,从上而下、从左而右地,从上而下、从左而右地分析与执行分析与执行,可以用,可以用“&”把一个脚本的执行放入后台,但是把一个脚本的执行放入后台,但是当脚本运行到最后是不会等待这个进程的返回结果,解决方当脚本
9、运行到最后是不会等待这个进程的返回结果,解决方法是在脚本最后放法是在脚本最后放“ wait ” 任何加在任何加在#后面的数据将全部被视为批注文字而被忽略后面的数据将全部被视为批注文字而被忽略 2.2 执行执行shell脚本脚本 2. Shell脚本执行方式脚本执行方式 l直接命令执行直接命令执行lsh/bash 选项选项 脚本名脚本名 lsource 脚本名脚本名2.2 执行执行shell脚本脚本 2. Shell脚本执行方式脚本执行方式 l直接命令执行直接命令执行lsh/bash 选项选项 脚本名脚本名 打开一个子打开一个子shell读取并执行脚本中命令。该脚本文件可以读取并执行脚本中命令。
10、该脚本文件可以没有没有“执行权限执行权限”。sh或或bash在执行脚本过程中,在执行脚本过程中,选项选项如下如下:l-n:不要执行不要执行script,仅检查语法的问题,仅检查语法的问题l-v:在执行在执行script前,先将前,先将script的内容输出到屏幕上的内容输出到屏幕上l-x:进入跟踪方式,显示所执行的每一条命令,并且在进入跟踪方式,显示所执行的每一条命令,并且在行首显示一个行首显示一个“+”号号2.2 执行执行shell脚本脚本 2. Shell脚本执行方式脚本执行方式 l直接命令执行直接命令执行lsh/bash 选项选项 脚本名脚本名 lsource 脚本名脚本名在当前在当前b
11、ash环境下读取并执行脚本中命令环境下读取并执行脚本中命令该脚本文件可以没有该脚本文件可以没有“执行权限执行权限”通常用命令通常用命令“.”来替代来替代 回目录回目录3 shell脚本变量脚本变量 lshell脚本变量脚本变量就是在就是在shell脚本程序中保存,系脚本程序中保存,系统和用户所需要的各种各样的值。统和用户所需要的各种各样的值。lshell脚本变量可以分为:脚本变量可以分为:环境变量环境变量系统变量系统变量用户自定义变量用户自定义变量 3.1 系统变量系统变量 Shell常用的系统变量并不多,在做一些参数检测的时常用的系统变量并不多,在做一些参数检测的时候十分有用候十分有用按键按
12、键命令命令$#命令行参数的个数命令行参数的个数$n当前程序的第当前程序的第n个参数,个参数,n=1,2,.9$0当前程序的名称当前程序的名称$?执行上一个指令或函数的返回值执行上一个指令或函数的返回值$*以以“参数参数1 参数参数2 . ”形式保存所有参数形式保存所有参数$以以“参数参数1” “参数参数2” . 形式保存所有参数形式保存所有参数$本程序的本程序的(进程进程ID号号)PID$!上一个命令的上一个命令的PID$-显示显示shell使用的当前选项,与使用的当前选项,与set命令功能相同命令功能相同3.1 系统变量系统变量 例:分析名为例:分析名为sysvar.sh脚本的运行结果。脚本
13、的运行结果。sysvar.sh脚脚本的代码如下:本的代码如下: #!/bin/sh#to explain the application of system variables.echo $1 = $1 ; $2 = $2 ;echo the number of parameter is $# ;echo the return code of last command is $?;echo the script name is $0 ;echo the parameters are $* ;echo the parameters are $ ;运运行行结结果果 #!/bin/sh#to exp
14、lain the application of system variables.echo $1 = $1 ; $2 = $2 ;echo the number of parameter is $# ;echo the return code of last command is $?;echo the script name is $0 ;echo the parameters are $* ;echo the parameters are $ ;3.2 环境变量环境变量 l登入系统就获得一个登入系统就获得一个shell它占据一个进程,输入的它占据一个进程,输入的命令都属于这个命令都属于这个
15、shell进程的子进程,选择此进程的子进程,选择此shell后,后,获得一些环境设定,即获得一些环境设定,即环境变量环境变量。l环境变量环境变量约束约束用户行为,也用户行为,也帮助帮助实现很多功能,包括实现很多功能,包括主目录的变换、自定义显示符的提示方法、设定执行文主目录的变换、自定义显示符的提示方法、设定执行文件查找的路径等。件查找的路径等。常用的环境变量常用的环境变量 按键按键命令命令PATH命令搜索路径命令搜索路径,以冒号为分隔符以冒号为分隔符.但当前目录不在但当前目录不在系统路径里系统路径里HOME用户用户home目录的路径名目录的路径名,是是cd命令的默认参数命令的默认参数COLU
16、MNS定义了命令编辑模式下可使用命令行的长度定义了命令编辑模式下可使用命令行的长度EDITOR默认的行编辑器默认的行编辑器VISUAL默认的可视编辑器默认的可视编辑器FCEDIT命令命令fc使用的编辑器使用的编辑器HISTFILE命令历史文件命令历史文件HISTSIZE命令历史文件中最多可包含的命令条数命令历史文件中最多可包含的命令条数常用的环境变量常用的环境变量 按键按键命令命令HISTFILESI命令历史文件中包含的最大行数命令历史文件中包含的最大行数IFS定义定义shell使用的分隔符使用的分隔符LOGNAME用户登录名用户登录名MAIL指向一个需要指向一个需要shell监视修改时间的文
17、件监视修改时间的文件.当该文件当该文件修改后修改后,shell发送消息发送消息You hava mail给用户给用户MAILCHECKSHELL检查检查MAIL文件的周期文件的周期,单位是秒单位是秒MAILPATH功能与功能与MAIL类似类似.但可以用一组文件但可以用一组文件,以冒号分隔以冒号分隔, 每个文件后可跟一个问号和一条发向用户的消息每个文件后可跟一个问号和一条发向用户的消息SHELLSHELL的路径名的路径名TERM终端类型终端类型常用的环境变量常用的环境变量 按键按键命令命令TMOUTSHELL自动退出的时间自动退出的时间,单位为秒单位为秒, 0为禁止为禁止SHELL自动退出自动退
18、出PROMPT_COMMAND指定在主命令提示符前应执行的命令指定在主命令提示符前应执行的命令PS1主命令提示符主命令提示符PS2二级命令提示符二级命令提示符,命令执行过程中要求输入数据时命令执行过程中要求输入数据时用用PS3select的命令提示符的命令提示符PS4调试命令提示符调试命令提示符MANPATH寻找手册页的路径寻找手册页的路径,以冒号分隔以冒号分隔LD_LIBRARY_PATH寻找库的路径寻找库的路径,以冒号分隔以冒号分隔3.2 环境变量环境变量 例:使用例:使用env命令查看环境变量,并分析。命令查看环境变量,并分析。为了方便查看,使用重定向命令将环境变量存储到为了方便查看,使
19、用重定向命令将环境变量存储到enviroment文件中,命令:文件中,命令:env enviroment,然后,然后使用编辑器打开该文件使用编辑器打开该文件 3.2 环境变量环境变量 3.3 用户自定义变量用户自定义变量 例:哪些变量名是合法的例:哪些变量名是合法的desk&123 456abc desk123 _abc1_123 Add_99l用户定义的变量由用户定义的变量由字母、数字及下划线组成字母、数字及下划线组成,变量名第,变量名第一个字符不能为数字,变量名是大小写敏感的。一个字符不能为数字,变量名是大小写敏感的。lshell中的变量中的变量与与c语言中的变量完全不同,语言中的
20、变量完全不同,不用声明不用声明即即可使用,给变量赋值的同时也就声明了变量可使用,给变量赋值的同时也就声明了变量 3.4 变量的使用变量的使用 l引用引用变量时在变量名前面加上变量时在变量名前面加上 $ 符号符号l输出输出变量时用变量时用 echo l如果变量恰巧包含在其他字符串中,为了区分变如果变量恰巧包含在其他字符串中,为了区分变量和其他字符串,需要用量和其他字符串,需要用 将变量名括起来将变量名括起来 变量值的引用与输出变量值的引用与输出3.4 变量的使用变量的使用 l变量赋值的方式:变量赋值的方式:变量名变量名=值值 2. 变量的赋值和替换变量的赋值和替换例:例: day=monday
21、string=welcome!注意注意:给变量赋值的时候,:给变量赋值的时候,不能不能在在“=”两边两边留空格留空格 3.4 变量的使用变量的使用 l重置重置就相当于赋给这个变量另外一个值就相当于赋给这个变量另外一个值l清空清空某一变量的值可以使用某一变量的值可以使用unset命令命令 2. 变量的赋值和替换变量的赋值和替换l变量可以有条件的变量可以有条件的替换替换,替换条件放在一对大括,替换条件放在一对大括号号中中 $variable:-value3.4 变量的使用变量的使用 2. 变量的赋值和替换变量的赋值和替换l第二种替换第二种替换:变量为空时替换,而且变量的值会:变量为空时替换,而且变
22、量的值会发生改变发生改变 $variable:=value 3.4 变量的使用变量的使用 2. 变量的赋值和替换变量的赋值和替换l 第三种替换第三种替换:只有当变量已赋值时才用指定值替换:只有当变量已赋值时才用指定值替换$variable: +value 3.5 数字与数组的声明和使用数字与数组的声明和使用 1.数字与数组的声明数字与数组的声明shell中默认的赋值是对字符串赋值中默认的赋值是对字符串赋值 对数字或数组进行声明,则要使用到对数字或数组进行声明,则要使用到declare命令命令 3.5 数字与数组的声明和使用数字与数组的声明和使用 1. 数字与数组的声明数字与数组的声明decla
23、re命令的格式:命令的格式: declare +/- 选项选项 variable+/-:指定或关闭变量的属性:指定或关闭变量的属性a:定义后面名为定义后面名为variable的变量为数组(的变量为数组(array)类型)类型i:定义后面名为定义后面名为variable的变量为整数数字(的变量为整数数字(integer)类型)类型x:将后面的将后面的variable变成环境变量变成环境变量r:将变量设置成将变量设置成readonly类型类型f:将后面的将后面的variable定义为函数定义为函数3.5 数字与数组的声明和使用数字与数组的声明和使用 2. 数组的使用数组的使用 数组下标数组下标co
24、ng0开始,范围没有限制,不必使用连续分量开始,范围没有限制,不必使用连续分量 name = (value1 . valuen) /此时下标从此时下标从0开始开始nameindex = value /index为下标,从为下标,从0开始开始例:对数组进行声明并赋值例:对数组进行声明并赋值declare -a name=(a b c d e f ) /此时数组下标从此时数组下标从0开始开始name0=A /将第一个元素将第一个元素a修改为修改为Aname9=j /将第将第10个元素赋值为个元素赋值为j3.5 数字与数组的声明和使用数字与数组的声明和使用 2. 数组的使用数组的使用 取数组中的元素
25、的时候,语法形式如下:取数组中的元素的时候,语法形式如下: echo $arrayindex如果想要取数组的全部元素,则要使用:如果想要取数组的全部元素,则要使用: echo $array 3.6 shell的输入的输入/输出输出 1. echo输出命令输出命令使用使用echo可以输出文本或变量到标准输出,或者把字可以输出文本或变量到标准输出,或者把字符串输入到文件中,它的一般形式为:符串输入到文件中,它的一般形式为: echo 选项选项 字符串字符串 选项:选项:-n:输出后不自动换行:输出后不自动换行 -e:启用:启用“”字符的转换。字符的转换。 3.6 shell的输入的输入/输出输出
26、-e:启用:启用“”字符的转换字符的转换 a 发出警告声发出警告声 b 删除前一个字符删除前一个字符 c 最后不加上换行符号最后不加上换行符号 f 换行但光标仍旧停留在原来的位置换行但光标仍旧停留在原来的位置 n 换行且光标移至行首换行且光标移至行首 r 光标移至行首,但不换行光标移至行首,但不换行 t 插入插入tab v 与与f相同相同 插入插入字符字符 x 插入十六进制数所代表的插入十六进制数所代表的ASCII字符字符3.6 shell的输入的输入/输出输出 1. echo输出命令输出命令例:不换行输出字符例:不换行输出字符“hello world!” 例:例:t和和n的应用的应用 例:例
27、:x的应用的应用 3.6 shell的输入的输入/输出输出 2. read输入命令输入命令使用使用read语句语句从键盘或文件的某一行文本中从键盘或文件的某一行文本中读入信息读入信息,并将其赋给一个变量,如果只指定了一个变量,那,并将其赋给一个变量,如果只指定了一个变量,那么么read将会把所有的输入赋给该变量,将会把所有的输入赋给该变量,直到直到遇到第一遇到第一个个文件结束符文件结束符或或回车回车,一般形式为:,一般形式为: read variable1 variable2.lshell用空格作为多个变量之间的分隔符用空格作为多个变量之间的分隔符lshell将输入文本域超长部分赋予最后一个变
28、量将输入文本域超长部分赋予最后一个变量 3.6 shell的输入的输入/输出输出 2. read输入命令输入命令例:使用例:使用read语句为语句为name、sex、age三个变量分别三个变量分别赋值:赋值:rose、female、30 3.7 运算符和特殊字符运算符和特殊字符 1. 运算符运算符运算符运算符解释解释结合方式结合方式() 括号括号(函数等函数等)数组数组! 取反取反 按位取反按位取反 + -增量增量 减量减量+ -正号正号 负号负号* / %乘法乘法 除法除法 取模取模+ -加法加法 减法减法左移左移 右移右移3.7 运算符和特殊字符运算符和特殊字符 运算符运算符解释解释结合方
29、式结合方式 = 大于大于 大于等于大于等于= !=等于等于 不等于不等于& 按位与按位与按位异或按位异或|按位或按位或&逻辑与逻辑与|逻辑或逻辑或?:条件条件= += *= /= &=赋值赋值= |= =赋值赋值3.7 运算符和特殊字符运算符和特殊字符 例:创建例:创建/home/ycs/abc/test文件文件 (不管其是否存在)(不管其是否存在)1. 运算符运算符3.7 运算符和特殊字符运算符和特殊字符 2. 特殊字符特殊字符l 反斜线(反斜线() 反斜线反斜线是转义字符,它告诉是转义字符,它告诉Shell不要对其后面的那个字符不要对其后面的那个字符进行特殊处理,只
30、当做普通字符即可进行特殊处理,只当做普通字符即可 例:例:$arr的前面如果加了反斜线,那么它就是的前面如果加了反斜线,那么它就是普通字符,而不是数组普通字符,而不是数组 4 shell控制结构控制结构 4.1 test命令命令4.2 if语句语句 4.3 case语句语句4.4 while语句程序语句程序 4.5 until语句语句 4.6 for语句语句 4.7 循环控制语句循环控制语句 4.1 test命令命令 test命令用于命令用于检查检查某个某个条件是否成立条件是否成立,如果条件为真,则,如果条件为真,则返回一个返回一个0值。如果表达式不为真,则返回一个大于值。如果表达式不为真,则
31、返回一个大于0的的值,也可以将其称为假值值,也可以将其称为假值 格式为:格式为: test expression 或者或者 expression l 表达式一般是字符串、整数或文件和目录属性,并且表达式一般是字符串、整数或文件和目录属性,并且可以包含相关的运算符可以包含相关的运算符 l 运算符可以是字符串运算符、整数运算符、文件运算运算符可以是字符串运算符、整数运算符、文件运算符或布尔运算符符或布尔运算符 4.1 test命令命令 整数运算符整数运算符test命令中,用于比较整数的关系运算符如下:命令中,用于比较整数的关系运算符如下: 运算符运算符解释解释-eq两数值相等(两数值相等(equa
32、l)-ne两数值不等(两数值不等(not equal)-gtn1大于大于n2(greater than)-ltn1小于小于n2(less than)-gen1大于等于大于等于n2(greater than or equal)-len1小于等于小于等于n2(less than or equal)4.1 test命令命令 整数运算符整数运算符例:使用例:使用test判断两个数的大小,并查看返回值情况判断两个数的大小,并查看返回值情况 4.1 test命令命令 2. 字符串运算符字符串运算符用于字符串比较时,用于字符串比较时,test的关系运算符如下:的关系运算符如下: 运算符运算符解释解释z st
33、ring判断字符串判断字符串string是否为是否为0,若,若string为空字符串为空字符串,则为,则为truen string判断字符串判断字符串string是否为非是否为非0,若,若string为空字符为空字符串,则为串,则为falsetr1=str2判断两个字符串判断两个字符串str1和和 str2是否相等,若相等,是否相等,若相等,则为则为truestr1!=str2判断两个字符串判断两个字符串str1和和 str2是否不相等,若不相是否不相等,若不相等,则为等,则为true4.1 test命令命令 2. 字符串运算符字符串运算符例:使用例:使用test判断两个字符串是否相等,并查看
34、判断两个字符串是否相等,并查看返回值情况返回值情况 4.1 test命令命令 3. 文件运算符文件运算符运算符运算符解解 释释-e file判断判断file文件名是否存在文件名是否存在-f file判断判断file文件名是否存在且为文件文件名是否存在且为文件-d file判断判断file文件名是否存在且为目录(文件名是否存在且为目录(directory)-b file判断判断file文件名是否存在且为一个文件名是否存在且为一个block device-c file判断判断file文件名是否存在且为一个文件名是否存在且为一个character device-S file判断判断file文件名是否
35、存在且为一个文件名是否存在且为一个Socket-P file判断判断file文件名是否存在且为一个文件名是否存在且为一个FIFO(pipe)-L file判断判断file文件名是否存在且为一个连接文件文件名是否存在且为一个连接文件-r file判断判断file文件名是否存在且具有文件名是否存在且具有“可读可读”权限权限4.1 test命令命令 3. 文件运算符文件运算符运算符运算符解释解释-w file判断判断file文件名是否存在且具有文件名是否存在且具有“可写可写”权限权限-x file判断判断file文件名是否存在且具有文件名是否存在且具有“可执行可执行”权权限限-u file判断判断f
36、ile文件名是否存在且具有文件名是否存在且具有“SUID”属性属性-g file判断判断file文件名是否存在且具有文件名是否存在且具有“SGID”属性属性-k file判断判断file文件名是否存在且具有文件名是否存在且具有“Sticky bit”属属性性-s file判断判断file文件名是否存在且为文件名是否存在且为“非空白文件非空白文件”file1 nt file2 判断判断file1是否比是否比file2新新(newe than)file1 ot file2 判断判断file2是否比是否比file2旧旧(older than)file1 ef file2 判断判断file1与与fil
37、e2是否为同一文件是否为同一文件4.1 test命令命令 3. 文件运算符文件运算符例:判断文件是否存在,并查看返回值情况例:判断文件是否存在,并查看返回值情况 4.1 test命令命令 4. 逻辑运算符逻辑运算符例:判断例:判断$num的值是否在的值是否在10和和20之间之间 运算符运算符解释解释-a逻辑与逻辑与-o逻辑或逻辑或!逻辑非逻辑非4.2 if语句语句 if语句的结构分为:语句的结构分为:l 单分支单分支if语句语句l 双分支双分支if语句语句l 多分支多分支if语句语句 只判断指定的条件,当条件成立时执行相应的操作,否则只判断指定的条件,当条件成立时执行相应的操作,否则不做任何操
38、作。不做任何操作。格式为:格式为:if 条件测试命令条件测试命令then 命令序列命令序列fi4.2 if语句语句 例:输入一个整数,判断该数是否等于例:输入一个整数,判断该数是否等于0。脚本如下:。脚本如下: #!/bin/bashread -p please input a number: numif $num = 0 then echo the number of you input is 0fi4.2 if语句语句 if语句的结构分为:语句的结构分为:l 单分支单分支if语句语句l 双分支双分支if语句语句双分支的双分支的if语句在条件成立或不成立的时候分别执行不同的语句在条件成立或不
39、成立的时候分别执行不同的命令序列。格式为:命令序列。格式为:0?是是否否if 条件测试命令条件测试命令then 命令序列命令序列1else 命令序列命令序列2fi4.2 if语句语句 if语句的结构分为:语句的结构分为:l 单分支单分支if语句语句l 双分支双分支if语句语句l 多分支多分支if语句语句 在在shell脚本中,脚本中,if语句能够嵌套使用,进行多次判断语句能够嵌套使用,进行多次判断 。格式为:格式为:if 条件测试命令条件测试命令1then 命令序列命令序列1elif 条件测试命令条件测试命令2 then命令序列命令序列2 else命令序列命令序列3fi 成立?成立?是是否否成
40、立?成立?是是否否4.2 if语句语句 例:编写脚本,根据用户输入的字符判断例:编写脚本,根据用户输入的字符判断 #!/bin/bashread -p please input a (Y/N): strif $str = Y | $str = y then echo OK,please continue elif $str = N | $str = n then echo please try againelseecho please input y/Y or n/Nficase语句的格式为:语句的格式为:case $变量名变量名 in模式模式1)命令序列命令序列1;模式模式2)命令序列命令序
41、列2 ;*)默认执行的命令序列默认执行的命令序列esac 4.3 case语句语句 case行尾必须为单词行尾必须为单词“in”每一个模式必须以右括号每一个模式必须以右括号“)”结结束束两个分号两个分号“;”表示命令序列结束表示命令序列结束匹配模式中可是使用方括号表示一匹配模式中可是使用方括号表示一个连续的范围,如个连续的范围,如0-9使用竖杠符号使用竖杠符号“|”表示或。表示或。最后的最后的“*)”表示默认模式,当使表示默认模式,当使用前面的各种模式均无法匹配该变量用前面的各种模式均无法匹配该变量时,将执行时,将执行“*)”后的命令序列后的命令序列 例:编写脚本例:编写脚本shell,从键盘
42、输入数字,从键盘输入数字 1、2、3#!/bin/bashread -p please input a (Y/N): numcase $num in 1) echo the number of you input is 1 ; 2) echo the number of you input is 2 ; 3) echo the number of you input is 3 ; *) echo the number of you input is 1 2 3 ;esac 4.3 case语句语句 while语句语句是是shell提供的一种提供的一种循环循环机制,当条件为真的机制,当条件为真的
43、时候它允许循环体中的命令继续执行。否则退出循环时候它允许循环体中的命令继续执行。否则退出循环 4.4 while语句语句 while 条件测试命令条件测试命令 do命令序列命令序列done 语句格式:语句格式:例:编写脚本,输入整数例:编写脚本,输入整数n,计算,计算1到到n的和的和 4.4 while语句语句 #!/bin/bashread -p please input a number: nsum=0i=1while $i -le $n do sum=$sum+$ii=$i+1doneecho the sum of 1+2+3+.n is $sumuntil语句语句是当是当条件满足时退出
44、循环条件满足时退出循环,否则执行,否则执行循环,循环,语句格式为:语句格式为: 4.5 until语句语句 while 条件测试命令条件测试命令 do命令序列命令序列done例:编写脚本,输入整数例:编写脚本,输入整数n,计算,计算1到到n的和的和 4.5 until语句语句 #!/bin/bashread -p please input a number: nsum=0i=1until $i -gt $n do sum=$sum+$i i=$i+1doneecho the sum of 1+2+3+.n is $sumfor语句的格式:语句的格式: 4.6 for语句语句 for 变量名变量
45、名 in 取值列表取值列表 do 命令序列命令序列 done 例:计算例:计算1到到n的和的和 #!/bin/bashread -p please input a number: nsum=0i=1for i in seq 1 $n dosum=$sum+$ii=$i+1 doneecho the sum of 1+2+3+.n is $sum1. break语句语句 4.7 循环控制语句循环控制语句 break语句用于语句用于for、while和和until循环语句中,忽略循循环语句中,忽略循环体中任何其他语句和循环条件的限制,强行退出循环环体中任何其他语句和循环条件的限制,强行退出循环例:
46、编写脚本,输入整数例:编写脚本,输入整数n,但我们只计算,但我们只计算1到到10的和的和 4.7 循环控制语句循环控制语句 #!/bin/bashread -p please input a number: nsum=0i=1for i in seq 1 $n do if $i -gt 10 then break fi sum=$sum+$i i=$i+1doneecho the sum of 1+2+3+.n is $sum2. continu语句语句 4.7 循环控制语句循环控制语句 continue语句应用在语句应用在for、while和和until语句中,用于让语句中,用于让脚本跳过其
47、后面的语句,执行下一次循环脚本跳过其后面的语句,执行下一次循环 例:编写脚本,输入整数例:编写脚本,输入整数n,计算,计算1到到n的奇数和的奇数和 #!/bin/bashread -p please input a number: nsum=0i=1 4.7 循环控制语句循环控制语句 for i in seq 1 $ndoif $i%2 -eq 0 then i=$i+1 continue fisum=$sum+$ii=$i+1doneecho the sum of 1+2+3+.n is $sum回目录回目录5 Shell函数函数 5.1 函数的声明函数的声明5.2 函数的调用函数的调用 5
48、.3 函数的参数传递函数的参数传递shell函数允许将一组命令或语句形成一个可函数允许将一组命令或语句形成一个可用语句块。用语句块。shell把函数块存放在内存中,节省了程序加把函数块存放在内存中,节省了程序加载的时间;载的时间;shell以一种内部格式来存放这些函数,节省以一种内部格式来存放这些函数,节省了解释的时间;了解释的时间; 函数组成函数组成:函数名和函数体:函数名和函数体函数在使用前必须声明,有两种格式:函数在使用前必须声明,有两种格式:5.1 函数的声明函数的声明 function函数名()函数名() 命令命令1 函数名()函数名()命令命令1 例:定义一个函数,脚本如下例:定义
49、一个函数,脚本如下 5.1 函数的声明函数的声明 #!/bin/bashhello () echo todays date is date hello 5.2 函数的调用函数的调用 函数的调用:函数的调用:1. 在同一个脚本中,使用函数名直接调用函数在同一个脚本中,使用函数名直接调用函数 2. 函数在另外一个脚本中,调用方法函数在另外一个脚本中,调用方法例:两个脚本文件例:两个脚本文件/home/ycs/func.sh和和/home/ycs/shell-test/while.sh,它们不在同一目录,它们不在同一目录 脚本脚本func.sh的代码的代码 #!/bin/bashecho todays date is date脚本脚本/home/ycs/shell-test/while.sh的代码中定义了函数的代码中定义了函数 func.sh中调用中调用while.sh,需要将需要将func.sh的代码:的代码: #!/bin/bashfunction haha n=50 sum=0 i=1 for i in seq 1 $n do sum=$sum+$i i=$i+1 doneecho the sum of 1+2+3+.n is $sumhaha #!/b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论