[TOC]
变量: 存储单个元素的内存空间
数组: 存储多个元素的连续的内存空间
数组
# 声明数组:
declare -a array_name
declare -A array_name # 关联数组
# 赋值:
# (1) 一次只赋值一个元素
weekdays[0]="sunday"
weekdays[4]="thursday"
# (2) 一次赋值全部元素
weekdays=("1" "2" "3" "4" "5" "6")
# (3) 只赋值特定元素
weekdays=([0]="sunday" [3]="1" [8]="angery") # 支持稀疏格式赋值
# (4)
read -a array
# 引用:
${array_name[INDEX]}
# 显示数组中全部元素:
${array_name[*]}或${array_name[@]}
# 数组长度(元素个数):
${#array_name[*]}或${#array_name[@]}
# 数组切片:
${array[@]:offset:number}
# offset: 要跳过的元素个数
# number: 要取出的元素个数, 省略:number时取偏移量之后的所有元素
# 追加:
array[${#array[@]}]='val'
# 删除某元素:
unset array[index]
# 关联数组:
declare -A array_name
array_name=([index_name1]='val1' [index_name2]='val2' ...)
# 随机数(产生的随机数都在0~32767)
$RANDOM
bash的字符串处理工具:
# 切片
${var:offset:number}
# 取字符串的最右侧几个字符(注: 冒号后必须有一空白字符):
${var: -length}
# 基于模式取子串:
${var#*word} # 自左而右, 匹配var变量所存储的字符串中第一次出现的word,
# 删除字符串开头至第一次出现word字符之间的所有字符
${var##*word} # 同上, 删除字符串开头至最后一次出现word字符之间的所有字符
${var%word*} # 自右而左, 匹配var变量所存储的字符串中第一次出现的word,
# 删除字符串开头至第一次出现word字符之间的所有字符
${var%%word*} # 同上, 删除字符串末尾至最后一次出现word字符之间的所有字符
# 示例: url=http://www.magedu.com:80
${url##*:} # 可得端口为80
${url%%:*} # 可得协议为http
# 查找替换:
${var/pattern/substi} # 查找var所标示的字符串中,
# 第一次能被patern所匹配到的字符串, 以substi替换之
${var//pattern/substi} # 查找var所标示的字符串中,
# 所有能被patern所匹配到的字符串, 以substi替换之
${var/#pattern/substi} # 查找var所标示的字符串中,
# 行首能被patern所匹配到的字符串, 以substi替换之
${var/%pattern/substi} # 查找var所标示的字符串中,
# 行尾能被patern所匹配到的字符串, 以substi替换之
# 查找并删除:
${var/pattern} # 删除第一次匹配到的
${var//pattern} # 删除所有匹配到的
${var/#pattern} # 只删除行首
${var/%pattern} # 只删除行尾
# 字符大小写转换:
${var^^} # 全转换为大写
${var,,} # 小写
# 变量赋值:
${var:-value} # 若var为空或未设置, 返回value, 否则返回var的值
${var:=value} # 若var为空或未设置, 返回value, 并将value赋值给var, 否则返回var的值
${var:+value} # 若var不空, 则返回value
${var?error_info} # 若var为空或未设置, 返回error_info, 否则返回var的值
为脚本程序使用配置文件:
- (1) 定义文本文件, 每行定义
name=value
- (2) 在脚本中source此文件即可
mktemp
此命令执行后的返回值为创建的文件或目录, 可以重新赋值给新变量.
mktemp [option]... [template]
# template: file.XXX (至少3个XXX)
# option:
-d 创建临时目录
mktemp -d test.XXX
--tmpdir=/path/to/dir 指明临时文件的存放目录, 此目录必须事先存在
install
- 此命令用法类似于cp, 但更加强大
install [option]... [-T] source dest
install [option]... source... dir
install [option]... -t dir source...
install [option]... -d dir...
# option:
-m mode
-o owner
-g group
reference: 马哥教育视频
网友评论