iMisty的技术栈

iMisty的技术栈

Shell编程之shell运算符

889
2019-06-16

Shell编程之shell运算符

Shell变量的缺点

  • shell变量是弱类型
  • 默认是字符串类型

declare命令

语法: declare [+/-] [选项] 变量名

  • -: 给变量设定类型属性

  • +: 取消变量的类型属性

  • -a: 将变量声明为数组型

  • -i: 将变量声明为整数型(integer)

  • -x: 将变量声明为环境变量

  • -r: 将变量声明为只读变量

  • -p: 显示指定变量的被声明的类型

    #给aa和bb赋值
    misty@ubuntu:~/MyFile/test$ aa=11
    misty@ubuntu:~/MyFile/test$ bb=22
    misty@ubuntu:~/MyFile/test$ cc=$aa+$bb
    misty@ubuntu:~/MyFile/test$ echo $cc
    11+22
    # 加上`-i`自动将运算的值转换成字符型
    #声明cc为整数,其值为aa bb之和
    misty@ubuntu:~/MyFile/test$ declare -i cc=$aa+$bb
    misty@ubuntu:~/MyFile/test$ echo $cc
    33
    #查看被声明变量的类型
    misty@ubuntu:~/MyFile/test$ declare -p cc
    declare -i cc="33"

声明数组变量

 #定义数组
    misty@ubuntu:~/MyFile/test$ arr[0]=a
    misty@ubuntu:~/MyFile/test$ arr[1]=b
    misty@ubuntu:~/MyFile/test$ declare -a arr[2]=cc
    #查看数组
    misty@ubuntu:~/MyFile/test$ echo ${arr}
    a
    misty@ubuntu:~/MyFile/test$ echo ${arr[2]}
    cc
    misty@ubuntu:~/MyFile/test$ echo ${arr[*]}
    a b cc

声明环境变量

语法:declare -x text=123

和export作用类似,但其实是declare命令的作用

声明变量为只读属性

语法:`declare -r test` ,给test赋予只读属性,但是请注意只读属性会让变量不能修改不能删除,甚至不能取消只读属性
   #临时生效重启即可删除,操作比较麻烦,但是不要写在环境变量中或者开机自动执行的程序中,不然需要修改环境变量配置文件
    misty@ubuntu:~/MyFile/test$ declare -r test 
    misty@ubuntu:~/MyFile/test$ declare -p test
    declare -r test
    misty@ubuntu:~/MyFile/test$ unset test
    bash: unset: test: 无法取消设定: 只读 variable
    misty@ubuntu:~/MyFile/test$ declare +r test
    bash: declare: test: 只读变量

数值运算的方法

方法一:declare -i cc = $aa+$bb
方法二: dd=$(expr $aa + $bb),dd的值是aa和bb的和,

注意+两侧必须有空格

方法三:$((运算式))$[运算式]

   misty@ubuntu:~/MyFile/test$ aa=11
    misty@ubuntu:~/MyFile/test$ bb=22
    misty@ubuntu:~/MyFile/test$ ff=$(($aa+$bb))
    misty@ubuntu:~/MyFile/test$ echo $ff
    33
    misty@ubuntu:~/MyFile/test$ gg=$[$aa+$bb]
    misty@ubuntu:~/MyFile/test$ echo $gg
    33

注意这种方式运算符中间加不加小括号都是ok的

运算符

  • 优先级高的先执行,优先级低的后执行
  • 优先级和运算的优先级一样,同其他程序是一样的
    img
   #逻辑与的运算只有相与的两边都是1,与的结果才是1,否则与的结果是0
   misty@ubuntu:~/MyFile/test$ declare cc=$((1&&0))
   misty@ubuntu:~/MyFile/test$ echo $cc
   0

变量测试

通用性不高,仅仅适用于shell,可以用其他的方式替代,了解即可,可以用但是没必要
![img](https://gitee.com/iMist/Linux/raw/master/image2/image48.png)

shell脚本是帮助linux管理人员进行系统的管理的,对性能的要求不高,但是需要逻辑清晰

    #删除变量y,确保不存在
    misty@ubuntu:~/MyFile/test$ unset y
    #进行测试
    misty@ubuntu:~/MyFile/test$ x=${y-2}
    misty@ubuntu:~/MyFile/test$ echo $x
    2
    #因为y不存在所以值是x=new

    #y值赋值为空
    misty@ubuntu:~/MyFile/test$ y=""
    misty@ubuntu:~/MyFile/test$ x=${y-2}
    misty@ubuntu:~/MyFile/test$ echo $x

    misty@ubuntu:~/MyFile/test$ 
    #因为y值为空所以x为空

    #y值为1
    misty@ubuntu:~/MyFile/test$ y=1
    misty@ubuntu:~/MyFile/test$ x=${y-2}
    misty@ubuntu:~/MyFile/test$ echo $x
    1

    #x=$y

运算符小记

[] 测试语句
() 作为运算符,里面通常放语句
(()) 运算式用于数字计算
$() 用于表达式