Linux Bash Shell学习(十六):数组
来源:互联网 发布:批量条形码生成器软件 编辑:程序博客网 时间:2024/06/05 06:11
本文也即《Learning the bash Shell》3rd Edition的第六章Command-Line Options and Typed varilables之读书笔记之三,但我们将不限于此。数组元素可以是string或者数字,同变量一样。数组的index从0开始计算,最大可以为599147937791。基本上可以认为没有限制。 定义方式 可以直接进行赋值 与上面方式一样,这里我们没有按顺序进行赋值。name=([2]=alice [0]=hatter [1]=duchess)。如果我们按顺序进行赋值,可以不需要说明index,name=(a b c)。如果我们其中有一个不依次赋值,可以指明,如name=(a [3]=b c),b赋值给index=3的元素,c按顺序赋值给下一个,即index=4。 如果我们定义一个空的数组,可以使用declare –a name来声明。变量用${array[i]},如果没有指明index,则返回第0个元素。 重置和取消 我们使用组合方式定义,即array=(…)的方式时,如果前面已经定义了数组,将重置整个数组。 如果我们要取消某个元素,可以使用unset array[i],如果我们要出现整个数组,可以使用unset array,或者unset array[@]和unset array[*]。 @,*和# 和位置参数一样,也可以使用@和*,使用*的时候,间隔为IFS。在上面的例子中echo ${name[@]}为zero one two。这可以用for的循环中: for entry in "${name[@]}"; do 如果index不存在,没有赋值,返回null,在${array[@]}中,不包含这些元素,只有有效值。例如: table=([1]=one [3]=three) 如果需要每个元素都显现,可以使用for((i=0;i<=3;i++))的方式。 #是长度的操作,${#array[i]}将返回第i元素的字符串的长度。而${#array[@]}则返回有效元素的格式,例如上面的例子中${#table[@]}为2。 例子一:利用/etc/passwd,通过用户ID获取用户名: for entry in $(cut -f 1,3 -d: /etc/passwd); do 例子二:冒泡算法 #设置数组values 相关链接: 我的Linux操作相关文章
name[2]=two
name[0]=zero
name[1]=one
echo --$entry--
done
#${array[@]}获取所有元素内容信息
echo ${table[@]}
#${!array[@]}获取所有元素序号信息
echo ${!table[@]}
for entry in ${table[@]}; do
echo ==$entry==
done
运行结果如下:
one three
1 3
==one==
==three==
#${entry#*:}是前面的用户ID,${entry%:*}是后面的用户名
echo "set array[${entry#*:}]=${entry%:*}"
array[${entry#*:}]=${entry%:*}
done
echo "User ID $1 is ${array[$1]}."
echo "There are currently ${#array[@]} user accounts on the system."
values=(39 5 36 12 9 3 2 30 4 18 22 1 28 25)
#获取values的个数
numvalues=${#values[@]}
#显示当前数组的值,用于跟踪
function showvalues
{
for (( k=0; k < numvalues; k++)); do
echo -ne "${values[$k]} "
done
echo
}
#冒泡算法 :将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
function bubble
{
for (( i=0; i < numvalues; i++));do
ischanged=false
for((j=numvalues-1; j> i; j--));do
# 如果轻的在下交换之,每次i的循环,都可以见最轻的放置在最上,并调整其他的位置,使之更为有序
if [ ${values[j]} -lt ${values[j-1]} ];then
temp=${values[j]}
values[j]=${values[j-1]}
values[j-1]=$temp
ischanged=true
fi
done
showvalues
#如果已经不需要调整,即有序,就跳出循环。
if [ ischanged = "false" ] ;then
break;
fi
done
}
- Linux Bash Shell学习(十六):数组
- linux bash shell 学习
- linux的shell(bash)脚本学习
- Linux学习(13)--初识bash shell
- Linux学习之八(shell、bash)
- Linux Bash Shell 学习笔记
- linux bash shell学习笔记
- Linux学习之Bash Shell
- 【Bash百宝箱】Linux shell学习
- Linux Bash Shell学习(一):开始看书《Learning the bash Shell,3rd》
- bash shell 学习 —— 数组
- Linux学习之十六(bash脚本编程之五 字符串测试及for循环)
- Linux Bash Shell学习(二):目录和通配符
- Linux Bash Shell学习(四):编辑命令
- Linux Bash Shell学习(六):设置环境参数
- Linux Bash Shell学习(十四):命令行选项
- Linux Bash Shell学习(十七):I/O重定向
- Linux Bash Shell学习(二十):命令行处理
- 笑一笑! 悟人生大道理!
- 原型制作软件 Mockups For Desktop
- mysql数据库的数据切分
- html手册
- 提高关键词排名的方法之一反向链接运用
- Linux Bash Shell学习(十六):数组
- 将数字世界与现实世界统一到一起的未来发明
- Struts配置
- 破解XP局域网共享连接数10个的限制
- 优秀员工的德商,智商,情商课程笔记
- 使用批处理启动及关闭SAP MMC
- 一些有用的开源项目
- 破解xp局域网共享限制(XP自由设置共享用户数方法)
- 关于perl的文件读取