Linux Shell编程(3) - Shell 运算
一、declare 命令
shell 变量是弱类型,且默认都是字符串型
declare 命令可以给变量设定或取消类型
1. 语法
declare [-/+][选项] [变量名]
2. 选项
-
:给变量设定类型属性+
:取消变量的类型属性
-a
:将变量声明为数组类型(array)-i
:将变量声明为整数类型(integer)
-x
:将变量声明为环境变量-r
:将变量声明为证只读变量
-p
:显示指定变量的被声明的类型
3. 把变量声明为数值型
declare -i [变量名]
[root~]# a=1 [root~]# b=2 [root~]# declare -i c=$a+$b [root~]# echo $c 3 [root~]# declare -p c declare -i c="3"
4. 声明数组变量
定义数组
数组名[n]=值 declare -a 数组名[n]=值 注意,n只能是数字
查看数组
- ${数组名}:查看数组第一个元素,即array[0]的值
- ${数组名[n]}:n为数字,查看数组指定下标的值
- ${数组名[*]}:查看数组中所有的值
删除数组
- 删除数组指定下标的值
unset 数组名[n]
- 删除整个数组
unset 数组名
实例
- 定义数组下标[2]和下标[3],没有定义下标[0]
[root~]# array[2]=2 [root~]# declare -a array[3]=3
- 查看数组第一个元素,即array[0]的值,因为没有,所以输出为空
[root~]# echo ${array}
- 查看数组下标[3]的值
[root~]# echo ${array[3]} 3
- 查看数组中所有的值
[root~]# echo ${array[*]} 2 3
- 定义数组下标[0]的值,并输出
[root~]# array[0]=0 [root~]# echo ${array} 0 [root~]# echo ${array[*]} 0 2 3
- 删除数组下标[3]
[root~]# unset array[3] [root~]# echo ${array[*]} 0 2
- 删除整个数组
[root~]# unset array [root~]# echo ${array[*]}
5. 声明环境变量
export 变量名=变量值 declare -x 变量名=变量值
6. 声明变量只读属性
具有只读属性的变量不能修改,不能删除,甚至不能取消只读属性!
实例
- 声明变量只读属性
[root~]# declare -r var="I am a readonly variable"
- 不能修改
[root~]# var=change -bash: var: readonly variable
- 不能删除
[root~]# unset var -bash: unset: var: cannot unset: readonly variable
- 不能取消只读属性
[root~]# declare +r var -bash: declare: var: readonly variable
7. 查询变量的属性
查询所有变量的属性
declare -p
查询指定变量的属性
declare -p [变量名]
实例
[root~]# declare -p declare -- BASH="/bin/bash" ...省略... declare -ir UID="0" declare -x USER="root" declare -x USERNAME="root" [root~]# declare -p BASH declare -- BASH="/bin/bash" [root~]# declare -p PATH declare -x PATH="/sbin:/bin:/usr/sbin:/usr/bin"
二、数值运算的方法
1. declare -i sum=$num1+$num2
[root~]# num1=1 [root~]# num2=2 [root~]# declare -i sum=$num1+$num2 [root~]# echo $sum 3
2. expr
expr
用法
sum=$(expr $num1 + $num2)
[root~]# num1=1 [root~]# num2=2 [root~]# sum=$(expr $num1 + $num2) [root~]# echo $sum 3
expr
运算符中间必须有空格,否则:
[root~]# sum=$(expr $num1+$num2) [root~]# echo $sum 1+2
3. let
let
用法
let [变量名]=[运算式]
[root~]# let sum=$num1+$num2 [root~]# echo $sum 3 [root~]# let num=(1+2)*3/4+5 [root~]# echo $num 7
4. $((运算式))
或 $[运算式]
(常用)
$((运算式))
[root~]# a=1 [root~]# b=2 [root~]# c=$(($a+$b)) [root~]# echo $c 3
- 运算符中间也可以加空格
[root~]# c=$(( $a + $b )) [root~]# echo $c 3
$[运算式]
[root~]# c=$[$a+$b] [root~]# echo $c 3
- 运算符中间也可以加空格
[root~]# c=$[ $a + $b ] [root~]# echo $c 3
5. 运算符优先级
运算符优先级从高到低排序
运算符 | 说明 |
---|---|
- , + | 单目负,单目正 |
! , ~ | 逻辑非,按位取反或补码 |
* , / , % | 乘,除,取余 |
+ , - | 加,减 |
<< , >> | 按位左移,按位右移 |
< , > , <= , >= | 小于,大于,小于等于,大于等于 |
== , != | 等于,不等于 |
& | 按位与 |
^ | 按位异或 |
| | 按位或 |
&& | 逻辑与 |
|| | 逻辑或 |
= , += , -= , *= , /= , %= ,&= , ^= , |= , <<= , >>= | 赋值、运算且赋值 |
优先级相同的,从左到右运算。
有小括号的,先算小括号里面的。
实例
- 加。减、乘、除、取余、小括号
[root~]# a=$(( 4 + 5 * 3 / 2 )) [root~]# echo $a 11 [root~]# b=$(( (4 + 5) * 3 / 2 )) [root~]# echo $b 13 [root~]# c=$(( (4 + 5) * 3 % 5 )) [root~]# echo $c 2 [root~]# d=$(( (4 + 5) * 3 / (2 + 1) )) [root~]# echo $d 9
- 按位与
[root~]# e=$(( 1 & 0 )) [root~]# echo $e 0
- 按位或
[root~]# f=$(( 1 | 0 )) [root~]# echo $f 1
- 按位异或
[root~]# g=$(( 1 ^ 2 )) [root~]# echo $g 3
三、变量测试
变量测试一般在脚本优化时使用。格式复杂多样,语法简单。
1. 变量测试表
2. 实例
以变量测试表第一行 {x=${y-n}}
为例
- 变量y没有设置时,x=n
[root~]# unset y [root~]# x=${y-1} [root~]# echo $x 1
- 变量y为空值时,x=空值
[root~]# y='' [root~]# x=${y-1} [root~]# echo $x
- 变量y有值时,x=$y
[root~]# y=2 [root~]# x=${y-1} [root~]# echo $x 2
相关推荐
yutou0 2020-10-17
codedecode 2020-11-14
summerinsist 2020-08-21
87901735 2020-08-19
benico 2020-08-19
Rain 2020-08-15
RemixGdc 2020-08-15
Jaystrong 2020-08-02
KFLING 2020-08-01
zhangll00 2020-07-29
elitechen 2020-07-28
suosuo 2020-07-28
benico 2020-07-28
xiyoukeke 2020-07-28
小惠 2020-07-27
此处省略三千字 2020-07-20
泥淖 2020-07-19
安得情怀似旧时 2020-07-06
sunzhihaofuture 2020-07-04