版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目六Shell编程了解Shell编程概念,熟悉test命令、字符串和算术运算符的使用方法;
熟悉条件语句和循环语句的语法结构;
能够熟练地应用Shell程序调用系统命令来管理操作系统。知识与能力目标培养网络安全意识和法律意识。素养目标项目相关知识
—Shell编程概述
—运行Shell脚本的方式
—字符串运算
—算术运算
—if条件语句
—test命令
—for循环语句项目实施
—任务6-1编写简单的Shell脚本程序
—任务6-2编写条件分支结构程序
—任务6-3编写循环结构程序目录项目相关知识
6.1.1
Shell编程概述
Shell编程指利用Shell的功能编写程序脚本。这些脚本是纯文本文件形式,其中包含Shell语法与命令(含外部命令),通过搭配正则表达式、管道命令与数据流重定向等功能,可以实现管理系统操作的目的。Shell程序脚本可以简单地看成批处理文件,这个文件由Shell与Linux操作系统的命令组成,不需要编译即可运行。
在编写Shell程序的时候需要注意如下几点:
(1)命令的执行是从上到下、从左到右进行的;
(2)命令、选项与参数间的多个空格都会被忽略掉;
(3)空白行也会被忽略掉,并且按Tab键生成的空白会被视为空白行;
(4)如果读取到换行符,就尝试开始运行该行(或该串)命令;
(5)如果一行的内容太多,则可以使用“\[Enter]”来延伸至下一行;
(6)加在“#”后面的代码会被视为注解文字。
项目相关知识6.1.2运行Shell脚本的方式
执行Shell脚本的方式有两种:一种是在编写Shell脚本时,在脚本文件中添加sh命令路径,然后在命令行使用sh调用执行该脚本文件;另外一种方式是直接给该脚本文件的所有者添加执行权限,然后使用./方式执行该脚本文件。
(1)在Shell脚本中修改PATH环境变量,添加sh命令路径,然后在命令行中输入“shShell脚本文件名”命令执行脚本文件。
①修改Shell脚本文件内容,在文件前面增加如下内容。
[root@localhost~]#viShell脚本文件名
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH
②执行该Shell脚本文件,命令如下。[root@localhost~]#shShell脚本文件名
(2)直接执行脚本文件。
给Shell脚本文件添加执行权限,再使用“./Shell脚本文件名”执行该脚本文件,命令如下。[root@localhost~]#chmodu+xShell脚本文件名
[root@localhost~]#./Shell脚本文件名项目相关知识6.1.3字符串运算
字符串运算主要包括字符串连接和截取字符串中的字符。1.字符串连接
要将两个或多个字符串连接成一个字符串,直接将要连接的字符串首尾相连即可。
例如,将“I”“like”“computer”3个字符串分别存放在str1、str2和str3中,将其连接为一个字符串后存放在str中,命令及结果如下。项目相关知识6.1.3字符串运算
字符串运算主要包括字符串连接和截取字符串中的字符。
2.截取字符串中的字符
使用“#通配符”可以截取通配符右边的字符串,使用“##通配符”可以截取通配符最后一次出现位置右边的字符串,使用“%通配符”可以截取通配符左边的字符串,使用“%%通配符”可以截取通配符第一次出现位置左边的字符串,使用索引号可以截取从某个位置开始的指定长度的字符串。下面以字符串str=https:///book为例介绍截取字符串中的字符的方法。(1)使用“#”删除第一个字符串左边的所有字符,包括字符串本身,保留右边的字符串,命令如下。
${str#*//}//此处通配符为*//,其中*表示任意字符
结果为/book。项目相关知识6.1.3字符串运算
字符串运算主要包括字符串连接和截取字符串中的字符。
2.截取字符串中的字符
(2)使用“##”删除最右边字符串左边的所有字符,包括字符串本身,保留右边的字符串,命令如下。
${str##*/}//此处通配符为*/,其中*表示任意字符
结果为book。
(3)使用“%”删除右边的字符串,包括字符串本身,命令如下。
${str%com*}//此处通配符为com*,其中*表示任意字符
结果为https://www.ryjiaoyu.。
(4)使用“%%”删除最左边字符串右边的字符串,包括字符串本身,保留左边的字符串,命令如下。${str%%/*}//此处通配符为/*,其中*表示任意字符
结果为https:。
(5)从第一个位置开始截取长度为5的字符串,命令如下。
${str:0:5}结果为https。项目相关知识6.1.4算术运算
常用的算术运算有加(+)、减(-)、乘(*)、除(/)和取余(%),在进行算术运算的时候,表达式要用(())括起来,即使用$((算术表达式))格式进行算术运算。
1.加法(+)、减法(-)运算
例如,编写Shell程序脚本,计算n1=70、n2=90两个数的和与差,结果分别存放在n和m中,程序脚本和输出结果分别如下所示。项目相关知识6.1.4算术运算2.乘法(*)、除法(/)、取余(%)运算
例如,编写Shell程序脚本,计算n1=50和n2=5两个数的乘积、商和余数,结果分别存放在m1、m2和m3中,程序脚本和输出结果分别如下所示。项目相关知识6.1.5if条件语句
if条件语句根据条件判断结果,选择执行某一个分支的程序结构,它通常用于解决需要在多条路径中选择执行某条路径的问题。条件判断语句中,“&&”表示与运算,“||”表示或运算。1.单分支、简单条件判断语句
单分支条件语句结构和简单的条件语句格式如下。
(1)if条件判断表达式then
语句
fi(2)if条件判断表达式then
语句1else
语句2fi项目相关知识6.1.5if条件语句
2.多分支、复杂条件判断语句
在问题有两种以上的解决方法或有多种不同判断的情况下,需要进行多重条件判断,然后选择其中一种有效方法。此时可以使用多分支条件语句,其语法格式如下。
if条件判断表达式1then
语句1elseif条件判断表达式2then
语句2
elseif条件判断表达式3then
语句3......else语句nfififi......项目相关知识6.1.6test命令
test命令通常用在条件判断表达式中,结合一些参数来对文件、数值或字符串等进行比较判断。1.文件判断
(1)判断文件类型
①-e:判断文件名是否存在,命令格式如下。
test–efilename②-f:判断文件名是否存在,并且是文件,命令格式如下。
test–ffilename③-d:判断文件名是否存在,并且是目录,命令格式如下。
test–dmkdirname
④-b:判断文件名是否存在,并且是一个区块设备,命令格式如下。
test–b/dev/sdb1⑤-c:判断文件名是否存在,并且是一个字符设备,命令格式如下。
test-c/dev/sdb1⑥-p:判断文件名是否存在,并且是一个管道文件,命令格式如下。
test-pfilename⑦-L:判断文件名是否存在,并且是一个链接文件,命令格式如下。
test–Lfilename项目相关知识6.1.6test命令(2)检测文件权限
①-r:检测文件是否具有读的权限,命令格式如下。
test–rfilename②-w:检测文件是否具有写的权限,命令格式如下。
test-wfilename③-x:检测文件是否具有可执行权限,命令格式如下。
test-xfilename④-u:检测文件是否具有SUID权限,命令格式如下。
test-ufilename
⑤-g:检测文件是否具有SGID权限,命令格式如下。
test-gfilename⑥-k:检测文件是否具有可执行权限的属性,命令格式如下。
test-kfilename⑦-s:检测文件是否为非空白文件,命令格式如下。
test-sfilename项目相关知识6.1.6test命令(3)比较两个文件
使用test命令可以比较系统中的文件及其相关属性。
①-nt:判断file1是否比file2新,命令如下。
testfile1-ntfile2②-ot:判断file1是否比file2旧,命令如下。
testfile1-otfile2③-et:判断file1与file2是否同一个文件,可用在硬链接的判断上,命令如下。
testfile1-etfile22.数值比较
使用test命令可以比较系统中的某些数值或者相关的属性,设n1的值为30,n2的值为90。
(1)-eq:判断两数值是否相等,命令如下。
test$n1-eq$n2
结果为假。
(2)-ne:判断两数值是否不相等,命令如下。
test$n1-ne$n2
结果为真。
(3)-gt:判断n1是否大于n2,命令如下。
test$n1-gt$n2
结果为假。项目相关知识6.1.6test命令(4)-lt:判断n1是否小于n2,命令如下。
test$n1-lt$n2
结果为真。
(5)-ge:判断n1是否大于等于n2,命令如下。
test$n1-ge$n2
结果为假。
(6)-le:判断n1是否小于等于n2,命令如下。
test$n1-le$n2
结果为真。3.字符串比较
(1)-z:判定字符串是否为空字符串,是则为true,命令如下。
test-zstring(2)-n:判定字符串是否为非空字符串,是则为true,命令如下。
test-nstring(3)==:判定str1是否等于str2,若相等,则传回true,命令如下。
test$str1==$str2(4)!=:判定str1是否不等于str2,若不相等,则传回true,命令如下。
test$str1!=$str2项目相关知识
6.1.7for循环语句
要重复执行某个操作时,可以使用循环语句,常见的循环语句有for循环语句,对应的语法结构如下。
forvarincon1con2con3...do
循环体语句
done
说明:var为循环变量,con1、con2、con3等为循环变量的取值,如果取值在一定范围内可以使用{起始值..终值}的形式。循环变量var的值从con1、con2、con3......中选取,每取一个值执行一次循环体,直到将in后面的值全部取完,结束for循环。项目实施
任务6-1编写简单的Shell脚本程序
(1)编写Shell脚本程序,在终端窗口中输出“HelloWorld!”。
①
编写脚本程序sh01.sh,命令及加代码如下。
[root@dns~]#vish01.sh#!/bin/bash#使用bash来运行该程序
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATH#配置环境变量,使得执行sh01.sh脚本的时候不需要带绝对路径
echo–e“HelloWorld!\n”#输出,e用于将双引号中的\转义为格式符
(2)编写Shell脚本程序,让用户输入姓和名,然后输出。
项目实施
任务6-1编写简单的Shell脚本程序①编写脚本程序sh02.sh,命令及代码如下。
[root@dns~]#vish02.sh
#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexportPATHread-p“请输入姓:”firstname#–p选项用于将输入内容的第一列识别为字符串read-p“请输入名:”lastnameecho-e“\n你的名字是:$firstname$lastname”
②运行sh02.sh脚本程序,命令及结果如下。
[root@dns~]#shsh02.sh
请输入姓:zhang
请输入名:san
你的名字是:zhangsan项目实施任务6-2编写条件分支结构程序(1)编写Shell脚本程序,查找系统中是否包含用户named,需要从用户文件/etc/passwd和密码文件/etc/shadow中查找是否有该用户。
①
编写sh05.sh脚本程序,命令及代码如下。
[root@localhost~]#vish05.sh#/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/binexportPATHs1=$(grepnamed/etc/passwd)s2=$(grepnamed/etc/shadow)ss1=${s1:0:5}ss2=${s2:0:5}iftest$ss1=="named"&&test$ss2=="named"thenecho"系统中包含named用户!"elseecho"系统中不包含named用户!"fi②运行sh05.sh脚本程序,命令及结果如下。
[root@localhost~]#shsh05.sh系统中包含named用户!
项目实施
任务6-2编写条件分支结构程序
(2)编写Shell脚本程序sh03.sh,输入任意两个字符串,判断两个字符串是否相等。
①
编写程序代码,命令及代码如下。
[root@localhost~]#vish03.sh#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:~/binexportPATHread-p"请输入字符串1:"str1read-p"请输入字符串2:"str2iftest$str1==$str2thenecho"$str1与$str2相等!"elseecho"$str1与$str2不相等!"fi②运行sh03.sh脚本程序,命令及结果如下。[root@localhost~]#shsh03.sh请输入字符串1:amy01请输入字符串2:amy01amy01与amy01相等![root@localhost~]#shsh03.sh请输入字符串1:amy01请输入字符串2:amy02amy01与amy02不相等!项目实施任务6-2编写条件分支结构程序(3)编写Shell脚本程序sh04.sh,输入任意两个数,比较两个数的大小。
①编写程序代码,命令及代码如下。
[root@localhost~]#vish04.sh#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:~/binexportPATHread-p"请输入数据1:"sum1read-p"请输入数据2:"sum2iftest$sum1-gt$sum2thenecho"$sum1大于$sum2!"elseiftest$sum1-lt$sum2thenecho"$sum1小于$sum2!"elseecho"$sum1等于$sum2!"fifi项目实施任务6-2编写条件分支结构程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年杭州高新区(滨江)科技局招考易考易错模拟试题(共500题)试卷后附参考答案
- 2026年杭州富阳市万市镇就业社保协管员招考易考易错模拟试题(共500题)试卷后附参考答案
- 2026年昭通市事业单位招考及易考易错模拟试题(共500题)试卷后附参考答案
- 2026年抚州市财政局办公室招考通讯员(聘用制)易考易错模拟试题(共500题)试卷后附参考答案
- 2026年怀化市芷江县事业单位招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2026年度湖北省潜江市事业单位公开招聘工作人员笔试易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西贺州市招考事业单位(第三批)工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西百色德保县招商促进局招聘政府编外人员1人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年广西河池市罗城仫佬族自治县工业信息化和商务局招聘3人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年过期药品回收处置流程试题及答案
- 2026年冀教版(三起)小学英语五年级下册期末学情自测卷及答案
- 人教部编版六升七语文暑假衔接作业完整版(可直接打印)
- 2025水利工程施工监理规范SL288-2025
- 2026年省级行业企业职业技能竞赛(家畜(猪)繁殖员)经典试题及答案
- 化工与材料试题及答案
- 职场中常见心理健康问题及缓解方法
- 中小学班级管理创新案例及经验分享
- 2026北京外国语大学纪检监察岗位招聘建设笔试模拟试题及答案解析
- 恒丰银行社会招聘在线测评试题
- 2026年《中华人民共和国行政复议法》解读
- 2026年广东高考政治真题试卷+解析及答案
评论
0/150
提交评论