数组定义

㈠ 数组分类

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

㈡ 普通数组定义

  • 可以切片

  • 一次赋予一个值

#数组名[索引下标]=值
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)

㈢ 数组的读取

${数组名[元素下标]}

echo ${array[0]}			#获取数组里第一个元素
echo ${array[*]} #获取数组里的所有元素
echo ${#array[*]} #获取数组里所有元素个数
echo ${array[@]} #访问数组中所有元数,等同于 echo ${array1[*]}
echo ${!array[@]} #获取数组元素的索引下标
echo ${array[@]:1:2} #访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素 #查看普通数组信息:
[root@MissHou ~]declare -a

㈣ 关联数组定义

  • 不能切片

①首先声明关联数组

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]++
[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" )'

其他变量定义

  • 取出一个目录下的目录和文件:dirnamebasename
# A=/root/Desktop/shell/mem.txt
# echo $A
/root/Desktop/shell/mem.txt
# dirname $A 取出目录
/root/Desktop/shell
# basename $A 取出文件
mem.txt
  • 变量"内容"的删除和替换
#一个“%”代表从右往左去掉一个/key/
#两个“%%”代表从右往左最大去掉/key/
#一个“#”代表从左往右去掉一个/key/
#两个“##”代表从左往右最大去掉/key/ #举例说明:
url=www.taobao.com
echo ${#url} #获取变量的长度
echo ${url#*.} #输出taobao.com
echo ${url##*.} #输出com
echo ${url%.*} #www.taobao
echo ${url%%.*} #输出www
  • 以下了解,自己完成
 #替换:/ 和 //
1015 echo ${url/ao/AO} #替换第一个ao
1017 echo ${url//ao/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 #${变量名:?新的变量值}
#变量没有被赋值或者赋空值时:提示错误信息
#变量被赋值:不会使用“新的变量值“ 替代 #说明:?主要是当变量没有赋值提示错误信息的,没有赋值功能

第四部分_Shell脚本数组和其他变量的更多相关文章

  1. perl5 第四章 列表和数组变量

    第四章 列表和数组变量 by flamephoenix 一.列表二.数组--列表的存贮  1.数组的存取  2.字符串中的方括号和变量替换   3.列表范围  4.数组的输出  5.列表/数组的长度  ...

  2. shell脚本-数组

    shell脚本-数组 数组 变量:存储单个元素的内存空间. 数组:存储多个元素的连续的内存空间,相当于多个变量的集合. 数组索引:编号从0开始,属于数值索引.索引可支持使用自定义的格式,而不仅是数值格 ...

  3. RMAN详细教程(四):备份脚本实战操作

    RMAN详细教程(一):基本命令代码 RMAN详细教程(二):备份.检查.维护.恢复 RMAN详细教程(三):备份脚本的组件和注释 RMAN详细教程(四):备份脚本实战操作 1.为了安全起见,先将数据 ...

  4. 四、Shell脚本高级编程实战第四部

    一.比较两个数的大小 #!/bin/shread -p "Pls input two num:" a b[ -z "$a" ] || [ -z "$b ...

  5. shell脚本——数组

    连续的变量 解决:变量过多的问题,在同一类变量中,不需要定义多个名字,而是以数组的方式来定义 定义数组: declare -I 定义整数 declare -a 定义数组 declare -A 定义嵌套 ...

  6. centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课

    centos shell编程5  LANMP一键安装脚本 lamp  sed  lnmp  变量和字符串比较不能用-eq  cat > /usr/local/apache2/htdocs/ind ...

  7. Ant 脚本打印系统属性变量、ant内置属性

    Ant 脚本打印系统属性变量.ant内置属性 作用 编写ant脚本的时候,经常会引用到系统属性,本脚本用于打印系统常用属性(System.getProperties)与环境变量(Environment ...

  8. 如何在SSIS的脚本组件中访问变量

    原文:如何在SSIS的脚本组件中访问变量 这是一个小问题,我们在SSIS的设计中很多地方都会用到变量,我习惯性地将"变量"和"表达式"称为SSIS的灵魂,虽然不 ...

  9. SSIS - 4.使用表达式任务和脚本任务实现更改变量和输出变量值

    一.脚本任务 脚本任务是SSIS包中功能很强大的组件,尤其当内置的任务无法实现我们需要的功能的时候,我们都可以使用脚本任务来实现.脚本任务使用VSTA(Microsoft Visual Studio ...

  10. loadrunner 脚本开发-int型变量和字符串的相互转换

    脚本开发-int型变量和字符串的相互转换 by:授客 QQ:1033553122 字符串转化为int型变量 Action2() { int j = 0; j = atoi("12345&qu ...

随机推荐

  1. docker入门加实战——docker安装并配置阿里云加速

    docker入门加实战--docker安装并配置阿里云加速 为什么要学习docker 在开发和部署项目的过程中,经常会遇到如下问题: 软件安装包名字复杂,不知道去哪里找 安装软件和部署项目步骤复杂,容 ...

  2. Python shape+size详解

    import cv2 from PIL import Image # pic.JPG 图片的路径 img = cv2.imread("pic.JPG",-1) print(&quo ...

  3. 掌握 Kubernetes 故障排除:有效维护集群的最佳实践和工具

    Kubernetes 是一款管理容器化应用程序的强大工具.然而,与任何复杂的系统一样,使用它时也可能出错.当问题出现时, 掌握有效的故障排除技术和工具非常重要. 本文将介绍以下步骤,助您了解事件收集的 ...

  4. js滚动条滚动到底部和顶部

    <!DOCTYPE html> <html> <head> <title></title> <style type="tex ...

  5. 学习一下Java的ArrayList和contains函数和扩容机制

    起因 在Leetcode上做题写了两种暴力解法,但是执行效率上不太一样. 时间上差很远,内存虽然差不多但是前者击败30%,后者击败94%.这两种解法区别是用一条ArrayList还是两条来存数据,所以 ...

  6. 1.NoSQL-lesson14-MongoDB核心技术-运维篇

    逻辑结构 Mongodb 逻辑结构 MySQL逻辑结构 库database 库 集合(collection) 表 文档(document) 数据行 选择之所以称为为选择,肯定是痛苦的! ------& ...

  7. idea java项目启动后访问html页面乱码

    最近在做一个较久的项目,用的还是servlet+html(jsp),代码拉到本地后运行,访问登录页login.html既然乱码,先看个乱码的效果 怎么样,是不是很经典的乱码,别着急,我们一点点来分析乱 ...

  8. Netty源码学习5——服务端是如何读取数据的

    系列文章目录和关于我 零丶引入 在前面<Netty源码学习4--服务端是处理新连接的&netty的reactor模式>的学习中,我们了解到服务端是如何处理新连接的,即注册Serve ...

  9. Vue3 第三章

    Vite目录 public 下面的不会被编译 可以存放静态资源 assets 下面可以存放可编译的静态资源 components 下面用来存放我们的组件 App.vue 是全局组件 main ts 全 ...

  10. 如何理解微服务体系结构中的 CQRS

    本文翻译自 How To Understand CQRS In Microservices Architecture,原作者 OLEKSII. 问题描述 在典型的软件应用程序中,有一个负责写入和读取操 ...