首页 > 系统相关 >SHELL数组

SHELL数组

时间:2024-08-20 14:37:09浏览次数:7  
标签:123 SHELL echo abc 数组 root MissHou

数组定义

1、数组分类

普通数组:只能使用整数作为数组索引(元素的下标)
关联数组:可以使用字符串作为数组索引(元素的下标)

2、普通数组定义
一次赋予一个值

数组名[索引下标] = 值(元素)
array[0]=v1
array[1]=v2
array[2]=v3
array[3]=v4

一次赋予多个值

数组名 = (值1 值2 值3 ...)
array=(var1 var2 var3 var4)
array1=(`cat /etc/passwd`)                  将文件中每一行赋值给array1数组
array2=(`ls /root`)
array3=(harry amy jack "Miss Hou")
array4=(1 2 3 4 "hello world" [10]=linux)

3、数组的读取
${数组名[元素下标]}

echo ${array[0]}			获取数组里第一个元素
echo ${array[*]}			获取数组里的所有元素
echo ${#array[*]}			获取数组里所有元素个数
echo ${!array[@]}    	    获取数组元素的索引下标
echo ${array[@]:1:2}        访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素

查看普通数组信息:

[root@MissHou ~]# declare -a

4、关联数组定义

Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。

关联数组使用 declare 命令来声明,语法格式如下:
declare -A array_name

①首先声明关联数组

declare -A asso_array1
declare -A asso_array1
declare -A asso_array2
declare -A asso_array3

② 数组赋值
一次赋一个值
数组名[索引or下标]=变量值

# asso_array1[linux]=one
# asso_array1[java]=two
# asso_array1[php]=three

一次赋多个值

# asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss Hou")

查看关联数组

# declare -A
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss Hou" )'

获取关联数组值

# echo ${asso_array1[linux]}
one
# echo ${asso_array1[php]}
three
# echo ${asso_array1[*]}
three two one
# echo ${!asso_array1[*]}      
php java linux
# echo ${#asso_array1[*]}
3
# echo ${#asso_array2[*]}
4
# echo ${!asso_array2[*]}
name3 name2 name1 name4

其他定义方式

[root@MissHou shell05]# declare -A books
[root@MissHou shell05]# let books[linux]++        #默认赋值数组为0,++为1
[root@MissHou shell05]# declare -A|grep books
declare -A books='([linux]="1" )'
[root@MissHou shell05]# let books[linux]++
[root@MissHou shell05]# declare -A|grep books
declare -A books='([linux]="2" )'

其他变量定义

1、取出一个目录下的目录和文件:dirname和 basename

# A=/root/Desktop/shell/mem.txt 
# echo $A
/root/Desktop/shell/mem.txt
# dirname $A   取出目录
/root/Desktop/shell
# basename $A  取出文件
mem.txt

2、变量"内容"的删除和替换

一个“%”代表从右往左删除
两个“%%”代表从右往左去掉最多
一个“#”代表从左往右去掉删除
两个“##”代表从左往右去掉最多

举例说明:

# url=www.taobao.com
# echo ${#url}		           获取变量的长度
# echo ${url#*.}               从左往右去.前边的
# echo ${url##*.}
# echo ${url%.*}
# echo ${url%%.*}

3、以下了解,自己完成

替换:/ 和 //
1015  echo ${url/ao/AO}  用AO代替ao(从左往右第一个)
1017  echo ${url//ao/AO}   贪婪替换(替代所有)
 
替代: - 和 :-  +和:+
1019  echo ${abc-123}
1020  abc=hello
1021  echo ${abc-444}
1022  echo $abc
1024  abc=
1025  echo ${abc-222}

${变量名-新的变量值} 或者 ${变量名=新的变量值}
变量没有被赋值:会使用“新的变量值“ 替代
变量有被赋值(包括空值): 不会被替代

1062  echo ${ABC:-123}
1063  ABC=HELLO
1064  echo ${ABC:-123}
1065  ABC=
1066  echo ${ABC:-123}

${变量名:-新的变量值} 或者 ${变量名:=新的变量值}
变量没有被赋值或者赋空值:会使用“新的变量值“ 替代
变量有被赋值: 不会被替代
1116  echo ${abc=123}
1118  echo ${abc:=123}
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc:+123}
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc:+123}
123
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc:+123}

${变量名+新的变量值}
变量没有被赋值或者赋空值:不会使用“新的变量值“ 替代
变量有被赋值: 会被替代
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc+123}
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc+123}
123
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc+123}
123

${变量名:+新的变量值}
变量没有被赋值:不会使用“新的变量值“ 替代
变量有被赋值(包括空值): 会被替代
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc?123}
-bash: abc: 123
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc?123}
hello
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc?123}

${变量名?新的变量值}
变量没有被赋值:提示错误信息
变量被赋值(包括空值):不会使用“新的变量值“ 替代
[root@MissHou ~]# unset abc
[root@MissHou ~]# echo ${abc:?123}
-bash: abc: 123
[root@MissHou ~]# abc=hello
[root@MissHou ~]# echo ${abc:?123}
hello
[root@MissHou ~]# abc=
[root@MissHou ~]# echo ${abc:?123}
-bash: abc: 123

${变量名:?新的变量值}
变量没有被赋值或者赋空值时:提示错误信息
变量被赋值:不会使用“新的变量值“ 替代
说明:?主要是当变量没有赋值提示错误信息的,没有赋值功能

标签:123,SHELL,echo,abc,数组,root,MissHou
From: https://www.cnblogs.com/OpenSourceSite/p/18369364

相关文章

  • 【NOI】C++数据结构入门之一维数组(二)数组找数
    文章目录前言一、概念1.导入2.数组找数二、例题讲解问题类型——查找特定值问题:1154.数组元素的查找问题:1815.最后一次出现该数的位置问题类型——查找最值问题:1152.求n个数的最大值和最小值问题:1168.歌唱比赛评分问题类型——统计出现次数问题:1810.最贵商品和最......
  • SHELL之数值运算
    【四则运算符号】表达式举例$(())echo$((1+1))$[]echo$[10-5]exprexpr10/5(运算符左右有空格)letn=1;letn+=1等价于letn=n+1一、整数运算1、基本运算类别加法:+减法:-乘法:*整除:/取余数:%2、expr运算工具加法:+减法:-乘法:*整除:/取......
  • C语言:一维、二维数组详解
    目录一、数组的概念二、一维数组创建和初始化2.1数组创建2.2数组的初始化2.3数组的类型三、一维数组的使用3.1数组的下标3.2数组的输入与输出四、⼀维数组在内存中的存储五、sizeof计算数组元素个数六、二维数组6.1二维数组的概念6.2二维数组的创建6.3二......
  • 后缀数组
    先介绍计数排序。思考一下桶排序,桶排序是不稳定的。计数排序相当于是稳定的桶排序,时间复杂度为\(O(值域)\)设数组\(a\)的值域为\([1,n]\),数组\(c\)表示每个元素的数目(也就是桶),数组\(r[i]\)表示\(a[i]\)的排名(注意这个排名是稳定的,也就是说当有多个\(a[i]\)的时候,相对顺序不会变化......
  • SHELL之变量
    一、脚本1、shell组成#!脚本声明(使用哪种解释器)#注释信息脚本内容注意: 如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用:#!/bin/env解释器 #!/bin/envbash2、执行脚本方式sh-x脚本文件路径source脚本文件路......
  • 两线程读写数组
    #include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#defineARRAY_SIZE10intshared_array[ARRAY_SIZE];pthread_mutex_tmutex;void*write_data(void*arg){intthread_id=*(int*)arg;......
  • 【数据结构与算法第一章】编程基础:变量与数据类型、指针、结构体、数组与链表、程序结
    目录【数据结构与算法第一章】编程基础1.1变量与数据类型1.2指针1.3结构体1.4数组和链表1.5程序结构1.6函数中参数的传递1.7C语言中运算符的含义【数据结构与算法第一章】编程基础1.1变量与数据类型变量:    ①在C语言中,所有变量必须先声明后使用......
  • PowerShell 脚本是什么?
     目录前言什么是PowerShell?PowerShell的历史PowerShell脚本的定义PowerShell的基本语法1.命令和Cmdlet2.变量3.控制结构4.函数5.模块PowerShell脚本的应用场景1.系统管理2.数据处理3.网络管理4.自动化测试5.云计算PowerShell脚本的编写与......
  • Java数组02:数组内存分析、三种初始化方式及特点
    本节内容视频链接:Java数组03:三种初始化及内存分析_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p=53&vd_source=b5775c3a4ea16a5306db9c7c1c1486b51.数组内存分析堆:存放new的对象和数组;可以被所有线程共享,不会存放别的对象引用;栈:存放基本变量类型,会包含......
  • Java数组03:数组边界、数组的使用
    本节内容视频链接:https://www.bilibili.com/video/BV12J41137hu?p=55&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p=55&vd_source=b5775c3a4ea16a5306db9c7c1c1486b51.数组边界数组下标的合法区间[0,Length-1],如果越界就会报......