首页 > 解决方案 > unix shell 脚本 - jot -r 1 1 4 是什么意思?我可以用 seq 替换 jot 吗?

问题描述

我是 unix 和 shell 脚本的新手。我正在编写一个脚本,将训练和测试图像文件名写入两个列表:

train.list
test.list

COUNT=-1
for folder in $1/*
do
    COUNT=$[$COUNT + 1]
    for imagesFolder in "$folder"/*
    do
        if (( $(jot -r 1 1 $2)  > 1 )); then
            echo "$imagesFolder" $COUNT >> train.list
        else
            echo "$imagesFolder" $COUNT >> test.list
        fi        
    done
done

我得到了错误:

/convert_images_to_list.sh:第 31 行:记事本:找不到命令

./convert_images_to_list.sh:第 31 行:((:> 1:语法错误:预期操作数(错误标记为“> 1”)

我尝试更改jotseq,错误是:

eq: 无效选项 -- 'r'

./convert_images_to_list.sh:第 31 行:((:> 1:语法错误:预期操作数(错误标记为“> 1”)

我还检查了 'seq --help'哪个说seq [OPTION]... FIRST INCREMENT LAST。如果我jot -r 1 1 &2想使用seq而不是jot.

非常感谢你。

标签: bashshellubuntuunixubuntu-18.04

解决方案


您可能不需要jotseq; 您只是想生成一个介于 1 和$2. 只要$2不是太大并且您不太担心使用均匀分布,您可以将其替换为

# $RANDOM yields a value between 0 and 32767
# Thus, $RANDOM % $2 yields a value between 0 and $2 - 1
if (( $RANDOM % $2 > 0 )); then
    ...

推荐阅读