zoukankan      html  css  js  c++  java
  • Linux之Shell脚本编程(二)

    上节回顾

      上一篇博文中,主要介绍了Shell脚本编程的背景,怎样创建人生中第一个Shell脚本以及Shell变量等内容。接下来将接着介绍介绍Shell编程,主要是围绕着Shell运算、流程控制语句、自定义函数以及脚本调试等方面展开。

    运算符

      例:

      num1=11

      num2=22

      sum=$num1+$num2

      echo $sum

      格式 :expr m + n 或$((m+n)) 注意expr运算符间要有空格

      expr命令:对整数型变量进行算术运算   (注意:运算符前后必须要有空格) 

        expr 3 + 5   
        expr 3 – 5

        echo `expr 10 / 3`            

        10/3的结果为3,因为是取整
        expr  3 * 10     #  是转义符

      

      例:计算(2 +3 )×4 的值

      1 .分步计算
             S=`expr 2 + 3`
             expr $S * 4

      2.一步完成计算

             expr `expr 2 + 3` * 4

             S=`expr \`expr 2 + 3\`  * 4`

             echo $S

             或

              echo $(((2 + 3) * 4))

      $()与${}的区别

      $( )的用途和反引号``一样,用来表示优先执行的命令

        eg:echo $(ls a.txt)

      ${ } 就是取变量了  eg:echo ${PATH}

      $((运算内容)) 适用于数值运算

        eg: echo $((3+1*4))

    内置test命令

      内置test命令常用操作符号[]表示,将表达式写在[]中,如下:

        [ expression ] 

      或者:

        test expression

      注意:expression首尾都有个空格

        eg: [  ] ;echo $?

      测试范围:整数、字符串、文件

      表达式的结果为真,则test的返回值为0,否则为非0。当表达式的结果为真时,则变量$?的值就为0,否则为非0

     

    字符串测试:

      test  str1 == str2       测试字符串是否相等 

      test  str1 != str2      测试字符串是否不相等

      test  str1                 测试字符串是否不为空,不为空,true,false

      test  -n str1          测试字符串是否不为空

      test  -z  str1         测试字符串是否为空

        eg:

          name=linzhiling

          [ “$name” ] && echo ok

          ; 命令连接符号

          && 逻辑与 条件满足,才执行后面的语句

          [ -z “$name” ] && echo  invalid  || echo ok

          ||  逻辑或,条件不满足,才执行后面的语句

          test “$name” == ”yangmi” && echo ok  || echo  invalid

     

    整数测试:

      test   int1 -eq  int2    测试整数是否相等 equals
      test   int1 -ge  int2    测试int1是否>=int2
      test   int1 -gt  int2    测试int1是否>int2
      test   int1 -le  int2    测试int1是否<=int2
      test   int1 -lt  int2    测试int1是否<int2
      test   int1 -ne  int2    测试整数是否不相等

        eg:

          test 100 –gt 100

          test 100 –ge 100

      如下示例两个变量值的大小比较:

      -gt表示greater than大于的意思,-le表示less equal表示小于等于。

    文件测试:

      test  -d  file      指定文件是否目录

      test  –e  file     文件是否存在 exists

      test  -f  file     指定文件是否常规文件

      test –L File     文件存在并且是一个符号链接 

      test  -r  file    指定文件是否可读

      test  -w  file    指定文件是否可写

      test  -x  file    指定文件是否可执行

     

        eg:

          test -d  install.log

          test –r install.log

          test –f xx.log ; echo $?

          [ -L service.soft  ] && echo “is a link”

          test -L /bin/sh ;echo $?

          [ -f /root ] && echo “yes” || echo “no”

     

    多重条件测试:

      条件1 –a 条件2 逻辑与  两个都成立,则为真

      条件1 –o 条件2 逻辑或 只要有一个为真,则为真

      ! 条件                逻辑非    取反

      eg:

        num=520

        [ -n “$num” –a “$num” –ge 520 ] && echo “marry you” || echo “go on”

        age=20

        pathname=outlog

        [ ! -d“$ pathname”] &&  echo usable || echo  used

    流程控制语句

    if/else命令

      1, 单分支if条件语句

      if [ 条件判断式 ]

        then

          程序

      fi   

      或者

      if [ 条件判断式 ] ; then 

         程序

      fi

     

      eg:#!/bin/sh

      if  [ -x  /etc/rc.d/init.d/httpd ]

          then

          /etc/rc.d/init.d/httpd restart

      fi

     

      单分支条件语句需要注意几个点:

      if语句使用fi结尾,和一般语言使用大括号结尾不同。

      [ 条件判断式 ] 就是使用test命令判断,所以中括号和条件判断式之间必须有空格

      then后面跟符号条件之后执行的程序,可以放在[]之后,用“;”分割,也可以换行写入,就不需要";"了。

      2,多分支if条件语句

      if [ 条件判断式1 ]

          then

              当条件判断式1成立时,执行程序1

      elif  [ 条件判断式2 ] 

          then      

              当条件判断式2成立时,执行程序2

      ...省略更多条件

      else

          当所有条件都不成立时,最后执行此程序

      fi

      示例:

      read -p "please input your name: " NAME

      eg:

      #!/bin/bash

      read -p "please input your name:"  NAME

      #echo  $NAME

      if [ “$NAME” == root ]

              then

                      echo "hello ${NAME},  welcome !"

              elif [ $NAME == tom ]

                      then

                              echo "hello ${NAME},  welcome !"

              else

                      echo "SB, get out here !"

      fi

     

    case命令

      case命令是一个多分支的if/else命令,case变量的值用来匹配value1,value2,value3等等。匹配到后则执行跟在后面的命令直到遇到双分号为止(;;)case命令以esac作为终止符。

      格式

             CMD=$1

      case $CMD in

      start)

             echo "starting"

             ;;

      Stop)

             echo "stoping"

             ;;

      *)

             echo "Usage: {start|stop} “

      esac

    for循环

      for循环命令用来在一个列表条目中执行有限次数的命令。比如,你可能会在一个姓名列表或文件列表中循环执行同个命令。for命令后紧跟一个自定义变量、一个关键字in和一个字符串列表(可以是变量)。第一次执行for循环时,字符串列表中的第一个字符串会赋值给自定义变量,然后执行循环命令,直到遇到done语句;第二次执行for循环时,会右推字符串列表中的第二个字符串给自定义变量,依次类推,直到字符串列表遍历完。

      第一种:

        for N in 1 2 3

        do

        echo $N

        done

      或

        for N in 1 2 3; do echo $N; done

      或

        for N in {1..3}; do echo $N; done

      第二种:

        for ((i = 0; i <= 5; i++))

        do

        echo "welcome $i times"

        done

      或

        for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

    while循环

      while命令根据紧跟其后的命令(command)来判断是否执行while循环,当command执行后的返回值(exit status)为0时,则执行while循环语句块,直到遇到done语句,然后再返回到while命令,判断command的返回值,当得打返回值为非0时,则终止while循环。

      第一种

        while expression

        do

        command

        …

        done

      练习:求1-10 各个数的平方和

      第二种:

    自定义函数

      函数代表着一个或一组命令的集合,表示一个功能模块,常用于模块化编程。

      以下是关于函数的一些重要说明:                                 

        在shell中,函数必须先定义,再调用

        使用return value来获取函数的返回值

        函数在当前shell中执行,可以使用脚本中的变量。

      函数的格式如下:

        函数名()

        {

        命令1…..

        命令2….

        return 返回值变量

        }

        [ function ] funname [()]

        {

            action;

            [return int;]

        }

        function start()  / function start  / start()

       eg.

      注意:

      如果函数名后没有(),在函数名和{ 之间,必须要有空格以示区分。函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回值,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

    脚本调试

      sh -x script  

      这将执行该脚本并显示所有变量的值。

      在shell脚本里添加  

      set -x  对部分脚本调试

      sh -n script

      不执行脚本只是检查语法的模式,将返回所有语法错误。

      sh –v script

      执行并显示脚本内容。

  • 相关阅读:
    紧急情况下测试周期被压缩该如何测试?
    测试人员提高业务掌握度的方案
    Android客户端性能测试(一):使用APT测试Android应用性能
    转载:员工价值——如何体现自己价值,如何被自己的领导认可
    如何提高测试用例复用性和完善测试用例
    如何理解栈(栈的实现方式)
    Android 自动化测试—robotium(七) 使用Junit_report测试报告
    Android 自动化测试—robotium(八) 拖拽
    解决ADT升级报错
    敏捷测试的关键理念
  • 原文地址:https://www.cnblogs.com/zhangchao162/p/9614264.html
Copyright © 2011-2022 走看看