文章目录

  • 写脚本必备知识
  • 一、条件测试
  • 1、测试文件状态
  • 2、测试字符串
  • 3、测试数值
  • 4、关于expr的用法
  • 二、控制流结构
  • 1、流控制
  • 2、循环
  • 三、向脚本传递参数
  • 1、如何传入参数
  • 2、shift的用法
  • 四、总结


写脚本必备知识

一、条件测试

条件测试是在写脚本中必不可少的知识,通过各类条件的检测,才可以写出if,eles等分支结构,做出一个通用性较高的脚本。
条件测试有对文件状态、字符串、数字进行检测。
条件测试有两种表示方式
1、test condition
2、[ condition ]
常用第二种方式,便于和if等分支结构一起运用。

1、测试文件状态

eg:
$ [ -w test.txt ]
$ echo $?
测试文件是否可写。
测试条件还有三种逻辑
1、-a 逻辑与
2、-o 逻辑或
3、 ! 逻辑非
eg:
$ [ -w test.txt -a -r test.txt ]
$ echo $?
以上为测试文件状态的举例,关于字符串的测试,与文件状态测试略有不同

2、测试字符串

首先关于字符串的测试有4个操作符,分别是=,!=,-n(非空字符串),-z(空字符串)。
eg:
$ [ “hello1” = “hello” ]
$ echo $?
eg:
$ [-z “hello”]
$ echo $?
以上为关于字符串的条件测试,还有关于数字的条件测试。

3、测试数值

关于数值的操作符可为:

-eq 数值相等。

-ne 数值不相等。

-gt 第一个数大于第二个数。

-lt 第一个数小于第二个数。

-le 第一个数小于等于第二个数。

-ge 第一个数大于等于第二个数。

eg:

$ [ “130” eq “130” ]

$ echo $?

使用shell脚本压测gitlab代码拉取并收集报错和时间_编程语言

4、关于expr的用法

expr可用于数据计算

eg:

expr 130 + 1

131

因此expr可以用于循环中的计数命令,当使用字符串进行计算时,会报错,这还可以用于判断数据是否为数字

使用shell脚本压测gitlab代码拉取并收集报错和时间_for循环_02


在使用过程中遇到一些问题,最后发现是空格的问题,所以在使用shell过程中一定要要注意格式!

二、控制流结构

控制流结构是做一个通用性较高的脚本的关键点,通过条件的判断,加上控制流的多种分支结构,两者结合起来,就可以实现功能比较强大的脚本。

1、流控制

流控制有if、then、else提供条件测试,控制程序的走向。case通过匹配的方式控制程序走向。

if结构: 以下将写一个if结构来表示if结构的格式。

使用shell脚本压测gitlab代码拉取并收集报错和时间_编程语言_03


使用shell脚本压测gitlab代码拉取并收集报错和时间_字符串_04


if结构可以判断很多东西,例如变量值测试,grep输出检查,文件拷贝输出检查,当前目录测试,文件权限测试,测试传递到脚本的参数,判断是否处于终端,变量设置测试,检测运行脚本用户(LOGNAME)···

在脚本中写的 `···` 当中的内容会由终端执行,重点这里不是单引号!

以上仅给出了if结构的基本用法,还有很多的条件检测,这里不一一列举了。

case结构: case结构与c语言中的case结构表达的意义基本相同,但是格式上有些不同,这里做一个实例将格式展示。

使用shell脚本压测gitlab代码拉取并收集报错和时间_传递参数_05


使用shell脚本压测gitlab代码拉取并收集报错和时间_传递参数_06

2、循环

流控制的分支结构进行了简单分析,做到了基本的格式了解。这一节将学习流控制的循环结构。

for循环结构: 还是通过具体实例,表示一个for循环结构的格式。

使用shell脚本压测gitlab代码拉取并收集报错和时间_for循环_07


使用shell脚本压测gitlab代码拉取并收集报错和时间_linux_08


for循环结构与c语言中的for循环略有不同,shell中的for循环是循环将列表中的信息遍历,这点是shell中for循环的重点。

until循环结构

until结构与c语言中的do while结构类似,until结构条件在最后进行判断,所以至少会执行一次,适用于监视文件,until的基本结构为:

until 条件

do

命令

done

while循环结构

使用shell脚本压测gitlab代码拉取并收集报错和时间_字符串_09


使用shell脚本压测gitlab代码拉取并收集报错和时间_字符串_10


while还存在许多用法,这里不一一介绍,仅表示出基本用法,在之后的应用过程中再进行学习。

三、向脚本传递参数

1、如何传入参数

做一个通用性较高的脚本离不开传递参数,通过向脚本传递参数实现对脚本不同任务的选择,再配合分支结构,做出一个可处理多种任务的脚本。
特定变量$1 . . $9向脚本传递参数。$# 用于统计传递参数的个数,在运行脚本时,在脚本后面紧跟的就是输入的参数,有空格隔开,分别是$1~$9。

2、shift的用法

了解完如何向脚本传入参数之后,还有一个很好用的小技巧,是shell中传递参数必备的知识,即shift的用法

shift可以是参数向左移动一位,即传入多个参数时,我们仅需要调用$1,每调用完一次,就可以运行一次shift,下次调用$1时就是调用的之前的$2,下面进行一个演示。

使用shell脚本压测gitlab代码拉取并收集报错和时间_for循环_11


使用shell脚本压测gitlab代码拉取并收集报错和时间_字符串_12


使用shell脚本压测gitlab代码拉取并收集报错和时间_字符串_13

四、总结

经过以上的基本的学习,已经能够实现写一个比较简单的脚本,具体到工作中还需要灵活运用各种分支结构和各种命令,在下一篇脚本分析中,将分析现有的一个脚本,通过这个脚本,写出自己的脚本。