美文网首页
2020-08-25shell流程控制结构

2020-08-25shell流程控制结构

作者: testerPM | 来源:发表于2020-08-25 09:57 被阅读0次

条件表达式

概念:
在各种条件结构和流程控制结构进行的各种判断,然后根据不同条件执行不同的操作

[条件表达式]
注意: 1.括号内部注意两端要有空格 2. 操作符两端也要有空格
例子:
[ -f /tmp/hhy.txt ] 单个条件 ,判断是否存在
[ -f /tmp/hhy.txt ] && echo 1 || echo 0

注意: &&代表前面执行成功则执行后面的命令 ,|| 否则执行后面的

类型 关键字 含义解释
整数比较操作符 -eq、-gt、-lt、-ge、-le 等于/大于/小于/大于等于/小于等于
字符串测试操作符 ==、!=、-n、-z 等于/不等于/字符串长度不为0为真/字符串长度为0 为真
文件测试 -d、-f、-e 目录存在为真/文件存在为真/目录或者文件存在为真
逻辑操作符 !、-a、-o 非/与/或

整数比较操作符举例如下:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0

[  5   -eq  3 ] &&   echo  “true"  ||   echo ”false"


上面脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh
false

解释:

[  5   -eq  3 ] &&   echo  “true"  ||   echo ”false"

解释如下:
[  5   -eq  3 ] 判断5和3是否相等
 &&   echo  “true"   如果相等,就输出 true
||   echo ”false"  否则,输出false



字符串测试操作符举例如下:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0

[  "hello" ==  "world"   ] &&   echo  “true"  ||   echo ”false"
[   -n   "world"   ] &&   echo  “true"  ||   echo ”false"
[   -z   ""   ] &&   echo  “true"  ||   echo ”false"

上面脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh
false
true
true

解释如下:

[  "hello" ==  "world"   ] 字符串不相等,所以执行 echo ”false"
[   -n   "world"   ]   字符串长度不为 0 ,所以执行echo  “true" 
[   -z   ""   ] 字符串长度为0 ,所以执行echo  “true" 
 

文件测试脚本举例如下:


#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
[  -f  /home/yy.txt  ]    &&   echo  “true"  ||   echo ”false"
[  -d  /home/yy/  ]  &&   echo  “true"  ||   echo ”false"
[  -e  /home/yy.txt ]  &&   echo  “true"  ||   echo ”false"
[  -e /home/yy/  ]  &&   echo  “true"  ||   echo ”false"



上面脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh
true
true
true
true

解释:

[  -f  /home/yy.txt  ]    此目录下yy.txt文件存在  所以执行  echo  “true"
[  -d  /home/yy/  ]  此路径存在, 所以执行  echo  “true"
[  -e  /home/yy.txt ]   此目录下yy.txt文件存在  所以执行  echo  “true"
[  -e /home/yy/  ]    此路径存在, 所以执行  echo  “true"

备注: 1.-e 参数即可用户来判断路径也可以用来判断文件  2.路径必须是绝对路径
  

逻辑操作符脚本举例如下:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
[  !  -e /home/yy/  ]   &&   echo  “true"  ||   echo ”false"
[  -e  /home/yy.txt   -a  -z  "hello" ]     &&   echo  “true"  ||   echo ”false"
[  -e  /home/yy.txt   -o  -z  "hello" ]     &&   echo  “true"  ||   echo ”false"


上面脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh
false
false
true

解释:

[  !  -e /home/yy/  ]    -e /home/yy/ 判断目录存在,存在则为真,这里如果为真,取反就是假,表达式为假,所以执行  echo ”false"
[  -e  /home/yy.txt   -a  -z  "hello" ]    -e  /home/yy.txt 为真,   -z  "hello" 为假,用  -a 进行连接与计算-》结果为假,所以执行  echo ”false"
[  -e  /home/yy.txt   -o  -z  "hello" ]        -e  /home/yy.txt 为真,  -z  "hello" 为假,用 -o 进行连接或计算-》结果为真,所以执行  echo  “true"


流程控制结构

if条件语句

(1) 单分支结构:

         if   [  条件表达式  ]; then 
                            执行语句
         fi

备注:  
          1.  fi是结束符
         2.  分号和 ] 之间不用加空格
         3.   if 和  [  之间需要加空格 
          4.  执行语句需要tab缩进

举例说明:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
if  [ -e  /home/yy/ -o  -z "hello" ]: then
               echo "true"
fi 

上面脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh
true

(2)双分支结构

  if  [ 条件表达式 ]:  then
          执行语句1
else
           执行语句2
fi



举例说明:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
if  [ -e  /home/yy/ -a  -z "hello" ]: then
               echo "true"
else 
              echo "false"

上面脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh
false

(3)多分支结构

   if  [  条件表达式 ];then 
              执行语句
 elif [ 条件表达式 ]; then
             执行语句
...多个elif
else
               执行语句
fi

注意:  多分支elif的写法,每个elif都要带有then
             最后结尾的else 后面没有then

举例说明:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
if  [ "$1"  == "start" ];then
         echo "start  cmd"
elif [ "$1" == "stop" ]; then
       echo "stop cmd"
elif [ "$1" == "restart" ]; then
       echo " restart cmd"
else
       echo "other cmd"
fi

上面脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh  start  
start cmd


备注:
1.如果$1不加双引号,执行脚本不加参数会报错,因为,不加参数,$1获取到的结果是 null   (null对象不能和字符串比较)
 2.$1加上双引号,脚本执行不加参数(把null当成一个字符串),脚本会执行这条语句       echo "other cmd",脚本不会报错
 3. 进行字符串比较时,最好加上双引号
 

流程控制结构

(1) while循环语句:

重复执行一条语句或者一组语句,直到条件不再满足时停止
    while [ 条件表达式 ]
    do 
                     执行语句
    done

while 循环语句会对while后面的条件表达式进行判断,如果条件表达式成立,则执行do和done之间的指令
每一次执行到done时就会重新判断while条件表达式

脚本举例1如下:循环打印1-10

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
i=1
while [ $ i  -le  10 ]
do
        echo ${i}
          ((i++))

done
              

脚本执行:

[root@localhost sciptshell]#./firstShellScript.sh 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10



备注: ((i++)) 不能是 i++ 或者$(i++)  或者${1}++
这里使用((i++)),是因为((运算表达式))用户整数运算


脚本举例2如下:求和1+2+3.....+10

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
sum=0
i=1
while [ $ i  -le  10 ]
do
              sum=$((sum+i))
              ((i++))

done
              echo ${sum}

脚本执行结果:

[root@localhost sciptshell]#./firstShellScript.sh 
  55

备注:上面脚本    sum=$((sum+i)) 为什么不能是 
sum =${sum}+${i}

(2) for 循环语句

for 语句和while循环语句类似,for循环主要用于执行次数有限的循环,while循环一般用在守护进程以及无限循环

第一种

 for  变量名  in  变量取值列表
 do
                   指令
 done




变量名依次获取 in关键字后面的变量取值列表,每次取一个,然后进入循环执行指令,当取完变量列表中的最后一个值并进入循环执行到done为止

脚本举例说明如下:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
i=1
for i in 1 2 3 4 5 6 7 8 9 10
do
         echo ${i}
done



脚本执行:

[root@localhost sciptshell]#./firstShellScript.sh 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10


第二种

  for (( exp1;exp2;exp3))
  do
                   指令
  done


备注:
exp1: 变量初始化
exp2: 条件表达式
exp3: 变量更改条件表达式

脚本举例说明:

#!/bin/bash
#Date:      2017-01-01
#Author:   Created by hhy
#Email:  1425301899@qq.com
#Description:  The script function  is to.....
#Version:     1.0
for ((i=1; i<=10;i++))
do
            echo ${i}
done

#备注: i<=10为什么不是用 i -le 10

脚本执行:

[root@localhost sciptshell]#./firstShellScript.sh 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10


相关文章

  • 2020-08-25shell流程控制结构

    条件表达式 概念:在各种条件结构和流程控制结构进行的各种判断,然后根据不同条件执行不同的操作 [条件表达式]注意:...

  • [JS基础]笔记四

    js流程控制语句 流程控制 顺序结构、分支结构、循环结构 分支结构 if 分支结构 if else 双分支结构语句...

  • 09-Go语言流程控制-指趣学院

    Go语言流程控制基本概念 Go语言流程控制和C语言一样, 也有三大流程控制结构顺序结构(默认结构)选择结构(if ...

  • Java知识之流程控制

    Java流程控制框架图 流程控制 一. 循环结构二. 分支结构三. 顺序结构 循环结构 for循环,for-eac...

  • 第4天 PHP分支、循环结构

    6. 流程控制 流程控制,就是研究程序的走向。 6.1. 流程控制概述 6.1.1. 三大流程结构: 顺序结构:程...

  • 【麦兜】Java基础知识巩固——流程控制

    流程控制 不论哪种编程语言,都有各种各样的流程控制结构,本篇文章介绍的就是各种不同的流程控制结构,比如:顺序结构、...

  • Python程序结构

    2018年6月27日笔记 python流程控制 1.python流程控制语句结构 4种流程控制语句结构:ifif ...

  • Chapter4 Java流程控制之选择结构

    Lecture1 流程控制概述 流程控制语句种类:顺序、选择、循环;选择结构--if结构、if-else结构、多重...

  • 流程控制的基本概念

    流程控制是指控制代码的执行顺序。 在JavaScript中,有三种基本的流程控制结构:顺序结构、选择结构和循环结构...

  • 3.Java流程控制

    程序流程控制 流程控制语句: 顺序结构:是程序的默认结构 分支结构 循环结构 分支结构 if 根据判定的结果(真或...

网友评论

      本文标题:2020-08-25shell流程控制结构

      本文链接:https://www.haomeiwen.com/subject/jmeajktx.html