shell编程:有类型的变量
1、通过 declare 和 typeset 命令
- declare 和 typeset 两者等价
- declare 和 typeset 都是用来定义变量类型的
- 下面以 declare 进行总结
2、declare 参数如下
- -r 将变量设置为只读
- -i 将变量设置为整数
- -a 将变量设置为数组
- -F 显示此脚本前定义过的所有函数及内容
- -f 仅显示此脚本前定义过的函数名
- -x 将变量声明为环境变量
3、举例:
例1: 声明为不可变形式, declare -r
$ var=hello
$ var=world
$ echo $var
打印出:world // 说明 var是可变的
$ declare -r var=hello
$ var=world
打印结果:-bash: var: 只读变量
例2:声明为整型, declare -i
$ num=10
$ num2=$num+20
$ echo $num2
打印出:10+20
$ expr $num + 20
打印出:30
$ num=10
$ declare -i num3
$ num3=$num+90
$ echo $num3
打印出:100
例3:显示出系统中定义的 函数名及函数体
$ declare -F
例4: 显示出系统中定义的所有函数的函数名
$ declare -f
例5:声明为数组, declare -a
$ declare -a array // 声明一个数组
$ array=("jones" "mike" "kobe" "jordan") // 赋值
输出数组内容:
$ echo ${array[@]} // 输出全部内容,打印出:jones mike kobe jordan
$ echo ${array[0]} // 输出数组元素下标为0的值,打印出:jones
获取数组长度:
$ echo ${#array[@]} // 输出数组长度,打印出:4
$ echo ${#array[0]} // 输出数组第0个元素的长度,打印出:5
给数组某个下标赋值:
$ array[0]=lisi
$ echo ${array[@]} // 输出:lisi mike kobe jordan
给数组尾部添加一个元素:
$ array[10]=zhangsan // 下标必须大于数组长度 - 1,可以大很多
删除元素:
$ unset array[2] // 删除数组的第三个元素
$ unset array // 清空整个数组
分片访问:
$ echo ${array[@]:1:3} // 从下标为 1 的位置开始,向后取 3个元素,忽略中间的空元素,直到取够 3个元素。如果元素不足3个,则输出后面的所有元素即可。
内容替换:
$ array2=${array[@]/ke/KE} // 将数组中所有 ke 替换为 KE。
$ echo ${array2[@]}
数组遍历:
for v in ${array[@]}
do
echo $v
done
例6: 声明为环境变量 declare -x
$ declare -x num // num 成为环境变量后,就可以在脚本中直接使用。 如果不是环境变量,则只能在这个终端里面使用。
4、取消声明的变量
declare +r
declare +i
declare +a
declare +x