• 2
  • 2
分享

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软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   前两天有个做测试的小伙伴加我微信问我测试相关的一些事情。  她自己是从学习毕业就开始进入到互联网行业做测试的,到现在三年工作经验。她现在都不太敢跳槽,因为觉得自己没有什么核心竞争力,平常就是点点鼠标,看看有没有报错、结果和需求是否相符这样。  其实很多测试人员的处境都是如此。  造成这个局面的原因可以找到很多,大家经常会说的借口是:工作太忙,没时间也没精力。其实你自己去看看手机记录的屏幕使用时间。你平时有花里面30%的时间用来提升自己吗?  测试相比开发的工作门槛和天花板都低一些,这也导致了一些想进入软件开发行业但是又对自己掌握开发能力没信心的人所做出的保守选择。  但是如果后续自己并没有...
            0 0 1119
            分享
          •   51Testing行业调查问卷正在进行中,填问卷领价值398元的测试课程,参与一下吧~ 链接:http://vote.51testing.com/   聊到自动化测试,我们做 GUI 自动化测试的过程当中,以前就只要把这个自动化做起来就好了,但随着你的用例,用的数量越来越多之后,你不单单是把一个场景自动化就可以了。因为随着你的用例变多之后,你所有的用例设置,包括你的代码的结构,都要考虑这个东西的可维护性,因为可维护性一直是 GUI 自动化测试很大的一个痛点。我们在后面的 GUI 测试过程中,就会去考虑,怎么来做分成?怎么来做基于可重用的脚本?怎么来做基于页面的对象模型?甚至到后面...
            0 0 824
            分享
          •   12 月 13 日港股收盘时,网易以 5425 亿港元的市值,反超了美团,成为中国市值第四大的互联网公司,仅次于腾讯、拼多多和阿里巴巴。  而在 2021 年 2 月,中概股估值整体冲向巅峰时,美团市值大约是四个网易。不过两年多的时间,网易市值已反超美团。  据晚点财经报道,网易之所以能够反超美团,是因为它跌得比美团少。从 2021 年的市值顶点到现在,网易的市值下跌了 21%,而美团则暴跌了超过 80%。  据悉,美团的市值高峰出现在 2021 年 4 月,当时它的市值达到了 2.6 万亿港元,超过了阿里巴巴,成为中国市值最大的互联网公司。当时,美团大举进军社区团购领域。  IT之家注意...
            0 0 612
            分享
          •   据外媒报道,当地时间周三,通用汽车旗下的自动驾驶子公司Cruise宣布,将召回950辆自动驾驶汽车,以解决其碰撞检测系统的问题。  就在一个多月前,该公司的一辆汽车在无人驾驶模式下行驶时撞上并拖拽了一名行人。具体来说,这起事故于10月2日发生在旧金山,当时一辆有驾驶员的车辆撞到了一名行人,并将这名行人推到了一辆Cruise自动驾驶汽车的车道上。Cruise的自动驾驶汽车在撞到行人后最初停了下来,但随后,为了避开车流,这辆车又向右行驶,将这名行人向前拖了约20英尺(6米)。这名行人被压在汽车的一个轮胎下,伤势严重。  经过为期三周的审查,Cruise确定其自动驾驶汽车碰撞检测子系统在这种情况...
            0 0 797
            分享
          •   据台湾《经济日报》,特斯拉正在增加 Dojo D1 超级计算机芯片的订单。Dojo D1 是特斯拉专门为 Dojo 超级计算机设计的定制芯片,由台积电代工。  知情人士透露,特斯拉计划明年将 Dojo D1 芯片的产量增加一倍,达到 1 万片。预计到 2025 年,台积电代工的 Dojo D1 芯片订单量将持续增加,考虑到 Dojo 超级计算机的可扩展性。  特斯拉使用 Dojo 超级计算机训练高级驾驶辅助系统和完全自动驾驶系统的人工智能模型。随着 FSD、自动驾驶出租车和 Optimus 机器人等项目的推出,Dojo 超级计算机对公司运营的贡献可能会更大。  特斯拉增加 Dojo D1 ...
            0 0 929
            分享
      • 51testing软件测试圈微信