还剩8页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1、运行Shell脚本有两种方法1)作为可执行程序将上面的代码保存为test,sh,并cd到相应目录chmod+x./test,sh#使脚本具有执行权限./test,sh#执行脚本2)作为解释器参数这种运行方式是,直接运行解释器,其参数就是shell脚本的文件名,如/bin/sh test.sh3)当前shell环境执行,.a.sh或者source a.sh执行、,/和的使用区别2sh1)使用执行脚本,对应的xxx.sh脚本必须要有执行权限(绿色);2)使用sh〃执行脚本,对应的xxx,sh没有执行权限,亦可执行;如果我直接运行./a・sh,首先你会查找脚本第一行是否指定了解释器,如果没指定,那么就用当前系统默认的shell(大多数linux默认是bash),如果指定了解释器,那么就将该脚本交给指定的解释器比如a.「un文件内容是这个#!/usr/bin/python()print Thisis Pythonscript那么你如果运行结果就是输出一行文字,但是如果你运行会报错./a.run,sh a,nm,sh#!/bin/bash可以不写因为将a.sh作为参数传给sh(bash)命令来执行的,这时不是a.sh自己来执行,而是被人家调用执行,所以不要执行权限,采用系统默认解释器bash6)Shell文件包含例如,创建两个脚本,一个是被调用脚本subscript,sh,内容如下echo shell测试〃一个是主文件main,sh,内容如下#!/bin/bash../subscript.shecho$url执行脚本$chomd+x main,sh./main,shshell测试注意被包含脚本不需要有执行权限、变量2ShellShell变量的定义、删除变量、只读变量、变量类型)定义变量1Shell支持以下三种定义变量的方式variable=valuevariable=valuevariable=value#遍历文件夹for sfolderin$Is$folderdofolderMonth=${sfolder:0:6}echo临时文件:$folderMonthif[$lastMonth=$folderMonth]--上月二文件夹名thenrm-rf$folder/$sfolderecho”$sfolder删除成功”elseecho”$sfolder保留”done、面试题
221、liunix查看磁盘空间,查看内存空间命令dh-f dufree、查看日志某一行1liunxtail-n100filetail-n+100file从100行开始,显示后面的head-n100filesed-n510p‘file显示5-10行、查找文件命令2linuxfind locate变量的单引号和双引号的区别3#!/bin/bashurl二”中文网11websitel=中文网${url}*website2=中文网:${url}echo$websitelecho$website2运行结果中文网${url}中文网中文网11以单引号一包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令命令需要反引起来也会把它们原样输出这种方式比较适合定义显示纯字符串的情况,即不希望解析变量、命令等的场景以双引号“”包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出这种方式比较适合字符串中附带有变量和命令并且想将其解析后再输出的变量定义严长生的建议如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景单引号字串中不能出现单引号对单引号使用转义符后也不行双引号里可以出现转义字符将命令的结果赋值给变量4Shell也支持将命令的执行结果赋值给变量,常见的有以下两种方式variable=xcommandxvariable=$command、特殊变量3$0当前脚本的文件名$n传递给脚本或函数的参数n是一个数字,表示第几个参数例如,第一个参数是$1,第二个参数是$2$#传递给脚本或函数的参数个数$*传递给脚本或函数的所有参数$@传递给脚本或函数的所有参数被双引号包含时,与$*稍有不同,下面将会讲到$上个命令的退出状态,或函数的返回值$$当前Shell进程ID对于Shell脚本,就是这些脚本所在的进程IDProcessID PID当它们被双引号〃〃包含时,〃$*〃会将所有的参数作为一个整体,以〃$l$
2...$n〃的形式输出所有参数;$@〃会将各个参数分开,以〃$1〃〃$2〃.J$n〃的形式输出所有参数dollar请看下面的脚本test.sh#!/bin/bashecho FileName:$0echo FirstParameter:$1echo SecondParameter:$2echo QuotedValues:$@echo QuotedValues:$*echo TotalNumber ofParameters:$#运行结果$./test.sh ZaraAliFile Name:./test.shFirst Parameter:ZaraSecond Parameter:AliQuoted Values:Zara AliQuotedValues:Zara AliTotalNumber ofParameters:
2、运算符5ShellBash支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符)算数运算符1原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如awk和expr,expr最常用是一款表达式计算工具,使用它能完成表达式的求值操作expr例如,两个数相加#!/bin/bashval=expr2+2echo Totalvalue:$val注意表达式和运算符之间要有空格,例如2+2是不对的,必须写成2+2完整的表达式要被、包含算术运算符列表运算符说明举例+加法expr$a+$b结果为30o-减法expr$a-$b结果为10o*乘法expr$a\*$b结果为200o/除法expr$b/$a结果为2O%取余expr$b%$a结果为0o—赋值a二$b将把变量b的值赋给ao——相等用于比较两个数字,相同则返回true.[$a==$b]返回falseo1=*不相等用十比较两个数字,不相同则返回true[$a!=$b]返回trueo乘号*前边必须加反斜杠\才能实现乘法运算条件表达式要放在方括号之间,并且要有空格,例如[$a==$b]是错误的,必须写成[$a==$b]2关系运算符关系运算符只支持数字,不支持字符串,除非字符串的值是数字关系运算符列表运算符说明举例-eq检测两个数是否相等,相等返回true[$a-eq$b]返回trueo o-ne检测两个数是否相等,不相等返回true[$a-ne$b]返回trueo-gt检测左边的数是否大于右边的,如果是,则返回true[$a-gt$b]返回falseo o-It检测左边的数是否小于右边的,如果是,则返回true[$a-It$b]返回true-ge检测左边的数是否大等于右边的,如果是,则返回true[$a-ge$b]返回falseo-Ie检测左边的数是否小于等于右边的,如果是,则返回true[$a-Ie$b]返回trueo o3布尔运算符布尔运算符列表运算符说明举例!非运算,表达式为true则返回false,否则返回true[!false]返回trueo o,-o或运算有一个表达式为true则返回true[$a-It20-o$b-gt100]返回trueo o-a与运算,两个表达式都为true才返回true[$a-It20-a$b-gt100]返回falseo o4字符串运算符字符串运算符列表运算符说明举例=检测两个字符串是否相等,相等返回true[$a=$b]返回falseo!=检测两个字符串是否相等,不相等返回true[$a!=$b]返回trueo-z检测字符串长度是否为0,为返回true[-z$a]返回false-n检测字符串长度是否为0,不为0返回true[-n$a]返回trueostr检测字符串是否为空,不为空返回true[$a]返回true5文件测试运算符文件测试运算符用于检测Unix文件的各种属性例如,变量file表示文件^/var/www/tutorialspoint/unix/test.shn,它的大小为100字节,具有rwx权限file=,,/var/\mv/tutorialspoint/unix/test.sh〃if[-r$file]thenecho Filehas readaccess”elseecho Filedoes nothave readaccess”fi文件测试运算符列表操作符说明举例-b file检测文件是否是块设备文件,如果是,则返回true[-b$file]返回falseo-c file检测文件是否是字符设备文件,如果是,则返回true[-c$file]返回false,,-d file检测文件是否是目录如果是则返回true[-d$file]返回falseo-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true[-f$file]返回trueo-g file检测文件是否设置了SGID位,如果是,则返回true[-g$file]返回falseo-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true.[-k$file]返回falseo-p file检测文件是否是具名管道,如果是,则返回true[-p$file]返回falseo位-u file检测文件是否设置了SUID,如果是,则返回true[-u$file]返回falseo-r file检测文件是否可读,如果是,则返回true[-r$file]返回trueo-w检测文件是否可写,如果是,则返回true[-w$file]返回trueo ofile-x file检测文件是否可执行,如果是,则返回true[-x$file]返回trueo-s file检测文件是否为空(文件大小是否大于0),不为空返回true[-s$file]返回true-e file检测文件(包括目录)是否存在,如果存在,则返回true[-e$file]返回true
11、if else语句Shell有三种if...else语句if...fi语句;if...else...fi语句;if...elif...else...f i语句
12、test命令Shell中的LesL命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试1)数值测试参数说明-eq等于则为真-ne不等于则为真-gt大于则为真-ge大于等于则为真Tt小于则为真-le小于等于则为真例如numl=100num2=100if test$[numl]-eq$[num2]thenelseecho The two numbers are equal!’echoThetwonumbersarenot equal!’Fi14for循环语法for变量in列表docommand1command2•••commandN done列表是一组值数字、字符串等组成的序列,每个值通过空格分隔例子显示主目录下以.bash开头的文件#!/bin/bashfor FILEin$H0ME/.bash*doecho$FILEdone运行结果/root/.bash_history/root/.bash_logout/root/.bash_profile/root/,bashrc
18、Shell函数1定义Shell函数的定义格式如下function_name{list ofcommands[return value]也可以在函数名前加上关键字functiono2函数返回值可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值Shell函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败如果return其他数据,比如一个字符串,往往会得到错误提示“numeric argumentrequiredo如果一定要让函数返回字符串,那么可以先定义一个变量,用来接收函数的计算结果,脚本在需要的时候访问这个变量来获得函数返回值调用函数只需要给出函数名,不需要加括号
20、Shell输入输出重定向Unix命令默认从标准输入设备stdin获取输入,将结果输出到标准输出设备stdout显示一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器1输出重定向命令的输出不仅可以是显示器,还可以很容易的转移向到文件,这被称为输出重定向命令输出重定向的语法为$commandfile这样,输出到显示器的内容就可以被重定向到文件输出重定向会覆盖文件内容,请看下面的例子$echo line1users$cat usersline12输入重定向和输出重定向一样,Unix命令也可以从文件获取输入,语法为commandfile这样,本来需要从键盘获取输入的命令会转移到文件读取内容例如,计算users文件中的行数,可以使用下面的命令$wc-1users2users也可以将输入重定向到users文件$wc-1users2注意上面两个例子的结果不同第一个例子,会输出文件名;第二个不会,因为它仅仅知道从标准输入读取内容4Here DocumentEOFHere Document目前没有统一的翻译,这里暂译为”嵌入文档Here Document是Shell中的一种特殊的重定向方式,它的基本的形式如下commanddelimiterdocumentdelimiter它的作用是将两个delimiter分界符之间的内容document作为输入传递给command EOF是End offile的缩写,自定义终止符下面的例子,通过wc-1命令计算document的行数$wc-1«EOFThis isa simplelookup programfor goodand badrestaurants inCape Town.EOF35/dev/null文件如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到/dev/null$command/dev/null/dev/null是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到但是/dev/null文件非常有用,将命令的输出重定向到它,会起到禁止输出”的效果21项目中shell
1、定时建文件夹,makeDir.sh:定时任务,每天0001在前置机相应目录下创建当前日期文件夹hostl=,
10.xxx.xx.xx ftpuserl=xxxftppasswdl=xxx#获取当前日期及时间day=date+%Y%m%d—20210501#ftp连接前置机ftp-nv«FTPENDopen$hostluser$ftpuserl$ftppasswdlbinaryprompt offcd/xxx/download/xxmkdir$daycd/xxx/upload/xxmkdir$daybyeFTPEND
2、从前置机下载文件到应用服务器downloadFile.sh#$1下载文件名$2本地存放文件的目录$3前置机存放文件的目录if[-Z〃$1〃]thenecho“the fileNameis empty!!!/z exit fiif[-Z〃$2〃]thenecho thelocalPath isempty!!!”exitfiif[-Z〃$3〃]thenecho theremotePath isempty!!!exit firemotePath=$3hostl=,
10.xxx.xx.xx ftpuseri=xxx ftppasswdl=xxx ftp-nv«FTPEND open$hostluser$ftpuserl$ftppasswdl binaryprompt offcd$3led$2get.$1bye FTPEND
5、清理临时文件每月十号**10**sh/data/xxx/xx/deleteTmpFiles.sh#!/bin/bash#删除临时文件夹folder=/xxx/xxx/xx lastMonth=date-d〃1month ago+%Y%nf echodate+%Y%m%d〃if[d$folder]then。