假如list.txt里面有123,456,789按照行排列,那么只需要执行下面的命令就行了
#!/bin/bash
LISTS=($(cat list.txt))
echo "size: ${#LISTS[*]}"
for i in $( seq 0 $((${#LISTS[*]} - 1)) )
echo "index: $i"
echo "第: $((i + 1)) 个"
echo ${LISTS[i]}
保存list.sh并执行得到以下结果
size: 3
index: 0
第: 1 个
123
index: 1
第: 2 个
456
index: 2
第: 3 个
789
方法好多,这格式最简单有效的方法
一个简单的shell脚本确实最常用的,有时候我们需要从文本中一行一行读取并存到数组里。假如我有一个文件叫list.txt,如果你是在linux上创建的文件请忽略这个步骤。假如我在windows上编辑过那么格式就不是linux上的unix格式了,我需要先转换格式为unix防止出现意想不到的错误。具体方法请看下面应该会显示文件类型这个时候我们需要借助vim的命令,如下操作按住shift+冒号进入命令模式输入以下命令最后wq保存,再使用file命令查看文件属性就变成unix格式了。没有后面那一段提示了,
将多行结果转换为数组
有时通过匹配截取命令获取到的多行内容,需要遍历,首先将要遍历的内容转换为数组,多行内容只需要通过在执行结果加括号即可转化为数组。
比如我要获取系统里的磁盘。
ls -1 /sys/block | grep -E '(s|h)d[a-z]+' | sort
输出结果如下
root@Storage:~# ls -1 /sys/block | grep -E '(s|h)d[a-z]+' | sort
在shell中,要读取文件每一行并进行分割,可以使用`read`命令和内建的字段分隔符IFS(Internal Field Separator)来实现。
首先,我们需要将文件的内容逐行读取出来。可以使用`while`循环加`read`命令来实现,每次读取文件的一行内容,然后进行分割处理。
```bash
#!/bin/bash
filename="文件名.txt" # 需要读取的文件名
# 设置IFS为换行符,使read命令按行读取文件内容
IFS=$'\n'
# 逐行读取文件内容并分割
while read -r line; do
# 根据需求进行分割处理,例如按空格分割
words=($line)
# 遍历分割后的字段
for word in "${words[@]}"; do
echo "$word"
done < "$filename"
在脚本中,我们首先设置IFS为换行符,这样`read`命令就可以按行读取文件内容。然后,在循环中使用`read`命令读取文件的每一行,并将其赋值给变量`line`。接下来,利用分隔符(默认是空白符)对`line`进行分割处理,这里使用空格作为分隔符。分割后的字段会存储在数组`words`中。然后,我们可以遍历该数组,对每个字段进行操作,例如输出或赋给其他变量等。
需要注意的是,以上的示例脚本只是演示了一种常见的实现方式,分割的方式可以根据具体的需求进行调整,例如可以使用逗号、制表符等作为分隔符,并相应地修改IFS的值。另外,还需要根据具体情况处理特殊字符和空白行等异常情况。