Shell基础——Bash的运算符

1.数值运算

(1)declare声明变量类型
[root@localhost ~]# declare [+/-][选项] 变量名
选项:
  -: 给变量设定类型属性
  +: 取消变量的类型属性
  -i: 将变量声明为整数型(integer)
  -x: 将变量声明为环境变量
  -p: 显示指定变量的被声明的类型

[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ declare -p aa
declare -- aa="11"
[cfp@bogon ~]$ export aa
[cfp@bogon ~]$ declare -p aa
declare -x aa="11"
[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ cc=$aa+$bb
[cfp@bogon ~]$ echo $cc
11+22

那么,如何进行数值运算呢?也就是说计算“1+1=2”呢?

方法一:

[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ declare -i cc=$aa+$bb
[cfp@bogon ~]$ echo $cc
33

方法二:expr或let数值运算工具

[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ dd=$(expr $aa + $bb)
#dd 的值是 aa 和 bb 的和。注意“ + ”号左右两 侧必须有空格
[cfp@bogon ~]$ echo $dd
33

方法三:“$((运算式))”或“$[运算式]” 。这种方法在Linux中最常见。

[cfp@bogon ~]$ aa=11
[cfp@bogon ~]$ bb=22
[cfp@bogon ~]$ ff=$(($aa+$bb))
[cfp@bogon ~]$ echo $ff
33
[cfp@bogon ~]$ gg=$[$aa+$bb]
[cfp@bogon ~]$ echo $gg
33

2. 运算符

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

3.变量测试与内容替换

变量置换方式 变量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
[cfp@bogon ~]$ unset y 
# 删除变量 y 
[cfp@bogon ~]$ x=${y-new} 
# 进行测试
[cfp@bogon ~]$ echo $x 
new 
# 因为变量 y 不存在,所以 x=new 

[cfp@bogon ~]$ y=old 
# 给变量 y 赋值
[cfp@bogon ~]$ x=${y-new} 
 # 进行测试
[cfp@bogon ~]$ echo $x    
old 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章