linux中Bash数组使用示例

数组赋值

列表赋值

用新元素创建数组

array=('first element' 'second element' 'third element')
下标赋值

显式指定元素索引创建数组:

array=([3]='fourth element' [4]='fifth element')
按索引赋值

array[0]='first element'
array[1]='second element'
按名称赋值(关联数组)

declare -A array
array[first]='First element'
array[second]='Second element'
动态赋值

以其它命令的输出创建一个数组,例如使用seq创建一个从1到10的数组:

array=(`seq 1 10`)
从脚本参数创建数组

array=("$@")
循环内赋值

while read -r; do
    #array+=("$REPLY")     # Array append
    array[$i]="$REPLY"     # Assignment by index
    let i++                # Increment index
done < <(seq 1 10)  # command substitution
echo ${array[@]}    # output: 1 2 3 4 5 6 7 8 9 10
访问数组元素

打印索引为0的元素

echo "${array[0]}"
打印最后一个元素(从Bash 4.3可用)

echo "${array[-1]}"
打印从索引1开始的元素

echo "${array[@]:1}"
打印从索引1开始的3个元素

echo "${array[@]:1:3}"
数组更改

按索引更改

初始化或者更新数组中的一个特定元素

array[10]="elevenths element"    # because it's starting with 0
追回

修改数组,追加元素到数组结尾

array+=('fourth element' 'fifth element')
添加元素到数组开头

array=("new element" "${array[@]}")
插入

给定索引值插入一个元素

arr=(a b c d)
# insert an element at index 2
i=2
arr=("${arr[@]:0:$i}" 'new' "${arr[@]:$i}")
echo "${arr[2]}" #output: new
删除

使用uset删除指定索引元素

arr=(a b c)
echo "${arr[@]}"   # outputs: a b c
echo "${!arr[@]}"  # outputs: 0 1 2
unset -v 'arr[1]'
echo "${arr[@]}"   # outputs: a c
echo "${!arr[@]}"  # outputs: 0 2
重排索引

当有一些元素从数组被删除时,可以使用下面方法重排索引,或者你不知道索引是否存在时隙时会有用。

array=("${array[@]}")
数组长度

${#array[@]}可以得到${array[@]}数组的长度

array=('first element' 'second element' 'third element')
echo "${#array[@]}" # gives out a length of 3
迭代数组元素

fileList=( file1.txt file2.txt file3.txt )
 
# Within the for loop, $file is the current file
for file in "${fileList[@]}"
do
  echo "$file"
done

时间: 2024-10-13 23:14:19

linux中Bash数组使用示例的相关文章

linux中Bash数组操作教程

一.定义数组 1. 使用[]操作符 names[0]='zrong' names[1]='jacky' 2. 使用()直接赋值 names=('zrong' 'jacky') # 或 names=([0]='zrong' [1]='jacky') 3. 使用declare -a定义数组.这种方法可以将一个空的变量定义成数组类型. declare -a names 4. 从文件中读取数组 cat>names.txt zrong jacky sweet Ctrl+C # 将每一行读取为数组的一个元素

有关数组定义-关于linux中的数组问题 求各位解答

问题描述 关于linux中的数组问题 求各位解答 有点搞不明白 空数组和空字符数组两个的区别 也就是说 array1=()和array2=("")这两个定义的数组的区别是什么... 解决方案 空数组是软数组int a(0) 小括号是方括号. 没有分配空间,而字符空数组会以结尾会占一个空间.你可以自行测试一下 解决方案二: 一个是空的字符串,一个是null 解决方案三: int array={};是普通数组声明 char array="";是字符串数组声明 解决方案四

Linux中find常见用法示例

  ·find path -option [ -print ] [ -exec -ok command ] {} ; find命令的参数; pathname: find命令所查找的目录路径.例如用.来表示当前目录,用/来表示系统根目录. -print: find命令将匹配的文件输出到标准输出. -exec: find命令对匹配的文件执行该参数所给出的shell命令.相应命令的形式为'command' { } ;,注意{ }和;之间的空格. -ok: 和-exec的作用相同,只不过以一种更为安全的

linux中Bash内部变量使用示例

$@ "$@"把所有的命令行参数作为一个数组返回.与"$*"不一样,它是作为一个字符串来返回. "$@"可以通过循环来遍历所有元素,如下脚本: #!/bin/bash for var in "$*"; do     echo $var done 因为$*只把参数作为一个字符串返回,echo就只被调用一次: ~> $ ./testscript.sh firstarg secondarg thirdarg firstarg

linux中Bash重定向输出使用示例

重定向标准输出 > 重定向当前命令的标准输出(STDOUT)到一个文件或者一个描述符. 下面的例子把ls命令的输出存到file.txt文件 ls >file.txt > file.txt ls 目标文件如果不存在就会被创建,或者文件被截断. 如果不指定,默认重定向描述符是标准输出或1.下面的命令等同于上面的例子: ls 1>file.txt 追加 vs 截断 截断 > 1.如果文件不存在则创建 2.截断(删除文件内容) 3.写入文件 $ echo "first li

10 个 Linux 中的 passwd 命令示例

正如 passwd 命令的名称所示,其用于改变系统用户的密码.如果 passwd 命令由非 root 用户执行,那么它会询问当前用户的密码,然后设置调用该命令的用户的新密码.当此命令由超级用户 root 执行的话,就可以重新设置任何用户的密码,包括不知道当前密码的用户. 在这篇文章中,我们将用实例来介绍 passwd 命令. 语法 : # passwd {options} {user_name} 可以在 passwd 命令使用不同的选项,列表如下: 例1:更改系统用户的密码 当你使用非 root

linux中Bash shell学习笔记

BASH 的基本语法 •最简单的例子 -- Hello World www.111cn.net ! •关于输入.输出和错误输出 •BASH 中对变量的规定(与 C 语言的异同) •BASH 中的基本流程控制语法 •函数的使用 2.1     最简单的例子 -- Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH. 用 vi 编辑器编辑一个 hello 文件如下: #!/bin/bash # T

linux中shell生成随机密码示例

为了生成更加无序及相应复杂的密码,因此写了个生成随机密码的脚本,在此之前生成密码通常我是通过如下命令实现的 cat /dev/urandom | head -n 1 | md5sum | head -c 16 好了,不说所了,直接上脚本  代码如下 复制代码   [root@liufofu shell]# cat make_random_passwd.sh #!/bin/bash ######################################### # author       

linux中bash: service: command not found 错误

  今天在进行linux操作的时候,要对vsftpd服务进行重启,使用service vsftpd restart,此时报了一个难以让人相信的错误: bash: service: command not found 于是我到网上去一搜了一下,解决方法其实挺简单的,使用su切换到root账号的时候前加一个"-"即: su - root 进入root账号后再使用 service vsftpd restart 问题解决了! 后来我去网上找了些出现这个错误的原因: service命令是要用RO