Shell不仅是一种命令解释器,还是一种编程语言,非常擅长处理文本类型的数据。由于Linux系统中的所有配置文件都是纯文本的,所以shell编程语言在Linux系统使用中发挥了巨大的作用。使用shell编写的程序类似于DOS下的批处理程序,简单来说,shell编程就是对一系列Linux命令的逻辑化处理。例如,我们在进行自动化测试的时候,需要将代码部署到服务器进行管理和集成,每次都要执行拉取最新的代码、编译打包、上传服务器一系列的步骤,效率不高而且很繁琐。我们将这个过程写成一个shell脚本,每次只需要运行一下这个脚本即可完成上述步骤,简单方便,提高工作效率。
一、什么是shell脚本?
我们可以在文件中存放一系列的Linux命令,并对其进行逻辑化处理,通常将shell编写的程序称为shell脚本或者shell程序。
Shell脚本以行为单位,包含注释、命令、变量以及流程控制语句;其中:
1.注释:注释对于一个脚本的维护和可读性来说,尤为重要,没有任何注释的脚本是不可取的。Shell脚本内,注释以#开头;
2.变量:shell变量支持字符串变量和整形变量;
3.命令:常用的Linux命令;
4.流程控制语句:流程控制语句用来编写复杂的脚本,比如for循环,if判断等;
二、shell编程规范
1.shell脚本以#!开头,通知系统以何种解释器来执行该脚本;在Linux系统中,有多种版本的shell,包括bash、tcsh、zsh等;我们最常用的解释器是bash,因此,在编写shell脚本时,我们会先声明使用的shell类型,语句如下:
#!/bin/bash
2.以注释的形式说明shell脚本的如下内容:脚本名称、脚本功能、版权声明,如果是较为复杂的脚本,应该对算法进行简单说明;
三、shell脚本的创建
通过以下步骤,可以创建一个简单的shell脚本:
1.新建文件:vi filename
如果该文件存在,则打开;如果不存在,则新建一个文件
2.脚本编写:
#!/bin/bash #输出hello world字符串 echo hello world
3.脚本运行:
shell脚本运行有两种方式:sh filename和./filename
sh filename:当被执行脚本没有可执行权限时,只能用这种方式来运行;
./filename:在使用./filename这种方式来运行脚本时,需要先将脚本文件的访问权限修改为可执行,这样脚本才能作为可执行文件被调用;因此,在使用./filename时,一般分为两步:
chmod u+x filename ./filename
四、变量
在实际的编程过程中,变量是必不可少的。Shell脚本中的变量包含字符串变量和整形变量;
1、变量赋值
赋值语句如下:
name=”string”;其中, name是指变量名,使用小写字母进行命名; =是赋值符号,=两边不能有空格,否则会将其视为命令执行; string是变量值,使用双引号
2、变量引用
在引用变量时,只需要在变量前加上$即可;注意,在变量赋值的时候,无需加$;
具体使用方式如下:
#!/bin/bash #自定义变量output output="hello world" echo $output
五、整数运算
以上,我们了解到,shell变量包含整形变量和字符串变量;本节我们来简单介绍一下整数运算。
一般来说,shell的整数运算和其他的编程语言并无区别,包括加减乘除、取余等;变量的所有计算都是通过(())进行的,我们简单介绍一下他的写法,如下:
#!/bin/bash #自定义变量a和b,并输出二者的和 a="10" b="20" #计算a和b的和 echo $(($a+$b)) #计算a和b的差 echo $(($a-$b)) #计算a和b的乘积 echo $(($a*$b)) #计算a/b echo $(($a/$b)) #求余 echo $(($a%$b))
六、字符串操作
我们可以对字符串进行如下操作:
#!/bin/bash #对字符串进行操作 V2=‘Hello world.everyone.’ #计算字符串的长度,#号表示提取长度 echo ${#V2} #从position开始截取字符串,例如position为2 echo ${V2:2} #从位置position开始提取长度为length的子串,{string:position:length};例如position为2,长度为2 echo ${V2:2:2} #从开头删除最短匹配字符串:${string#substring},如下代码,Hello被截取 echo ${V2#Hello} #删除从xx到xx的所有字符,为最短匹配,裁减到第一个.;如下代码,删除从H到.的所有字符 echo ${V2#H*.} #删除从xx到结尾的所有字符;如下代码,删除从H到结尾的所有字符 echo ${V2##H*} #从结尾开始,删除xx到xx的字符串;如下代码从结尾开始删除到.;输出Hello world echo ${V2#.%.} #从结尾开始,删除所有字符串 echo ${V2#.%%}
七、条件判断
1、test
test命令可以用于检查某个条件是否成立,可以分为数值、字符串、文件三个方面,使用方法如下:
#!/bin/bash #条件判断 filename=test.sh num1=10 num2=20 str1=linux str2=Linux #判断数值是否相等 if test $num1 -eq $num2 then echo num1等于num2 else echo num2不等于num2 fi #判断文件是否存在 if test –f $filename then echo 文件存在 else echo 文件不存在 fi #判断字符串是否相等 if test $str1 == $str2 then echo 字符串相等 else echo 字符串不相等 fi
2、[]判断
通过test写成的判断语句是不是有点麻烦,我们可以使用[]来替代,以数值比较为例:
#!/bin/bash #条件判断 num1=10 num2=20 #判断字符串是否相等 if [ $num1 -eq $num2 ] then echo num1和num2相等 else echo num1和num2不相等 fi
使用[]进行文件和字符串的判断与字符串大同小异,此处不再展开赘述。使用中括号来进行判断要注意:在中括号中必须都要使用空格来分隔。
3、(())判断
(())也是条件判断的一种方式,可以参考[]判断方法,进行替换即可;一般来说,双层小括号(())支持标准的比较符运算,包括:== 、!= 、> 、>= 、< 、<=;中括号[]支持-eq、–ne、-gt 、–ge 、-lt 、-le
八、循环操作
常用的循环操作包括while、until和for,使用如下:
#!/bin/bash #条件判断 a=20 #while循环,条件成立时,执行循环体 while [ $a -eq 10 ];do ((i--)); done; #until循环,条件表达式不成立的时候,执行循环体 until (($a<0));do ((i--)) done; for((i=0;i<=10;i++));do echo i done;
九、方法封装
在复杂的脚本中,我们避免不了要定义方法,方便多出调用;使用如下:
#!/bin/bash #定义test方法,打印输入值;当输入值等于linux时,调用same方法 read name function same(){ echo “Your input is $name” } if [ $name = linux ] then same else echo 输入错误 fi
到此,我们就对shell编程有了一个初步的认识,是不是很简单~,基本的使用方法都已经包含在上边的介绍中了,后续就是通过日常的练习来加深对shell编程的认识和深入,以解放我们的双手,提高工作效率,祝大家工作愉快!
版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。