使用 bash 的随机脚本

使用 bash 的随机脚本

我正在尝试编写一个随机脚本 bash,但遇到了一些问题。在目录“quotations”中有一些我想随机访问的文件,但每次尝试时都会出现以下错误:

cat: '/home/thomas/Store/quotations/.': Is a directory

脚本如下:

#!/bin/bash
targetDir="/home/thomas/Store/quotations/"
files=( "$targetDir"/.* )
index="$RANDOM"
while [ "$index" -ge ${#files[@]} ]; do
    index=${RANDOM:4:4}
done
cat "${files[$index]}"

我将非常感激您的帮助。

谢谢 !

答案1

您的通配符匹配的每个目录中都有两个特殊目录:...。您确定不想要吗"$targetDir"/*?无论如何,您都需要过滤掉目录。

您可以使用

[[ -d $filename ]]

测试文件名是否是目录。

另外,将 $RANDOM 转换为区间 0 - $n 内的数字的通常方法是使用

index=$(( RANDOM % (n + 1) ))

其中 % 是模数运算符。

换句话说:

#!/bin/bash
targetDir=/home/thomas/Store/quotations
files=( "$targetDir"/* )
index=$(( RANDOM % ${#files[@]} ))
until [[ -f ${files[index]} ]] ; do 
    index=$(( RANDOM % ${#files[@]} ))
done
cat "${files[index]}"

相关内容