您好,我正在尝试编写一个简单的bash脚本,
我遇到的问题是我要遍历ls命令返回的第4、5、6和7个文件,然后检查这些文件是否具有写或读权限,如果有,则进行简单复制这些文件到另一个目录。到目前为止,我所做的就是检查它们是否具有所需的权限,然后将它们复制到/tmp
目录中。我的解决方案:
#!/bin/sh
for f in *
do
if [ -w "$f" ] || [ -r "$f" ]; then
cp $f /tmp
fi
done
获得第4至第7个文件名的方法是通过ls | head -7 | tail -4
,但是如何仅通过这些文件名专门进行迭代?基本上,我该如何做,以便*
for循环中的列表可以是这4个文件名?
非常感谢你。
不要尝试解析的输出ls
。请参阅为什么不应该解析ls的输出
使用globbing,将文件名存储到数组中并遍历索引从3到6(包括两者)。请注意,数组索引从中的零开始bash
。例如,
#!/bin/bash
files=(*)
for ((i = 3; i <= 6; ++i)); do
if [[ -r ${files[i]} || -w ${files[i]} ]]; then
cp "${files[i]}" /tmp
fi
done
或使用数组切片:
files=(*)
for file in "${files[@]:3:4}"; do
if [[ -r $file || -w $file ]]; then
cp "$file" /tmp
fi
done
或者,如注释中所述,可以实现一个计数器以跳过前三个文件并在第7次迭代后中断循环:
itr=0 # iteration count
for file in *; do
((++itr < 4)) && continue
((itr > 7)) && break
[[ -r $file || -w $file ]] && cp "$file" /tmp
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句