declare
用于shell中的声明变量,declare第一种语法中用来声明变量并设置变量的属性,也可以再语法中来显示shell函数,若不加上任何参数,则会显示宣布的shell变量和函数。
格式
declare [+/-][rxi][变量名称=设置值] 或 declare -f
参数 | 说明 |
---|---|
+/- | "-“可用来指定变量的属性,”+"则是取消变量所设的属性。 |
-f | 仅用显示函数 |
-r | 变量设置成只读 |
-x | 指定变量为环境变量,可以为shell以外的程序来使用 |
-i | [设置值]可以是数值,字符串或运算式。 |
-a | 设置为数组 |
-A | 设置为关联数组(有点像java中的map) |
其实这个声明如果简单声明一个变量比如数字可以不写,但是如果数关联数组(有点像java中的map)的话需要提前对其格式进行声明的。
# 声明一个变量a 为正数变量
declare -i a
a=12 #如果a="aa" 那么打印出来时0
#上面也可以简写为
declare -i a=12
# 如果非要将a进行赋值为"aa"
declare +i a
a="aa" #这样打印出的aa
#也可以设置只读
declare -r a
#声明数组
declare -a cd='([0]="a" [1]="b" [2]="c")' //声明数组变量
#声明关系数组
decalre -A cd
cd["name"]="zhagnsan"
cd["age"]=12
数组
编程一般都有数组,方便存储多个数据,而shell也不例外也是有数组,不过其只有一维数据,没有多维数据。而其下标也是编程的老规矩,从0开始。
shell数组用括号来表示,元素用空格分格开,具体格式如下:
arr=(value1 value2 ………………)
#也可以让如下定义
arr[0]=value1
arr[1]=value2
arr………………
如果引用或者echo打印数组内容,如下
#数组打印出来
${arr[*]} 或者 ${arr[@]}
# 打印数组中的元素个数
${#arr[*]} 或者 ${#arr[@]}
可以看出:
如果$+数组变量默认会输出第一个存储的值 同样无法$+变量+【下标】和${变量}也是会输出第一个值
如果输出的是长度的话,可以简写${#变量}
数组拼接
数组拼接,就是将两个数组连接一个数组。拼接数组的思路是:先利用@或*,将数组扩展成列表,然后再合并在一起。
arrNew=(${arr1[@]} ${arr2[@]})
或者
arrNew=(${arr1[*]} ${arr2[*]})
删除数组或数组元素
这个也需要用到命令unset
#如果删除数组
unset arr #不需要前面有什么$符号
#删除数组的第一个元素
unset arr[0]
对数组的其他操作
数组打印片段
分片,格式:${数组名[*或@]:起始位:长度},截取部分数组,返回字符串,中间用空格分隔;将结果使用“()”,则得到新的切片数组
${数组名[*或@]:起始位:长度}
具体如下:
#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[*]:1:4}
演示
数组替换元素
替换元素,格式:${数组名[*或@]/查找字符/替换字符}, 不会修改原数组;如需修改的数组,将结果使用“()”赋给新数组
${数组名[*或@]/查找字符/替换字符}
示例:
#!/bin/bash
a=(1 2 3 4 5 6)
echo ${a[*]/5/8}
关联数组
新版的bash shell 支持关联数组,关联数组使用字符串作为下标,而不是数字,这样方便我们知道某些内容具体代表什么意义。
关联数组是key-value键值对,有点像是java中的map。
#声明关系数组
declare -A cd
cd["name"]="zhangsan"
cd["age"]=12
打印的时候方便用户只读某些字段以及其内容涵义,比如 ${cd[“name”]},输出的时zhangsan.
方法
shell 也有可以定义方法,具体格式如下:
[ function ] funname ( )
{
action;
[return int;]
}
# function可以不用写 比如定义个test方法
可以 function test() 或者直接 test()
#返回参数,可以写也可以不写
return的返回如果不加的会将最后一条命令运行结果作为返回值,如果return那么后的数值n(0-255)
# 方法中的参数形参不用写,直接通过$+参数 进行获取,就是前面所说的位置参数变量
位置参数 | 意思 |
---|---|
$n | n为数字,$0的意思就是命令本身。$1- 9 代 表 第 一 到 第 九 个 参 数 , 如 果 是 10 个 以 上 参 数 就 需 要 用 大 括 号 包 含 比 如 “ 9代表第一到第九个参数,如果是10个以上参数就需要用大括号包含比如“ 9代表第一到第九个参数,如果是10个以上参数就需要用大括号包含比如“{10 |
$* | 这个表示得到所有的参数,不过把所有的参数看成一个整体 |
$@ | 这个变量也是得到所有的参数,不过这个是将参数区分对待 |
$# | 表示参数的个数 |