Shell编程之运算符

一.概述及declare命令

1.shell变量的缺点

  • 弱类型
  • 默认字符串型

2.declare声明变量类型

  • [root@localhost ~]# declare [+/-] [选项] 变量名

    • -给变量设定类型属性
    • +取消变量的类型属性
    • eg. -a将变量声明为数组型
    • eg. +a取消变量声明为数组型
    • -i将变量声明为整数型(integer)
    • -x将变量声明为环境变量
    • -r将变量声明为只读变量【声明数值后不能修改删除或者取消只读属性
    • -p显示指定变量的被声明的类型【参数不加变量名查看系统中所有变量的声明信息;加变量名查看系统中指定变量的声明信息】
  • 把变量声明为数值型

    [root@localhost ~]# aa=11
    [root@localhost ~]# bb=22
    #给变量aa和bb赋值
    [root@localhost ~]# declare -i cc=$aa+$bb
    #声明变量cc的类型是整数型,它的值是aa和bb的和
    declare -p cc
    #结果:declare -i cc="33"
    
  • 声明数组变量

    #定义数组
    [root@localhost ~]# movie[0]=zp
    [root@localhost ~]# movie[1]=tp
    [root@localhost ~]# declare -a movie[2]=live
    #查看数组
    [root@localhost ~]# echo ${movie} #zp
    [root@localhost ~]# echo ${movie[2]} #live
    [root@localhost ~]# echo ${movie[*]} #zp tp live
    
  • 声明环境变量

    declare -x test=123
    #和export作用相似,但其实是declare命令的作用
    

二.数值运算方法

  • 数值运算方法一

    [root@localhost ~]# aa=11
    [root@localhost ~]# bb=22
    #给变量aa和bb赋值
    [root@localhost ~]# declare -i cc=$aa+$bb
    #声明变量cc的类型是整数型,它的值是aa和bb的和
    
  • 数值运算方法二(expr或let数值运算工具)

    [root@localhost ~]# aa=11
    [root@localhost ~]# bb=22
    [root@localhost ~]# dd=$(expr $aa + $bb)
    #dd的值是aa和bb的和,注意“+”号左右两侧必须有空格
    
  • 数值运算方法三($((运算式))或$[运算式]

    [root@localhost ~]# aa=11
    [root@localhost ~]# bb=22
    [root@localhost ~]# ff=$(($aa+$bb))
    [root@localhost ~]# gg=$[$aa+$bb]
    
  • 运算符(优先级数值大的优先级高)

    优先级 运算符 说明
    13 - + 单目负 单目正
    12 ! ^ 逻辑非 按位取反或补码
    11 * / % 乘 除 取模
    10 + - 加 减
    9 << >> 按位左移 按位右移
    8 <= >= < > 小于等于 大于等于 小于 大于
    7 == != 等于 不等于
    6 & 按位与
    5 ^ 按位异或
    4 | 按位或
    3 && 逻辑与
    2 || 逻辑或
    1 = += -= /= %= &= ^= |= <<= >>= 赋值,运算且赋值
    #eg
    yy=$((4+9*3/5))#9
    cc=$((1&0))#0
    cc=$((1&&0))#0
    

三.变量测试

变量置换方式 变量y不存在 变量y为空值 变量y设置值
x=${y-新值} x=新值 x为空 x=$y
x=${y:-新值} x=新值 x=新值 x=$y
x=${y+新值} x为空 x=新值 x=新值
x=${y:+新值} x为空 x为空 x=新值
x=${y:=新值} x=新值 y=新值 x为空 y=新值 x=$y y值不变
x=${y=新值} x=新值 y=新值 x=新值 y=新值 x=$y y值不变
x=${y?新值} 新值输出到标准错误输出(就是屏幕) x为空 x=$y
x=${y:?新值} 新值输出到标准错误输出 新值输出到标准错误输出 x=$y
  • 测试举例

    #测试x=${y-新值}
    [root@localhost ~]# unset y #删除变量y
    [root@localhost ~]# x=${y-2} #测试
    [root@localhost ~]# echo $x #2s
    #因为变量y不存在,所以x=新值
    

你可能感兴趣的:(操作系统相关)