编程数组

编程数组_第1张图片

变量:储存单个元素的内存空间
数组:储存多个元素的连续的内存空间,相当于多个变量的集合
数组名和索引:
    索引:编号从0开始,属于数值索引
    注意:索引可支持自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持
    bash的数组支持稀疏格式(索引不连续)
声明数组:
    declare -a  数组名    数字数组
    declare -A  数组名    自定义数组,关联数组
    注意:两者不可相互转换


数组赋值
1)一次只赋值一个元素
数组名[索引]="值"
name[0]="man"
name[1]="won"
2)一次赋值全部元素
数组名=("值1" "值2" "值3")
name=("man" "won" "wang")
filename=(`ls /home/wang/bin`)
3)只赋值特定元素
name=([0]=man [2]=wang)
4)交互式数组值对赋值
read -a 数组名
5)在原有数组中新增一个元素
数组名[${#数组名[*]}]=新元素
name[$#name[*]]=zhang


显示所有数组:declare -a


引用数组
引用数组元素:
    ${数组名[索引]}
    注意:省略[索引]表示引用索引0的元素
引用数组所有元素:
    ${数组名[*]}
    ${数组名[@]}
数组的长度(数组中元素的个数):
    ${#数组名[*]}
    ${#数组名[@]}
删除数组中的某元素:
    unset 数组名[索引]
删除整个数组:
    unset 数组名


字符串(var)切片             offset、length的取值在0到${#var}-1之间,bash4.2之后支持负数
${#var}:显示字符串长度
${var:offset}:跳过offset个,显示剩下部分
${var:offset:number}:跳过offset个,显示之后的number个
${var: -length}:显示倒数length个
${var:offset:-length}:跳过offset个和倒数length个,显示中间
${var: -length:-offset}:先取出倒数length个,结果再减去倒数offset个


基于模式取字符串
${var#*关键字}:从左开始,显示第1个关键字后面的内容
${var##*关键字}:从左开始,显示最后一个关键字后面的内容

file="var/log/mess"
${file#*/}:log/mess
${file##*/}:mess


${var%关键字*}:从右开始,显示第1个关键字后面的内容
${var%%关键字*}:从右开始,显示最后一个关键字后面的内容

file="var/log/mess"
${file%/*}:var/log
${file%%/*}:var
 


查找替代
${var/关键字/替代}:替代第一次匹配到的关键字
${var//关键字/替代}:替代所有匹配到的关键字
${var/#关键字/替代}:替代行首的关键字
${var/%关键字/替代}:替代行尾的关键字

查找删除
${var/关键字}:删除第一个关键字
${var//关键字}:删除所有关键字
${var/#关键字}:删除行首的关键字
${var/%关键字}:删除行尾的关键字

字符大小写转换
${var^^}:转换成大写
${var,,}:转换成小写


Shell变量一般是无类型的,但是bash Shell提供了decalre和type两个命令用户指定变量的类型,两个命令是等价的
    declare -r  声明只读变量
        -i  定义为整形数
        -a  定义为数组
        -A  定义为关联数组
        -f  显示已定义的所有函数
        -F  仅显示已定义的函数名
        -x  声明全局变量和函数
        -l  声明变量为小写字母
        -u  声明变量为大写字母

eval  先扫描命令行进行置换,然后再执行置换后的命令;适用于那些一次扫描无法实现其功能的变量
n=10
eval echo {0..$n}

间接变量:第一个变量调用第二个变量的值
bash Shell提供了两种格式实现间接变量引用
eval tempvar=\$$variable1
或tempvar=${!variable1}


创建临时文件
mktemp tmpXXX    创建临时文件,最少XXX
mktemp -d        创建临时目录
       -p        指明临时文件所存放目录位置

mktemp /tmp/testXXX
tmpdir=`mktemp -d /mnt/testdirXXX`


安装复制文件
install 源文件 目标
install -d  /home/test   创建文件夹
install -m   修改权限,默认755
        -o   修改所有者
        -g   修改所属组
install -m 700 -o wang -g admins /etc/fstab /boot/fstab1
install -m 770 -d /data/filedir


例子:
生成10个随机数保存于数组中,并找出最大值和最小值
declare -i min max
declare -a nums
for((i=0;i<10;i++));do
        nums[$i]=$RANDOM
        [ $i -eq 0 ] && min=${nums[$i]} && max=${nums[$i]} && continue
        [ ${nums[$i]} -gt $max ] && max=${nums[$i]}
        [ ${nums[$i]} -lt $max ] && mix=${nums[$i]}
done
echo "All numbers are ${nums[*]}"
echo Max is $max
echo Min is $min

你可能感兴趣的:(马哥随堂笔记,bash)