linux基础值shell命令:declare声明,数组和方法

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个以上参数就需要用大括号包含比如“ 910{10
$* 这个表示得到所有的参数,不过把所有的参数看成一个整体
$@ 这个变量也是得到所有的参数,不过这个是将参数区分对待
$# 表示参数的个数

在这里插入图片描述

在这里插入图片描述

Guess you like

Origin blog.csdn.net/u011863822/article/details/120782992