文章目录
写脚本必备知识
一、条件测试
条件测试是在写脚本中必不可少的知识,通过各类条件的检测,才可以写出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 $?
4、关于expr的用法
expr可用于数据计算
eg:
expr 130 + 1
131
因此expr可以用于循环中的计数命令,当使用字符串进行计算时,会报错,这还可以用于判断数据是否为数字
在使用过程中遇到一些问题,最后发现是空格的问题,所以在使用shell过程中一定要要注意格式!
二、控制流结构
控制流结构是做一个通用性较高的脚本的关键点,通过条件的判断,加上控制流的多种分支结构,两者结合起来,就可以实现功能比较强大的脚本。
1、流控制
流控制有if、then、else提供条件测试,控制程序的走向。case通过匹配的方式控制程序走向。
if结构: 以下将写一个if结构来表示if结构的格式。
if结构可以判断很多东西,例如变量值测试,grep输出检查,文件拷贝输出检查,当前目录测试,文件权限测试,测试传递到脚本的参数,判断是否处于终端,变量设置测试,检测运行脚本用户(LOGNAME)···
在脚本中写的 `···` 当中的内容会由终端执行,重点这里不是单引号!
以上仅给出了if结构的基本用法,还有很多的条件检测,这里不一一列举了。
case结构: case结构与c语言中的case结构表达的意义基本相同,但是格式上有些不同,这里做一个实例将格式展示。
2、循环
流控制的分支结构进行了简单分析,做到了基本的格式了解。这一节将学习流控制的循环结构。
for循环结构: 还是通过具体实例,表示一个for循环结构的格式。
for循环结构与c语言中的for循环略有不同,shell中的for循环是循环将列表中的信息遍历,这点是shell中for循环的重点。
until循环结构
until结构与c语言中的do while结构类似,until结构条件在最后进行判断,所以至少会执行一次,适用于监视文件,until的基本结构为:
until 条件
do
命令
done
while循环结构
while还存在许多用法,这里不一一介绍,仅表示出基本用法,在之后的应用过程中再进行学习。
三、向脚本传递参数
1、如何传入参数
做一个通用性较高的脚本离不开传递参数,通过向脚本传递参数实现对脚本不同任务的选择,再配合分支结构,做出一个可处理多种任务的脚本。
特定变量$1 . . $9向脚本传递参数。$# 用于统计传递参数的个数,在运行脚本时,在脚本后面紧跟的就是输入的参数,有空格隔开,分别是$1~$9。
2、shift的用法
了解完如何向脚本传入参数之后,还有一个很好用的小技巧,是shell中传递参数必备的知识,即shift的用法
shift可以是参数向左移动一位,即传入多个参数时,我们仅需要调用$1,每调用完一次,就可以运行一次shift,下次调用$1时就是调用的之前的$2,下面进行一个演示。
四、总结
经过以上的基本的学习,已经能够实现写一个比较简单的脚本,具体到工作中还需要灵活运用各种分支结构和各种命令,在下一篇脚本分析中,将分析现有的一个脚本,通过这个脚本,写出自己的脚本。