Linux系统管理与服务-H217_第1页
Linux系统管理与服务-H217_第2页
Linux系统管理与服务-H217_第3页
Linux系统管理与服务-H217_第4页
Linux系统管理与服务-H217_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、1第十七章 Shell脚本编程 理论部分理论部分2iptables默认包括哪些表、链?默认包括哪些表、链?对于入站数据访问,会经过哪些表、链进行处理?对于入站数据访问,会经过哪些表、链进行处理?课程回顾3掌握掌握Shell脚本的基础知识脚本的基础知识学会使用学会使用Shell变量变量学会编写简单的学会编写简单的Shell脚本脚本学会常见的条件测试操作学会常见的条件测试操作学会使用学会使用if条件语句条件语句 学会使用学会使用for、while循环语句循环语句学会使用学会使用case分支语句分支语句技能展示4用户的登录用户的登录Shell登录后默认使用的Shell程序,一般为 /bin/bash

2、不同Shell的内部指令、运行环境等会有所区别Shell的作用2-2rootlocalhost # cat /etc/shells/bin/sh/bin/bash/sbin/nologin/bin/tcsh/bin/csh/bin/ksh5编写脚本代码编写脚本代码使用vi文本编辑器每行一条Linux命令,按执行顺序依次编写编写第一个Shell脚本4-1rootlocalhost # vi first.shcd /boot/pwdls -lh vml*6赋予可执行权限赋予可执行权限使脚本具有可执行属性编写第一个Shell脚本4-2rootlocalhost # chmod +x first.sh

3、rootlocalhost # ls -l first.sh-rwxr-xr-x 1 root root 144 04-26 15:02 first.sh7执行脚本文件执行脚本文件方法一:脚本文件路径方法二:sh 脚本文件路径方法三:source 脚本文件路径编写第一个Shell脚本4-3rootlocalhost # ./first.sh/boot-rw-r-r- 1 root root 1.8M 2010-03-17 vmlinuz-2.6.18-194.el5必须有必须有 x x 权限权限rootlocalhost # sh /first.sh/boot-rw-r-r- 1 root r

4、oot 1.8M 2010-03-17 vmlinuz-2.6.18-194.el5rootlocalhost # source /first.sh/boot-rw-r-r- 1 root root 1.8M 2010-03-17 vmlinuz-2.6.18-194.el5不要求不要求 x x 权限权限8更完善的脚本构成更完善的脚本构成脚本声明注释信息可执行语句编写第一个Shell脚本4-4rootlocalhost # vi /first.sh#!/bin/bash# This is my first Shell-Script.cd /bootecho 当前的目录位于:pwdecho 其中

5、以vml开头的文件包括:ls -lh vml*输出友好提示信息输出友好提示信息9交互式硬件设备交互式硬件设备标准输入:从该设备接收用户输入的数据标准输出:通过该设备向用户输出数据标准错误:通过该设备报告执行出错信息重定向与管道操作3-1类型类型设备文件设备文件文件描述编号文件描述编号默认设备默认设备标准输入标准输入/dev/stdin/dev/stdin0 0键盘键盘标准输出标准输出/dev/stdout/dev/stdout1 1显示器显示器标准错误输出标准错误输出/dev/stderr/dev/stderr2 2显示器显示器10重定向操作重定向操作重定向与管道操作3-2类型类型操作符操作符

6、用途用途重定向输入重定向输入 将输出结果保存到指定的文件(覆盖原有内容)将输出结果保存到指定的文件(覆盖原有内容)将输出结果追加到指定的文件将输出结果追加到指定的文件 标准错误输出标准错误输出22将错误信息保存到指定的文件(覆盖原有内容)将错误信息保存到指定的文件(覆盖原有内容)22将错误信息追加到指定的文件中将错误信息追加到指定的文件中混合输出混合输出&将标准输出、标准错误的内容保存到同一个文件中将标准输出、标准错误的内容保存到同一个文件中11管道操作符号管道操作符号“|”将左侧的命令输出结果,作为右侧命令的处理对象格式:cmd1 | cmd2 . | cmdn重定向与管道操作3-3root

7、localhost # grep bash$ /etc/passwdroot:x:0:0:root:/root:/bin/bashteacher:x:500:500:BENET Linux Teacher:/home/teacher:/bin/bashrootlocalhost # grep “bash$” /etc/passwd | awk -F: print $1,$7 root /bin/bashteacher /bin/bash以冒号以冒号: :分隔,输出第分隔,输出第1 1、7 7个字段个字段12请思考:请思考:如何编写并执行一个Shell脚本文件?有哪几种重定向操作,各自的操作符号

8、是什么?管道操作符号“|”的用途是什么?小结13变量的作用变量的作用为灵活管理Linux系统提供特定参数,有两层意思:n 变量名:使用固定的名称,由系统预设或用户定义n 变量值:能够根据用户设置、系统环境的变化而变化变量的类型变量的类型自定义变量:由用户自己定义、修改和使用环境变量:由系统维护,用于设置工作环境位置变量:通过命令行给脚本程序传递参数预定义变量:Bash中内置的一类变量,不能直接修改Shell变量的作用、类型14定义一个新的变量定义一个新的变量格式:变量名=变量值变量名以字母或下划线开头,区分大小写,建议全大写查看变量的值查看变量的值格式:echo $变量名自定义变量4-1roo

9、tlocalhost # Product=Benetrootlocalhost # Version=4.0rootlocalhost # echo $ProductBenetrootlocalhost # echo $Product $VersionBenet 4.015赋值时使用引号赋值时使用引号双引号:允许通过$符号引用其他变量值单引号:禁止引用其他变量值,$视为普通字符反撇号:命令替换,提取命令执行后的输出结果从键盘输入内容为变量赋值从键盘输入内容为变量赋值 格式: read -p 提示信息 变量名自定义变量4-216设置变量的作用范围设置变量的作用范围格式1:export 变量名 .格

10、式2: export 变量名=变量值 . 两种格式可以混合使用自定义变量4-3rootlocalhost # echo $Product $VersionBenet 4.0rootlocalhost # export Product Versionrootlocalhost # bashrootlocalhost # echo $Product $VersionBenet 4.0rootlocalhost # exit导出为全局变量导出为全局变量子程序引用全局变量子程序引用全局变量17整数变量的运算整数变量的运算格式:expr 变量1 运算符 变量2 运算符 变量3 .常用运算符常用运算符加法

11、运算:+减法运算: -乘法运算: *除法运算: /求模(取余)运算: % 自定义变量4-418环境变量环境变量由系统提前创建,用来设置用户的工作环境配置文件: /etc/profile、/.bash_profile常见的环境变量:常见的环境变量:PWD、PATHUSER 、LOGNAME、UID、SHELL、HOMEPS1、$PS2特殊的Shell变量3-1rootlocalhost # echo $PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/

12、bin:/root/binrootlocalhost # PATH=$PATH:/root rootlocalhost # echo $PATH/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root19位置变量位置变量表示为 $n,n为19之间的数字rootlocalhost # ./myprog.sh one two three four five six特殊的Shell变量3-2$1$1,第,第1 1个位置参数个位置参数

13、$2$2,第,第2 2个位置参数个位置参数$6$6,第,第6 6个位置参数个位置参数20预定义变量预定义变量$#:命令行中位置变量的个数$*:所有位置变量的内容$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错$0:当前执行的进程/程序名特殊的Shell变量3-3rootlocalhost # cat mybak.sh#!/bin/bashTARFILE=beifen-date +%s.tgztar zcf $TARFILE $* & /dev/nullecho 已执行 $0 脚本,echo 共完成 $# 个对象的备份echo “具体内容包括: $*”

14、rootlocalhost # ./mybak.sh /etc/passwd /etc/shadow 已执行 ./mybak.sh 脚本,共完成 2 个对象的备份具体包括:/etc/passwd /etc/shadow21脚本应用思路脚本应用思路1. 确定命令操作(设计并执行任务)2. 编写Shell脚本(组织任务过程)3. 设置计划任务(控制时间,调用任务脚本)Shell脚本与计划任务rootlocalhost # mysqldump -u operator rootlocalhost # vi /opt/qnzx_dbbak/qnzx_dbbak.sh#!/bin/bashrootloca

15、lhost # crontab -e30 2 * * * /opt/qnzx_dbbak/qnzx_dbbak.sh22test命令命令测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值格式1:test 条件表达式格式2: 条件表达式 条件测试操作5-1至少应有一个空格至少应有一个空格23文件测试文件测试格式: 操作符 文件或目录 常用的测试操作符常用的测试操作符-d:测试是否为目录(Directory)-e:测试目录或文件是否存在(Exist)-f:测试是否为文件(File)-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)-

16、x:测试当前用户是否有权限执行(eXcute)条件测试操作5-2rootlocalhost # -d /etc/vsftpd rootlocalhost # echo $?0rootlocalhost # -d /etc/hosts rootlocalhost # echo $?1rootlocalhost # -e /media/cdrom & echo YESYES 返回返回0 0表示条件成立表示条件成立返回返回1 1表示条件不成立表示条件不成立逻辑与,逻辑与,“而且而且”的意思的意思24整数值比较整数值比较格式: 整数1 操作符 整数2 常用的测试操作符常用的测试操作符-eq:等于(Eq

17、ual)-ne:不等于(Not Equal)-gt:大于(Greater Than)-lt:小于(Lesser Than)-le:小于或等于(Lesser or Equal)-ge:大于或等于(Greater or Equal)条件测试操作5-3rootlocalhost # who | wc -l7rootlocalhost # $(who | wc -l) -gt 5 & echo Too many. Too many.rootlocalhost # $(who | wc -l) -ge 10 & echo = 10.用户数是否用户数是否 5 5用户数是否用户数是否 = 10= 10roo

18、tlocalhost # FreeCC=$(free -m | grep cache: | awk print $4)rootlocalhost # $FreeCC -lt 1024 & echo $FreeCCMB864MB空闲内存是否空闲内存是否 1024MB80% then 报警fiif 条件测试操作命令序列 fi 结束判断条件成立 then条件不成立29双分支结构双分支结构if语句的结构3-2if 条件测试操作 then 命令序列1 else 命令序列2fiif 80端口是否在监听 then 网站服务已在运行 else 启动httpd服务fiif 条件测试操作命令序列1 条件成立 th

19、en命令序列2 条件不成立 elsefi 结束判断30多分支结构多分支结构if语句的结构3-3if 条件测试操作1 then 命令序列1elif 条件测试操作2 then 命令序列2else 命令序列3fiif 分数为85100之间 then 判为优秀elif 分数为7084之间 then 判为合格esle 判为不合格fiif 条件测试操作1命令序列1 条件成立 then命令序列n 条件不成立 elseelif 条件测试操作2命令序列2 条件成立 thenfi 结束判断31单分支单分支if语句语句判断挂载点目录,若不存在则自动创建if语句应用示例3-1rootlocalhost # cat c

20、hkmountdir.sh#!/bin/bashMOUNT_DIR=/media/cdrom/if ! -d $MOUNT_DIR then mkdir -p $MOUNT_DIRfi当目录不存在时执行当目录不存在时执行rootlocalhost # ls -ld /media/cdrom/ls: /media/cdrom/: 没有那个文件或目录rootlocalhost # ./chkmountdir.shrootlocalhost # ls -ld /media/cdrom/drwxr-xr-x 2 root root 4096 05-05 07:18 /media/cdrom/32双分支

21、双分支if语句语句判断目标主机是否存活,显示检测结果if语句应用示例3-2rootlocalhost # cat pinghost.sh#!/bin/bashping -c 3 -i 0.2 -W 3 $1 & /dev/nullif $? -eq 0 then echo Host $1 is up.else echo Host $1 is down.fi判断判断pingping命令的检测结果,命令的检测结果,分别给出不同提示分别给出不同提示rootlocalhost # ./pinghost.sh 1Host 1 is up.rootlocalho

22、st # ./pinghost.sh 3Host 3 is down.33多分支多分支if语句语句判断分数范围,分出优秀、合格、不合格三档if语句应用示例3-3rootlocalhost # cat gradediv.sh#!/bin/bashread -p 请输入您的分数(0-100): GRADEif $GRADE -ge 85 & $GRADE -le 100 ; then echo $GRADE 分!优秀elif $GRADE -ge 70 & $GRADE -le 84 ; then echo $GRADE 分,合格else echo $G

23、RADE 分?不合格”fi判断分数所在区间,给出不判断分数所在区间,给出不同的分档结果同的分档结果rootlocalhost # ./gradediv.sh请输入您的分数(0-100):8989 分!优秀34读取不同的变量值,用来逐个执行同一组命令读取不同的变量值,用来逐个执行同一组命令for语句的结构for 变量名 in 取值列表do 命令序列donefor 收件人 in 邮件地址列表do 发送邮件donefor 变量=取值1取值1取值2取值ndone 结束循环do 命令序列取值n 已使用35批量添加用户批量添加用户用户名存放在users.txt文件中,每行一个初始密码均设为123456fo

24、r语句应用示例2-1rootlocalhost # cat /root/users.txtchenyedengchaozhangjierootlocalhost # cat uaddfor.sh#!/bin/bashULIST=$(cat /root/users.txt)for UNAME in $ULISTdo useradd $UNAME echo 123456 | passwd -stdin $UNAMEdone通过管道指定密码字串通过管道指定密码字串从列表文件读取用户名从列表文件读取用户名rootlocalhost # ./uaddfor.shrootlocalhost # tail

25、-3 /etc/passwdchenye:x:1011:1011:/home/chenye:/bin/bashdengchao:x:1012:1012:/home/dengchao:/bin/bashzhangjie:x:1013:1013:/home/zhangjie:/bin/bash36根据根据IP地址检查主机状态地址检查主机状态IP地址存放在ipadds.txt文件中,每行一个使用ping命令检测各主机的连通性for语句应用示例2-2rootlocalhost # cat /root/ipadds.txt11020roo

26、tlocalhost # cat chkhosts.sh#!/bin/bashHLIST=$(cat /root/ipadds.txt)for IP in $HLISTdo ping -c 3 -i 0.2 -W 3 $1 & /dev/null if $? -eq 0 ; then echo Host $IP is up. else echo Host $IP is down. fidone嵌套嵌套ifif语句判断连通性语句判断连通性从列表文件读取从列表文件读取IPIP地址地址rootlocalhost # ./chkhosts.shHost 1 is up.Host

27、10 is down.Host 20 is up.37重复测试某个条件,只要条件成立则反复执行重复测试某个条件,只要条件成立则反复执行while语句的结构while 条件测试操作do 命令序列donewhile 未猜中正确价格do 反复猜测商品价格donewhile 条件测试操作done 结束循环do 命令序列 条件成立条件不成立38批量添加用户批量添加用户用户名称以stu开头,按数字顺序进行编号一共添加20个用户,即stu1、stu2、stu20初始密码均设为123456While语句应用示例2-1rootlocalhost # cat uaddw

28、hile.sh#!/bin/bashPREFIX=stui=1while $i -le 20 do useradd $PREFIX$i echo 123456 | passwd -stdin $PREFIX$i & /dev/null let i+done序号递增,避免死循环序号递增,避免死循环循环条件:序号循环条件:序号=20=20rootlocalhost # ./uaddwhile.shrootlocalhost # grep stu /etc/passwd | tail -3stu18:x:1028:1028:/home/stu18:/bin/bashstu19:x:1029:1029

29、:/home/stu19:/bin/bashstu20:x:1030:1030:/home/stu20:/bin/bash39猜商品价格游戏猜商品价格游戏通过变量RANDOM获得随机数提示用户猜测并记录次数,猜中后退出循环While语句应用示例2-2rootlocalhost # vi pricegame.sh#!/bin/bashPRICE=$(expr $RANDOM % 1000)TIMES=0echo 商品实际价格为0-999之间,猜猜看是多少?while truedo read -p 请输入你猜测的价格数目: INT let TIMES+ if $INT -eq $PRICE ; t

30、hen echo 恭喜你答对了,实际价格是 $PRICE echo 你总共猜测了 $TIMES 次 exit 0 elif $INT -gt $PRICE ; then echo 太高了! else echo 太低了! fidone与实际价格比较,给出提示与实际价格比较,给出提示循环条件:循环条件:tureture若猜中则退出脚本若猜中则退出脚本提示猜测并记录次数提示猜测并记录次数rootlocalhost # ./pricegame.sh商品实际价格为0-999之间,猜猜看是多少?请输入你猜测的价格数目:500太高了!请输入你猜测的价格数目:250太低了!请输入你猜测的价格数目:375太高了

31、!请输入你猜测的价格数目:280太高了!请输入你猜测的价格数目:265太高了!请输入你猜测的价格数目:253恭喜你答对了,实际价格是 253你总共猜测了 6 次40请思考:请思考:for、while都能批量添加用户,两者有哪些区别?for循环使用的取值列表如何获得?如何避免while语句陷入死循环?小结41针对变量的不同取值,分别执行不同的命令序列针对变量的不同取值,分别执行不同的命令序列 case语句的结构case 变量值 in模式1) 命令序列1 ;模式2) 命令序列2 ;* ) 默认命令序列esaccase 控制指令 instart) 启动XX服务 ;stop) 停止XX服务 ;* )

32、显示服务脚本的用法esaccase 变量=模式1esac 结束分支命令序列1;有变量=模式2变量=其他值(*)默认命令序列无是否否命令序列2;有无是42击键类型识别击键类型识别提示用户输入一个字符判断出该字符是字母、数字或者其他字符case语句应用示例2-1rootlocalhost # cat hitkey.sh#!/bin/bashread -p 请输入一个字符,并按Enter键确认: KEYcase $KEY in a-z|A-Z) echo 您输入的是 字母。 ; 0-9) echo 您输入的是 数字。 ; *) echo 您输入的是 空格、功能键或其他控制字符。esac匹配小写或大写

33、字母匹配小写或大写字母匹配数字匹配数字0-90-9rootlocalhost # ./hitkey.sh请输入一个字符,并按Enter键确认:k您输入的是 字母 k 。rootlocalhost # ./hitkey.sh请输入一个字符,并按Enter键确认:8您输入的是 数字 8 。rootlocalhost # ./hitkey.sh请输入一个字符,并按Enter键确认:19您输入的是 空格、功能键或其他控制字符。按功能键按功能键F8F843编写系统服务脚本编写系统服务脚本使用start、stop、restart等参数来控制服务服务控制指令通过位置变量$1传入能够通过chkconfig命令来管理此服务case语句应用示例2-2rootloca

温馨提示

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

评论

0/150

提交评论