Bash script进阶笔记

  1. 数组类型
bash 复制代码
arr=(1 2 3)					# 最基础的方式声明数组,用小括号(),元素之间逗号分隔
arr=([1]=10 [2]=20 [3]=30)	# 初始化时指定index
declare -a arr=(1 2 3)		# 用declare -a声明数组,小括号外面可选使用单引号、双引号
declare -a arr='(1 2 3)'
declare -a arr=([0]="a" [10]="b" [2]="c")	# 声明数组时指定index

echo ${arr[0]}	# output 1
echo ${arr[11]}	# not exist, output empty
  1. declare命令

    declare是bash内置命令,可为变量设置属性(值类型、访问类型等)。

    常用参数:

    -a: indexed array 数组

    -A: associative array Map类型

    -i: integer

    -r: read only

    -f: function

    -x: export,导出环境变量

  2. Map类型(关联数组)

    1)最外面是小括号(),内部元素间用空格分隔,下标用中括号[]指定。

    2)需要使用declare -A声明,不能像数组那样可省略declare -a

    3)必须提供'下标',下标可用数字(此时和数组类似),可以是字符串(单引号、双引号都可以)

bash 复制代码
declare -A map=(["a"]=10 ["b"]=20 ['c']=30)
echo ${map['a']}

declare -A map=([1]=10 [2]=20 [3]=30)
echo ${map[1]}
  1. glob扩展
bash 复制代码
# 目录中有3个文件
$ ls
a1  a2  b1

# [...]用括号内每个元素分别扩展,如果没有匹配的,则跳过,不会报错,不同于{...}扩展
$ ls a[123]
a1  a2

# {...}和上面的匹配对比,如果存在不匹配的,会报错提示
$ ls a{1,2,3}
ls: cannot access 'a3': No such file or directory
a1  a2

# a1.txt  a2.txt  b1.sh
# 多种扩展组合使用
$ ls [ab]1.{txt,sh,cpp}
ls: cannot access '[ab]1.cpp': No such file or directory
 a1.txt   b1.sh

# {}扩展第一项可为空,以下命令等效:cp a.txt a.txt.bak 
$ cp a.txt{,.bak}

# {start..end} {start..end..step} 扩展一个范围
$ echo {1..5}
1 2 3 4 5
$ echo {1..5..2}
1 3 5
$ echo {3..1}
3 2 1

# 子命令扩展
date_str=$(date)
date_str=`date`  # 等价

echo $date_str

# 算数扩展
ret=$((1+2*3))
echo $ret

# 在脚本中,可以直接引用*.log
for logFile in *.log
do
	echo $logFile
done
  1. 关闭shell终端,不终止当前运行的程序
bash 复制代码
nohup some_cmd	# 解除some-cmd进程和当前shell的关联,some-cmd父进程改为initd
jobs # 查看当前后台运行的进程
disown %2	# 解除后台进程#2和当前terminal的关联,把其父进程改为systemd
disown -h %2

# 查看shell option
shopt huponexit
shopt | grep huponexit
shopt -s huponexit	# set
shopt -u huponexit	# unset
相关推荐
lpfasd12318 分钟前
辞别2025:在不确定中锚定确定,在喧嚣里守护清醒
笔记
航Hang*11 小时前
Photoshop 图形与图像处理技术——第8章:图像的色彩与色彩调整和图像的输出与优化
图像处理·笔记·ui·photoshop
小桥流水---人工智能11 小时前
风电机组故障诊断与状态监测方法的研究局限性整理(背景笔记)
笔记
菩提小狗12 小时前
小迪安全笔记_第4天|扩展&整理|30+种加密编码进制全解析:特点、用处与实战识别指南|小迪安全笔记|网络安全|
笔记·安全·web安全
xian_wwq12 小时前
【学习笔记】OSI安全架构体系
网络·笔记·学习
Irene199112 小时前
Bash、PowerShell 常见操作总结
bash·powershell
love530love12 小时前
Windows 11 下再次成功本地编译 Flash-Attention 2.8.3 并生成自定义 Wheel(RTX 3090 sm_86 专属版)
人工智能·windows·笔记·编译·flash_attn·flash-attn·flash-attention
中屹指纹浏览器14 小时前
2025 硬核技术:中屹指纹浏览器进程级沙箱隔离,筑牢多开防关联壁垒
经验分享·笔记
再睡一夏就好14 小时前
多线程并发编程核心:互斥与同步的深度解析及生产者消费者模型两种实现
linux·运维·服务器·jvm·c++·笔记
m0_7269659814 小时前
RAG源代码笔记JAVA-高级RAG
笔记·ai·agent·rag