Shell脚本

Posted xqzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本相关的知识,希望对你有一定的参考价值。

1.1.1创建与编写

Shell脚本通常都以.sh为后缀。第一行内容表示使用bash语法,更加规范。#后面跟一些时间日期版本。

 技术图片

 

 

 

查看

 技术图片

 

 

 

另一种方式

 技术图片

 

 

 

使用该方法需要脚本本身具有执行权限,所以给脚本加一个x

使用sh时,可以加-x查看这个脚本的执行过程。

 技术图片

 

 

 

1.1.2 date命令

date +%Y: 表示以四位数字格式打印年份。

date +%y:表示以两位数字格式打印年份。

date +%m: 表示月份。

date +%d: 表示日期。

date +%H:表示小时。

date +%M: 表示分钟。

date +%S: 表示秒。

date +%w: 表示星期。结果显示o则表示周日。

 技术图片

 

 

 

 

1.2Shell脚本中的变量

1.2.1 数学运算

示例

 技术图片

 

 

 

数学计算要用[       ]括起来,并在前面加$  结果为

 技术图片

 

 

 

1.2.2 和用户交互

技术图片

 

 

 

read命令用于和用户交互,他把用户输入的字符串作为变量值。结果为

加上-x查看整个执行过程

 技术图片

 

 

 

1.2.3 shell脚本预设变量

在脚本后面跟的参数就是预设变量

 技术图片

 

 

 

 

$1代表第一个参数$2代表第二个,给shell脚本的预设变量是没有限制的

 技术图片

1.3shell脚本中的逻辑判断

1.3.1 不带else

示例

 技术图片

 

 

(())时shell中特有的格式,只用一个或者不用都会报错。  结果:

 技术图片

 

 

1.3.2 带有else

示例

技术图片

 

 

 结果

技术图片

1.3.3 带有elif

示例

 技术图片

 

 

结果

 技术图片

 

 

判断数值大小可以用(())外还可以用[  ]但是不能用<> =,要使用是不能使用>、<、=这样的符号了,要使用-lt (小于)-gt (大于)、-le (小于或等于)、-ge (大于或等于) -eq(等于)、-ne (不等于)   示例

 技术图片

 

 

If中使用&&和||的情况

 技术图片

 

 

1.3.4 和文档相关的判断

shell脚本中if还经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否有读,写,执行权限等。if常用的选项有以下几个。

-e:判断文件或目录是否存在。

-d:判断是不是目录以及是否存在。

-f: 判断是不是普通文件以及是否存在。

-r:判断是否有读权限。

 -w: 判断是否有写权限。

-x:判断是否可执行。

示例:

技术图片

 

 因为/home是目录非文件所以不会显示ok。

 

1.3.5 case逻辑判断

不限制个数 *代表其他数

 技术图片

 

 

脚本为1,0时结果为

 技术图片

 

 

case常用来编写系统服务的启动脚本。

1.4 shell脚本中的循环

1.4.1 for循环

技术图片

 

 结果 seq 1 5 表示一到五的序列

 技术图片

 

 

for 循环的基本结构格式

for 变量名 in 循环的条件; do

command

done

这里“循环的条件”可以是一组字符串或者数字(用一-个或者多个空格隔开) ,也可以是一条命

令的执行结果。如:

 技术图片

 

 

循环的条件还可以引用系统的命令的执行结果,但必须用反引号括起来。示例:

 技术图片

 

 

1.4.2 while循环

常用while编写死循环的脚本,用于监控某项服务。格式

while 条件; do

command

done

示例:

 技术图片

 

 

结果

 

另外还可以用一个冒号代替循环条件,这样就可以做到死循环。

While :; do

command

sleep 3

done

1.5 shell脚本中的函数

shell脚本中的函数就是先把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代码总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样不仅节省时间还节省空间。示例

 技术图片

 

 

结果:

 技术图片

 

 

值得注意的是,在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后。因为函数是要被调用的,如果还没有出现就被调用,肯定会出错。

1.6 shell 脚本中的中断和继续

1.6.1 break

break用在循环中,不管是for或者while都可以。在脚本中使用它,表示退出该层循环。之所以说层,是因为有时我们会用到嵌套循环,大循环里面还有小循环,而break仅仅是退出那一-层循环,它的上层循环不受影响。示例

 技术图片

 

 

脚本意思是要把一到五数值赋予i,当i等于3是,会跳出循环,4,5不再执行。结果

 技术图片

 

 

1.6.2 continue

continue也是使用在循环中的,但和break不同的是,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环。具体示例如下:

技术图片

 

 

结果

 技术图片

 

 

当i等于3的时候,出现了continue,所以结束本次循环,continue后面的语句不再执行,继续下一次循环。

1.6.3 exit

其实,还有一个和break. continue类 似的用法,那就是exit, 它的作用范围更大,直接退出整个shell脚本。 示例脚本如下:

 技术图片

 

 

结果

 技术图片

 

 

直接结束。

以上是关于Shell脚本的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本--变量(后附简单shell脚本案例)!

shell脚本翻译 急求

shell脚本书写方法

如何在shell脚本里调用另一个shell脚本

shell脚本获取参数&在线执行shell脚本

shell脚本中#是啥意思