版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、shell基础编程主要内容 shell脚本介绍 shell特殊字符 shell输入与输出 shell变量 算术运算 控制结构 函数Shell介绍Shell是一种具备特殊功能的程序,它是介于用户和UNIX/Linux操作系统的核心程序(kernel)间的一个接口程序。各种操作系统都有它自己的shell,DOS的shell就是文件;UNIX下有Bourne shell(/bin/sh)、C shell(/bin/csh)、Korn shell(/bin/ksh)、Bourne again shell(/bin/bash)、Tenex(tcsh)。shell介绍Shell程序( 脚本)相当于dos的
2、批处理文件,可简单到只有一条命令,也可以包括循环、条件语句、数学运算、文件测试、传送参数、控制结构的程序等,完成复杂的管理任务。Shell的另一个重要功用是提供个人化的用户环境,这通常在shell的初始化文件(.profile,.login,.cshrc,.tcshrc等)中完成,这些文件包括设置终端机键盘,定义窗口的特征,设置变量,定义查找路径、许可权限、提示符号和终端类型以及设置特殊应用程序所需要的变量。Shell脚本基本内容我们可以使用任意一种文字编辑器,比如nedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): # !/bin/sh
3、.符号#!用来告诉系统执行该脚本的程序,本例使用/bin/sh。编辑结束并保存后,如果要执行该脚本,必须先使其可执行: chmod +x filename此后在该脚本所在目录下,输入 ./filename 即可执行该脚本。shell中的特殊字符通配符 * ? ! 花括号 倒引号、单引号、双引号 “输入/输出重定向符 管道线 |其它符号: # ; & () & |正则表达式正则表达式在 shell、工具程序、Perl 语言中有非常重要的地位。正则表达式通过一些特殊符号表示特定的字符串模式。常见的特殊字符包括:字符 功能 置于待搜索的字符串之前,匹配行首的字$ 置于待搜索的字符串之
4、后,匹配行末的字 匹配一个字的字尾. 匹配任意单个正文字符str 匹配字符串 str 中的任意单个字符str 匹配不在字符串 str 中的任意单个字符a-c 匹配从 a 到 c 之间的任一字符* 匹配前一个字符的 0 次或多次出现 忽略特殊字符的特殊含义,将其看作普通字符正则表达式扩充的特殊字符:字符 功能+ 重复匹配前一项 1 次以上? 重复匹配前一项 0 次或 1 次j 重复匹配前一项 j 次j, 重复匹配前一项 j 次以上, k 重复匹配前一项最多 k 次j, k 重复匹配前一项 j 到 k 次s | t 匹配 s 或 t 中的一项(exp) 将表达式 exp 作为单项处理基本元字符集模
5、式匹配: 正则表达式匹配行首/行尾 行首: 行尾:$ 举例查找当前目录下面所有子目录查找当前目录下面所有子目录 ls -l|grep d查找文本文件中,以查找文本文件中,以a开头的行开头的行 more a.txt |grep a查找文本文件中,以查找文本文件中,以a结尾的行结尾的行 more a.txt |grep a$查找文本文件中,所有的空行查找文本文件中,所有的空行 more a.txt |grep $模式匹配: 正则表达式匹配单个字符 模式:. Eg:.abc.可以匹配可以匹配12abc34, ababc43等等cat a.txt | grep .abc.模式匹配: 正则表达式匹配0或
6、多个字符模式:*Eg:abc12*可以匹配如下可以匹配如下 abc123 abc14248876 12abc43 Ababcddd cat a.txt | grep abc*模式匹配: 正则表达式匹配单词 模式: 功能:匹配完整的单词 Eg:模式匹配: 正则表达式屏蔽特殊字符 功能:将字符串中的特殊字符去掉特殊意义 特殊字符$ . “ * | ( ) + ? eg:匹配包含匹配包含.字符的行:字符的行:.匹配包含匹配包含$的行的行: $匹配包含匹配包含的行:的行:模式匹配: 正则表达式匹配范围 功能:匹配特定的字符串或字符串集 Eg: 0123456789或或0-9:匹配任意数字匹配任意数字A
7、-Za-z:匹配任意字母匹配任意字母aa-zA-Zt:a开始任意字母开始任意字母t结尾结尾hHello:匹配匹配Hello或者或者hello0-9:匹配任一个非数字字符匹配任一个非数字字符a-zA-Z:匹配任一个非字母字符匹配任一个非字母字符模式匹配: 正则表达式匹配模式结果出现次数 patternn匹配模式出现匹配模式出现n次。次。 patternn,匹配模式出现最少匹配模式出现最少n次。次。 patternn,m匹配模式出现匹配模式出现n到到m次之间,次之间,n , m为为0 - 255中任意整中任意整数。数。模式匹配: 正则表达式举 例A2BAABA4,BAAAAB, AAAAAB, A
8、AAAAABA2,4BAAB,AAAB,AAAAB模式匹配: 正则表达式花括号 倒引号、单引号、双引号 实例 区别 倒引号内的字符串会被shell解释为命令,会进行置换处理 单引号内的字符都当做普通字符处理 双引号内的字符除了$、倒引号()、反斜线()、感叹号(!)外,均作为普通字符处理倒引号双引号单引号双引号内使用倒引号单引号内使用单引号return管道线 把一个命令的输出传递给另一个命令作为输入。 eg:ls | sortcat func.txt | grep -v #重定向( , ) 与管道相关,可以改变程序运行的输入来源和输出地点 输入重定向 输出重定向 输出重定向(追加)文件重定向标
9、准输出、输入及错误 在shell 中执行命令时,每个进程都和三个打开的文件相关联,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。文件重定向改变程序运行的输入来源和输出地点文件重定向改变程序运行的输入来源和输出地点 eg1:command filename $ date myfile eg2:command filename $ ls -l myfileeg3:command 1 filename $ ./test.sh 1 myfile eg4:command filename 2&1。 $ grep standard * grep.ou
10、t 2&1 说明:实际上可以看作 2 部分, filename(重定向标准输出)和2&1(把标准错误重定向到标准输出)。文件重定向举例 eg5:command 2 filename。 $ find / -name *.tmp -exec rm -f ; 2 myfile eg6:command 2 filename $ find / -name *.tmp -exec rm -f ; 2 myfile eg7:Command filename 2&1 $ grep standard * grep.out 2&1 eg8:Command filename 2 $
11、cat 2.txt文件重定向举例 eg9: Command myfile Hello there I am using a $TERM ternimal and my user name is $LOGNAME bye. MAYDAY 文件重定向举例shell 变量 shell变量简介 用户自定义变量 数组 位置变量 环境变量 变量的作用域shell变量简介 shell程序中也使用变量。关于shell变量的几点说明: (1) shell变量无类型之分。默认情况下,shell变量中存放的内容均被当作字符串。 (2) shell变量不需要预先定义。 (3) shell变量名 由字母、数字、下划线构
12、成,以字母或下划线开头 区分大小写用户自定义变量 变量的赋值、引用、取消 变量的读入 赋值方式: 变量名=值 (注意: =两侧不能有空格!) 引用方式: $变量名 或 $变量名 取消: unset 变量名1 变量名2 read 变量名1 变量名2 变量赋值变量引用变量赋值变量引用变量取消说明: 若赋给变量的值含有空格、Tab键或换行符,则赋值时需要使用双引号!说明: 变量的值可以作为长字符串的一部分。 引用变量方式: $变量名 或 $变量名 当变量值必须出现在长字符串的开头或中间时,最好采用$变量名方式!变量引用变量引用变量引用说明: 可以将一个命令的执行结果赋值给变量。有两种实现方式: 变量
13、名=命令表 变量名=$(命令表)说明: 可以使用read命令读入数据赋给变量。 若一次为多个变量读入数据,数据之间以空格或Tab键间隔。数组bash只提供一维数组,且不限定数组的大小,也不需要预先声明。数组的下标从0开始编号,可以是整数或算术表达式。 数组元素的赋值(2) 数组元素的引用 逐个数组元素赋值 数组名下标=值 整体赋值 数组=(值1 值2 值n) 单个数组元素 $数组名下标 所有非空数组元素 $数组名* 或 $数组名 为数组元素整体赋值. 为数组元素逐个赋值.为数组元素的引用. 其中, 表示数组中所有非空数组元素。位置变量在shell命令终端执行shell程序时,可以带有实参。与之
14、相对应,在shell程序内部需要有“形参”与实参相对应。在shell程序中,对“形参”有专门的名称,即位置参数或位置变量。实例: 执行shell程序merge完成合并两个文件到一个文件bash merge a1 a2 aa$0 $1 $2 $3 $9 $10 $* 或 $与位置变量有关的特殊变量$#: (传递到脚本的参数个数)$*: (以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个)$: (脚本运行的当前进程 ID号)$!: (后台运行的最后一个进程的进程ID)$: (与$#相同,但是使用时加上引号,并在引号中返回每个参数)$-: (显示shell使用的当前选项,
15、与set命令功能相同)$?: (显示最后命令的退出状态。0表示没有错误,其它任何值表示有错误)算术运算 执行整数算术运算的方式 方式1: (算术表达式) 方式2: let 算术表达式 方式3: expr 表达式方式1: (算术表达式)方式2: let 算术表达式说明: 算术表达式的构成及语法规则(优先级、结合性等)与c语言相同。 (2) 在算术表达式中,变量名可以直接使用,不需要加$。(1)(3) 凡是使用方式2的地方都可以使用方式1取代。方式3: expr 表达式说明: 使用expr命令只能进行简单的表达式运算。(2) 使用expr命令进行算术运算,运算符两侧必须有空格!否则,当作字符处理!
16、(比较和可见)(1)(3) 默认情况下,expr命令的结果显示在屏幕上;若要保存到变量中,可借助倒引号! (比较和可见)方式3: expr 表达式说明:(1) 使用*作乘法运算时需使用转义字符。因为*是通配符。(比较和可见)(2) 使用expr命令时,引用变量要使用$! 这一点和(算术表达式)以及let 算术表达式不同!(由可见)浮点数运算 bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。控制结构 条件测试 分支结构 循环结构条件测试 (1) 条件测试简介 (2) 条件测试中表达式的构成 (3) 特殊条件测试(1) 条件测试简介条件测试的三种常用形式:形式1: te
17、st 表达式形式2: 表达式 形式3: 表达式 说明: 形式1和形式2完全等价; 形式3在一些处理上略有差别! 表达式的构成非常丰富: 可以是与数值相关的表达式、与文件相关的表达式、与字符串相关的表达式,还可以由逻辑运算符连接构成复杂的条件表达式。实例: shell程序test功能为: 根据命令行输入的年龄显示其范围。条件测试形式1条件测试形式2条件测试形式3(2) 条件测试中表达式的构成与文件有关的测试表达式与字符串有关的测试表达式与数值有关的测试表达式逻辑运算符文件状态测试 格式:test 状态 或 状态 举例test w student.txtecho $? -x student.txt
18、 echo $? -e file 文件存在 -d directory 目录存在 -s file 文件大小大于0 -r file 文件可读 -b file 区块文件 -c file 字符文件 -f file 一般/正规文件 -w file 文件可写 -x file 文件可执行 -k file 设定了限定位 -g file 设定了组位 -u file 设定了user id -p file 管线字符串测试 命令格式 test string test string_operator string test string string_operator string string_operator st
19、ring string string_operator string 举例 -z $LOGNAME -n $LOGNAME 数值测试 命令格式number numeric_operator number number numeric_operator number 举例 100 -lt 110 NUMBER=100 $NUMBER -ge 100 900 -le 910 -a 100 -gt 99 逻辑操作符 逻辑操作符-a 逻辑与逻辑与-o 逻辑或逻辑或! 逻辑否逻辑否 举例 -x student.txt -a -w student.txt echo $? 分支结构(1) if命令(2) c
20、ase命令(1) if命令if 测试条件then 命令组1else 命令组2fiif 测试条件then 命令组1elif 测试条件2then 命令组2else 命令组3fiif 命令组1then 命令组2else 命令组3fi语法格式1:语法格式2:语法格式3:说明: 如果写在一行上,则用分号(;)隔开!实例: shell程序test功能为: 根据命令行输入的年龄显示其范围。条件测试形式1条件测试形式2条件测试形式3(2) case命令case 变量 in模式字符串1) 命令组1;模式字符串2) 命令组2;模式字符串n) 命令组n;模式字符串*) 命令组;esac语法格式:case语句#!/b
21、in/sh#case test 1echo -n enter a number between 1 and 3 pls.:read NUMcase NUM in 1) echo you entered 1 ; 2) echo you entered 2 ; 3) echo you entered 3 ;Y|y) echo “you entered $NUM” ; *) echo basename $0 exit 1 ;esac示例:循环结构(1) while命令(2) until命令(3) for命令(4) break命令和continue命令(1) while命令while 测试条件do 命
22、令组donewhile 命令组1do 命令组2done语法格式1:语法格式2:while 语法1#!/bin/bashx=0while $x -lt 10 ;do y=$x while $y -ge 0 ; do echo -n $y y=expr $y - 1 done echo $x x=expr $x + 1donewhile语法2#!/bin/bashwhile read LINEdo echo $LINEdone test.txtuntil循环 语法until 条件条件命令命令1命令命令2doneeg:#!/bin/sh#until test 2counter=0echo $coun
23、teruntil $counter -ge 100 do counter=expr $counter + 1 echo $counterdone条件发生在循环末尾,至少执行一次循环for 变量 in 值表do 命令组done语法格式1:for (表达式1;表达式2;表达式3)do 命令组done语法格式2:值表中的内容可以是: 多个字符串,以空格或Tab间隔 正则表达式 位置参数for循环 break命令和continue命令break 结束循环体continue 结束本次循环,继续执行下一次循环#!/bin/sh#breakoutwhile :do echo n “Enter any number 15:”read ANScase $ANS in1|2|3|4|5)echo “您键入正确的数字.”;*)echo “错误的输入,是否继续(y/n)?”read IS_CONTINUEcase $IS_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 天津城市职业学院《建筑结构材料》2024-2025学年第二学期期末试卷
- 稽核内部制度
- 篮球俱乐部内部管理制度
- 红十字会内部监督制度
- 进出口公司内部管理制度
- 盐城工业职业技术学院《大学体育二》2024-2025学年第二学期期末试卷
- 长春师范高等专科学校《初等几何》2024-2025学年第二学期期末试卷
- 湛江幼儿师范专科学校《影视艺术鉴赏》2024-2025学年第二学期期末试卷
- 四川中医药高等专科学校《三位角色绑定及动画》2024-2025学年第二学期期末试卷
- 四川民族学院《食品安全与卫生》2024-2025学年第二学期期末试卷
- 碧螺春茶叶介绍
- 搅拌站设备安装组织方案
- 学校冷冻食品配送投标方案
- 12345政务热线招录工作人员的笔试备考题库及答案详解一套
- 医院培训课件:《鼻胃管置入及拔出术》
- DBJT 13-505-2025 福建省既有钢结构检测与鉴定技术标准
- 《城市隧道工程施工质量验收规程》
- 机械应力与肾微环境变化-洞察与解读
- 2025年通辽单招题库及答案护理
- 2025至2030中国真空(泵和阀门)行业项目调研及市场前景预测评估报告
- 机场值机考试试题及答案
评论
0/150
提交评论