zoukankan      html  css  js  c++  java
  • shell运算符与流程控制-2

    1、shell运算符

    1.1、算数运算符

    原生的bash不支持算数运算,可以通过其它方式实现例如expr。

    1 `expr a + b`
    2 #a b为数字,和运算符之间要有空格
    3 #``不是单引号,为键盘上ESC键下方的反引号

    示例如下:

     1 #!/bin/sh
     2 
     3 a=4
     4 b=3
     5 #加法
     6 val=`expr ${a} + ${b}`
     7 echo " ${a} + ${b} is :${val}"
     8 
     9 #减法
    10 val=`expr ${a} - ${b}`
    11 echo " ${a} - ${b} is :${val}"
    12 
    13 #乘法
    14 val=`expr ${a} * ${b}`
    15 echo " ${a} * ${b} is :${val}"
    16 
    17 #除法
    18 val=`expr ${a} / ${b}`
    19 echo " ${a} / ${b} is :${val}"
    20 
    21 #取余
    22 val=`expr ${a} % ${b}`
    23 echo " ${a} % ${b} is :${val}"
    View Code

    输出:

    4 + 3 is :7
    4 - 3 is :1
    4 * 3 is :12
    4 / 3 is :1
    4 % 3 is :1

     1.2、关系运算符

    关系运算符只支持数字,常见的关系运算符如下:

     1 c=3
     2 d=3
     3 #等于
     4 if [ ${c} -eq ${d} ]
     5 then
     6    echo "${c} is equal to ${d}"
     7 fi
     8 #不等于
     9 d=2   
    10 if [ ${c} -gt ${d} ]
    11 then
    12    echo "${c} is great than ${d}"
    13 fi
    # -eq 等于,[ ${c} -ne ${d} ]返回True
    # -gt 检测左边数是否大于右边,如果是,则返回True,反之,返回False
    # -lt 检测左边数是否小于右边,如果是,则返回True,反之,返回False
    # -ge 检测左边数是否大于等于右边,如果是,则返回True,反之,返回False
    # -le 检测左边数是否小于等于右边,如果是,则返回True,反之,返回False

    输出如下:

    3 is equal to 3
    3 is great than 2

    1.3、布尔运算符

    1 #非运算!,表达式为True,则返回False
    2 #与运算-o,有一个表达式为True则返回True
    3 #或运算-a,两个表达式为True则返回True
    1 c=1
    2 d=2
    3 e=3
    4 if [ ${c} -ne ${d} -o ${d} -eq ${e} ]
    5 then
    6    echo "${c} 不等于 ${d} 或者 ${d} 等于 ${e} ,返回True。"
    7 fi

    输出如下:

    1 不等于 2 或者 2 等于 3 ,返回True。 

    1.4、逻辑运算符

    1 #&& 逻辑and
    2 #|| 逻辑or
    1 c=1
    2 d=2
    3 e=3
    4 if [ ${c} -ne ${d} and ${d} -eq ${e} ]
    5 then
    6    echo "${c} 不等于 ${d} 并且 ${d} 等于 ${e} ,返回True。"
    7 else
    8    echo "${c} 不等于 ${d} 或者 ${d} 等于 ${e} ,返回True。"
    9 fi
    1 不等于 2 或者 2 等于 3 ,返回True。

    1.5、字符串运算符

    1 #  =,检测两个字符串是否相等,相等则返回True
    # !=,检测两个字符串是否不等,不等则返回True
    # -z,检测字符串是否为零,为零返回True
    # -n,检测字符串是否不为零,为零返回False
    # $ ,检测字符串是否为空,不为空返回True

    示例如下:

     1 a="Hello"
     2 b="Hello"
     3 if [ ${a} = ${b} ]
     4 then
     5 echo "str ${a} is equal  to  ${b}"
     6 fi
     7 
     8 if [ -n ${a} ]
     9 then
    10 echo "str ${a} is not zero. "

    输出如下:

    str Hello is equal  to  Hello
    str Hello is not zero.

    1.6、文件检测运算符

    1 #-w ${file} 检测文件是否可写,可写则返回True
    2 #-r ${file} 检测文件是否可读,可写则返回True
    3 #-x ${file} 检测文件是否可执行,可执行则返回True
    4 #-s ${file} 检测文件是否为空,不为空则返回True
    5 #-e ${file} 检测文件或目录是否存在,存在则返回True
    6 #文件检测运算符比较多,此时不一一列举
    curr_path=`pwd`
    if [ -e ${curr_path} ]
    then
    echo "dir ${curr_path} is exist."
    fi

    输出如下:

    dir /home/stephen/桌面 is exist.

    2、shell流程控制

    2.1、if

    #!/bin/bash
    #假如 条件1成立,则执行语句1
    #假如 条件1不成立,条件2成立,则执行语句2
    #假如 条件1,2不成立,则执行语句3
    
    if 条件1
    then
        语句1
    elif 条件2
    then
       语句2
    else
       语句3

    示例如下:

     1 age=15
     2 if [ ${age} -lt  16 ]
     3 then
     4     echo "age is ${age}, yonng"
     5 elif [ ${age}  40 ]
     6 then 
     7     echo "age is ${age},midlife"
     8 else
     9     echo "age is ${age},old"
    10 fi

    输出如下:

    age is 15, yonng

    2.2、for循环

    1 data_path=(data1 data2 data3)
    2 for datai in  ${data_path[@]}
    3 do
    4 echo ${datai}
    5 done

    输出:

    data1
    data2
    data3
    1 for ((i=0;i<5;i++))
    2 do
    3 echo ${i}
    4 done

    输出:

    0
    1
    2
    3
    4

    2.3、while

    #当条件1成立,循环执行语句1
    while 条件1
    do
         语句1
    done

    示例如下:

    1 i=1
    2 while [ ${i} -lt 4 ]
    3 do
    4 echo "loop ${i}"
    5 #语法 let "表达式"
    6 let i++
    7 done

    输出如下:

    loop 1
    loop 2
    loop 3

    2.4、until

    #当条件1不成立时,就执行语句1
    until 条件1
    do
    语句1
    done

    示例如下:

    1 j=7
    2 until [ ${j} -lt 4 ]
    3 do
    4 echo "loop ${j}"
    5 let j--
    6 done

    输出如下:

    loop 7
    loop 6
    loop 5
    loop 4

     

  • 相关阅读:
    eclipse luna maven失效的原因
    利用线性探测法解决hash冲突
    PHP和JavaScript将字符串转换为数字string2int
    JavaScript 编程易错点整理
    使用phpstudy创建本地虚拟主机
    单例模式
    PHP使用cookie时遇到的坑
    Redis安装与配置
    CI框架2.x的验证码中所遇问题解决
    用delete和trancate删除表记录的区别
  • 原文地址:https://www.cnblogs.com/webDepOfQWS/p/10651355.html
Copyright © 2011-2022 走看看