




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux命令第四讲-20121021一、Sell Script/etc/profile:初始化文件,类似windows的随系统启动并完成的一些操作。使用shell效果不好的情况:大任务的数学操作的浮点运算,跨平台移植(一般用C,java),复杂结构化编程(应选择C,JAVA等),影响全局的关键任务,安全性要求高的任务,大规模文件操作,图形界面,直接对硬件操作(应用汇编语言),私人,闭源的应用。脚本版本命令:bash version别名命令:alias a=aa查看命令类型:type 命令名1、学习前的基础准备1.1、sh类型Centos使用Bash,使用sh执行某个脚本,相当于使用Bash执行该脚本。基本用法rootkuzaman shell# sh scriptname.shhello worldl sh相当于bash执行 scriptname.sh(即使这个文件没有执行权限,使用sh也可以执行该文件)l Sh x scriptname 仍然是执行scriptname文件,但是执行的详细过程会打印出来,包括变量的赋值、判断和循环的执行过程等,通常用于调试脚本。sh接受来自管道符的数据:需要正常命令作为输入源,才能被sh解释执行。1.2、ssh远程登录OpenSSH工具客户端,集成在centos系统中,使用ssh协议,远程登录要另一台有ssh serverSsh登录到远程服务器,打开一个终端的命令格式为:Ssh root5 端口号默认22,要使用端口号必须使用 p 参数,其他使用端口号也需要该参数。退出远程模式:Ctrl + dl 向远程服务器发送命令并执行返回对方系统时间 ssh 8 date 然后需要输入密码 或者ssh root8 date打印对方服务器系统时间1.3、scp远程拷贝命令Scp是远程拷贝命令,对于备份和运维自动化均很重要。Scp使用ssh协议。Scp命令和cp命令比较类似,不同的是scp的拷贝是远程机器和本机之间的传输。l 将远程文件拷贝到本地格式:scp username5:/路径/文件名 /本地路径/目录/scp -r username5:/路径/目录/ /本地路径/目录/ -r表示传递文件夹 注意区别 注意区别l 将本地文件拷贝到远程格式:scp /本地路径/文件名 username5:/远程路径/目录/scp -r /本地路径/目录/ username5:/远程路径/目录/ 注意区别 注意区别带有端口的拷贝命令:参数 -P执行远程机的shell脚本:注意:需要让远程主机使用复杂命令或者脚本时,通常ssh ip cmd的模式会出现问题,这个时候需要在本地编写脚本,然后将脚本scp到远程,然后使用ssh ip “sh script”的模式完成自动化运维工作。1.4、crontab定时任务Crontab可以自动执行命令或者脚本。Shell script要实现完全的自动化,需要借助crontab的帮助。每一个用户都有一个crontab文件,写在不同用户的crontab中的命令,相当于该用户执行命令。使用crontab l查看当前用户的crontab;使用crontab e编辑当前用户的crontab,-e参数使用后,相当于使用vi打开了crontab文件,编辑后需要保存退出。每小时的第48分钟的时候,都会将ls的结果追加到/home/log.txt文件中:定时任务执行的结果,要从log里面看到:Crontab的基本格式:* * * * * cmd第1列表示分钟159 每分钟用*或者 */1表示第2列表示小时123(0表示0点)第3列表示日期131第4列表示月份112第5列标识号星期06(0表示星期天)第6列要运行的命令常用例子:*/2 * * * * sh /home/zhangzhe/rsync-yum.sh 每两分钟执行rsync-yum.sh这个脚本0 3 * * * scp r zhangzhe02:/var/log/httpd /data/log/每天3:00拷贝远程httpd日志到本地0 1 * * 1 sh /home/zhangzhe/allscan.sh每周一1:00执行allscan.sh这个脚本。0 1-9 * * * sh /home/zhangzhe/backup.sh每天1:00-9:00的0分执行backup.sh这个脚本。1.5、Echo1.5.1、Echo用来打印字符串l Echo打印的字串无引号,单引号,双引号均可l Echo开启解释转义功能参数 eEcho命令默认的关闭解释转义符的特殊含义,通过echo e参数可以打开解释功能。注意,被echo的内容需要用双引号引用才可以使用解释转移的功能:1.5.2、反单引号反单引号用于命令替换,即打印单引号中命令执行的结果1.5.3、单引号详解单引号在shell中有特殊作用,单引号中的东西所见即所得:可以看到,单引号中的系统变量不再有变量的特殊含义。1.5.4、双引号详解双引号可以保证有特殊含义的字符按照其特殊含义输出,没有特殊含义的字符可以保持原有格式。引号的最大作用是不掩盖特殊的$PWD的变量作用,同时保证aa和bb之间的空格数。一串字符串不加引号,shell认为的这串字符的格式是令人惊奇的,这种格式在某些情况下特别有用。这时候shell会把换行、制表符、多个空格全部当成一个空格。比如:1.5.5、反引号,命令替换利用反引号达到杀掉所有http进程,不用手工一个一个kill。老方法杀进程:pstree p | grep httpd 或ps -ef | grep httpd命令查看进程:其实上面的命令是不完美的,因为没有考虑到“grep httpd”命令的影响,可以使用grep v grep命令祛除显示grep进程。可以看到,被引用的命令先行执行,然后作为参数传递给kill命令。由于命令替换外面没有双引号引用,其按行排列的结构被替换成按照空格排列,使用echo命令查看一下:没有双引号的命令替换经常在一起使用,比如上例中。更常用的是在for循环中,只要使用到配置文件的for循环一定会用到这个特性。for server in cat iplist.txt,iplist.txt是一行一个的ip列表,传递给for循环,就变成空格分隔的ip地址。二、Shell script正式课程-201211041、参数定义参数规范:(1)字母开头,不能数字开头,不能全大写(防止与系统变量冲突),(2)限制变量范围。2、参数赋值普通参数赋值:赋值等号前后不能加空格3、变量的使用(1)注意事项3点: 变量赋值的时候,不能使用$ 调用变量的时候需要用$加变量名来使用,如:echo $abc显示变量abc的内容。 (左右大括号)为变量的鉴定符号,确定变量的范围,a=111, echo $ab报错,echo $ab (2)变量高级用法命令引用的值(即反单引号执行的命令)可以赋给变量,再次使用这个变量时双引号和不加引号是很有区别的, 区别是双引号保持命令格式,单引号直接显示引号内容,无引号则将命令结果按照分隔符是空格的数组来输出。(3)内置变量$? $?具体值涵义:上一个命令执行的退出状态码,成功0,非零表示不成功。上一命令放弃时 $?=1,ctrl + c表示在任何时刻都可以退出。双引号保持命令格式 aa=ls -l,echo “$aa”保持ls l命令,一行一行打印。思考为什么需要把$?赋值给一个变量?答:因为$?是跟随上一个命令执行的结果而变化的,如果想要在多个语句中使用第一次的$?则必须使用一个变量来获得它的值,才能保证使用过程中不会发生变化。4、参数传递:运行脚本、运行子shell、调用函数都会涉及参数。常用的参数变量有 $0, $1, $2, $, $*$0:代表shell脚本名称$1:代表第一个参数$2:代表第二个参数$:代表所有参数,但每个参数之间默认分隔开$*:代表所有参数,并且把所有参数当作连接后的一串字符串$* 不如$ 有用,$按照原格式传递,$*把所有参数当做一个参数传递。rootkuzaman shell# cat option.sh#!/bin/bashecho $0 is $0echo $1 is $1echo $2 is $2echo $ is $echo $* is $*echo -no double quote - #无双引号for i in $do echo $idonefor i in $*。echo -has double quote -#有双引号for i in $。for i in $*。注意例子中的双引号。如果没有双引号,两个for循环将输出相同的内容,思考原因。解释:就是因为双引号可以还原输出内容的原格式5、控制结构(1)if语句if语句的结束符是“fi”,5个空格是正确的关键!基本结构:if thencmdfiif ;thencmdfi“ ”是shell script判断的标志,只要是判断就要放在一对” ”中(也可以是” ”中)。判断不仅仅是数值的比较,也可以是文字的比较和文件是否存在等。(2)ifelse用法if 判断体 then #if下一行必须有then,或者同行写为”;then”cmdelsecmdfi #if结束标识符(3)ifelif用法if 判断体 then 表达式elif 判断体 then #if和elif下一行都需要加then表达式else 判断体 表达式 #else后面不加thenfi6、表达式常用判断:返回true如果.-e只是判断是否存在(文件,目录,其他等等)-f判断是否存在指定文件,file是一个regular文件(不是目录或者设备文件)-s文件长度不为0-d判断是否存在指定目录f1 -nt f2文件f1比f2新f1 -ot f2f1比f2老f1 -ef f2f1和f2都硬连接到同一个文件.!非-反转上边测试的结果。整数比较-eq等于 ,如:if $a -eq $b -ne不等于 ,如:if $a -ne $b -gt大于 ,如:if $a -gt $b -ge大于等于,如:if $a -ge $b -lt小于 ,如:if $a -lt $b -le小于等于,如:if $a -le $b 注意:整数的比较不能使用“=,=”等。(实际上,在某些情况下可以,不必了解)整数的比较可以不加引号。双方括号表示 不用转义 $a $b 等于 $a $b 字符串比较=等于,如:if $a = $b !=不等于,如:if $a != $b 小于,在ASCII字母顺序下.如:if $a $b 注意:在结构中大于,在ASCII字母顺序下.如:if $a $b 注意:在结构中需要被转义.-z字符串为null.就是长度为0.-n字符串不为null注意:字符串的比较需要把字符串使用双引号引用,这是好习惯。字符串的比较使用“=,”等符号,字符串没有大于等于这样的用法。只能使用逻辑或判断完成大于等于或者小于等于等判断:判断的高级写法“&”“&”连接两个或多个命令(判断也是命令),如果前一个命令成功或者返回true,那么下一个命令继续执行,如果第一个命令执行不成功,后面的命令也不会执行,“与”的意思。“|”“|”连接两个或多个命令,如果前一个命令执行成功,立即退出,不再执行之后的命令;如果前一个命令执行失败,继续向后执行,直到有执行成功的命令为止,“或”的意思。“|” ”&”没有优先级区分“|”其实就是一个可以顺序执行,直到有成功执行或者执行到最后没有命令的地方为止。if语句的替代写法:if $? -eq 0 then echo It is okfi可以替代 $? -eq 0 & echo It is okif -e 2.txt then echo It is okfi可以替代 -e 2.txt & echo It is okif else 语句的替代写法: $a = $c &echo True|echo False可以替代if $a = $c then echo Trueelse echo Falseif elif else语句的替代写法: $Flag eq 0 & echo “$1 file exists”|( $Flag eq 2 & Echo “$1 is not found”)| Echo “unknow error”可以替代If $Flag eq 0 ;then echo “$1 file exists”elif $Flag eq 2 ;then echo “$1 is not found”else Echo “unknow error”fi一对括号“()”可以改变”|”和”&”的执行顺序,仔细体会。代替写法到这一层级已经没有明显优势,不建议使用。注意,代替写法最好不要出现在判断后多个执行语句的情况,那样代码难以理解。例如:if -e file ;thenecho “exits”cp file file2rm filefifor语句for的基本用法for i in a b c:这里的 i 表示即将被赋值的变量,所以不能加$ for循环是shell script中最常用的循环。和c的for循环不同,shell的for循环实际上是for each循环,即for语句后紧跟一个变量,该变量将被送入循环,每次循环都会将in后的一个元素赋值给该变量,所以变量这里要使用没有$符号的。do和done标记了for循环的开始和结束。 for可以配合配置文件(有一定格式的内容),以分隔符rootkuzaman shell# cat ip_list.txt #/home/abc_log/#13#/home/abc_log/#051#/home/abc_log/#118#/home/abc_log/#0比较特殊的自动化远程操作手法,用在远程操作中,类似自动化判断期望结果:expect eofspwan passwd $nameexpect “”send “”expect “”send “”expect eofeoffor循环利器 seq命令seq 1 2 10:从1开始步长为2到最大值10结束,顶替c语言的for(i=1,i10,i+2)语句但seq语句只能用于for循环的循环因子变量(如:I,j,k等)可选范围列表。如果步进是1的话,直接写seq 1 10,中间的步进1直接省略:配合for的使用需要使用到反引号经典用法:for i in seq 1 20;do ssh 192.168.2.$i cat /etc/passwd|grep zhangzhe;donefor i in seq 1 500;do touch $i.txt;doneBKW补充:1.10的步长是1,且无法设置步长,也表示1到10的意思。continue用法下面是远程查看对方服务器是否是centos系统,如果是!则执行sshd在线更新功能,主要就是达到某种条件后,使用continue退出本次循环继续下次循环(跳过非centos的机器)。continue对于所有循环都有效,包括之后的while循环。while语句经典用法 这个例子用到整型计算,shell script中有若干种整形计算的方式,记住一种即可,在这里计算的表达式由“$( )”作为标志,括号里面填写表达式。while true语句while循环在shell script里面一个常用的地方就是创建一个死循环。比如,crontab只可以做到每分钟执行一次程序的精度,但是有的时候需要每2秒钟执行一次程序,这时候常常用到死循环,用于补充crontab只能一分钟执行一次的精度不足的情况。这个例子中的sleep代表该脚本在这个位置停止两秒钟。这个脚本会一直运行,直到强制退出ctrl+c。记住while true的写法,可以认为是固定写法。break语句在死循环中或者普通循环中,满足某一条件时,希望退出循环,之后的循环不再执行。这时候需要使用break语句。思考break和continue的区别。while read语句while read 后紧跟一个变量,隐性的为该变量赋值。(for 和read后的变量都是赋值操作,所以没有“$”符号。)cat /home/shell/ip_list.txt | while read linej将文本中的内容逐行复制给line变量(line是变量,不是关键字)。使用方法1:读取一个文件,管道给while read,然后while read会将该文件的每一行赋值给line变量,然后逐行循环,直到文件末尾。在循环的过程中可以对该变量进行操作。注意:初学者的脚本放在crontab中往往不能正确执行,这是因为很多地方需要用到绝对路径,而不能使用相对路径。比如cat iplist.txt如果手动运行,会打开当前的目录,这是没有问题的。但是放在crontab中,默认路径在用户的家目录,往往是不正确的。养成好习惯,在每个脚本开始的时候,如果需要使用路径,把路径定义为变量,之后使用该变量代替路径即可。使用方法2:管道形式的while
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年心脏病变的心电图解析模拟考试答案及解析
- 2025年风湿免疫科常见疾病诊疗技术考核答案及解析
- 2025年肿瘤学实践操作模拟测试卷答案及解析
- 2025年皮肤科激光祛斑治疗操作规范测试答案及解析
- 美术技能高考试题及答案
- 2025年病理学实验考试试题及答案
- 2025年临床药学患者用药合理性检查模拟考卷答案及解析
- 2025年医学工程科医疗设备维护保养技术考核模拟卷答案及解析
- 2025年放射科医师的CT影像解读能力检验答案及解析
- 新型显示产业园项目投资计划书
- 邮轮概论全套完整PPT教学课件
- 搬迁厂房应急预案
- 装饰装修施工技术及其质量通病及防治措施全套
- 四年级上册部编版作文教学计划
- 记者证考试复习题库汇总(含答案)
- 餐饮空间案例分析
- 食品发酵工程 00食品发酵工程课程教学内容
- 第三章卫星链路设计
- 沪科版九年级物理导学案(全册)
- GB/T 22589-2008镁碳砖
- 【百分题库合集】沥青混凝土摊铺机操作工试题题库
评论
0/150
提交评论