在bash中将自动编号签名到我的文件

在bash中将自动编号签名到我的文件,bash,for-loop,scripting,Bash,For Loop,Scripting,我试图为重定向并存储在文件中的字符串分配一个唯一的编号 你必须填写一张表格,我想随表格发送一个唯一的号码。 例如: 它必须看起来像这样 outcome in List number 1, place, time number 2, place, time number 3, place, time 我使用了一个循环,但得到了以下结果 number 0, place, time number 0, place, time. 我想我需要一个函数来检查文件中给出的最后一个数字并向其中添加1,但我想

我试图为重定向并存储在文件中的字符串分配一个唯一的编号

你必须填写一张表格,我想随表格发送一个唯一的号码。 例如:

它必须看起来像这样

outcome in List
number 1, place, time
number 2, place, time
number 3, place, time
我使用了一个循环,但得到了以下结果

number 0, place, time
number 0, place, time.

我想我需要一个函数来检查文件中给出的最后一个数字并向其中添加1,但我想知道是否有更简单的方法。

要生成一个16字符的随机十六进制字符串,可以使用
r=$(openssl rand-hex 8)

要查找最后使用的数字并将其递增,可以执行以下操作

prev=$(awk -F, 'END {print $1}' List)
printf "%d, place:%s, time:%s\n" $((prev+1)) "$place" "$(date)" >> List
如果脚本可以同时执行,则这取决于竞争条件

从1开始:

if [[ ! -f List ]]; then
    prev=1
else
    prev=$(awk -F, 'END {print $1}' List)
fi
printf "%d, place:%s, time:%s\n" $((prev+1)) "$place" "$(date)" >> List
也许这个:

#!/bin/bash

# Optionally truncate file
# : > List

I=0

while
    read -p "Place: " PLACE
    read -p "Time: " TIME
    echo "number $((++I)), $PLACE, $TIME" >> List
    read -n 1 -p "Continue? " && [[ $REPLY == [yY] ]]
do
    continue
done
更新:

#!/bin/bash

# Optionally truncate file
# : > List

shopt -s extglob

for (( I = 1;; ++I )); do
    for (( ;; )); do
        read -p "Place: " PLACE
        read -p "Time: " TIME
        until
            read -p "Save data? "
            [[ $REPLY == [nN]?([oO]) ]]
        do
            [[ $REPLY == [yY]?([eE][sS]) ]] && break 2
            echo "Please answer Y[es] or N[o]."
        done
    done
    echo "Saving \"number $I, $PLACE, $TIME\"."
    echo "number $I, $PLACE, $TIME" >> List
    until
        read -p "Continue? "
        [[ $REPLY == [yY]?([eE][sS]) ]]
    do
        [[ $REPLY == [nN]?([oO]) ]] && break 2
        echo "Please answer Y[es] or N[o]."
    done
    echo
done

我想从1点开始。我有点困惑,我以为printf是csharp.printf是bash内置的:谢谢你,我仍然得到一个错误-F、 :语法错误:应为操作数(错误标记为“,”嗯,那里应该没有错误。准确地显示您正在执行的操作。有什么特别的部分需要解释吗?请确保您使用bash运行:
bash script.sh
我确实使用bash运行了它。我想弄清楚是什么出错了它现在工作了,但数字没有增加。它保持在1。它在这里确实增加了。您确定使用bas运行它吗h、 您没有查看
列表中的旧数据吗?
现在可以运行了,谢谢。我关闭脚本并再次运行它,计数器再次启动。我正试图避免这种情况。
#!/bin/bash

# Optionally truncate file
# : > List

shopt -s extglob

for (( I = 1;; ++I )); do
    for (( ;; )); do
        read -p "Place: " PLACE
        read -p "Time: " TIME
        until
            read -p "Save data? "
            [[ $REPLY == [nN]?([oO]) ]]
        do
            [[ $REPLY == [yY]?([eE][sS]) ]] && break 2
            echo "Please answer Y[es] or N[o]."
        done
    done
    echo "Saving \"number $I, $PLACE, $TIME\"."
    echo "number $I, $PLACE, $TIME" >> List
    until
        read -p "Continue? "
        [[ $REPLY == [yY]?([eE][sS]) ]]
    do
        [[ $REPLY == [nN]?([oO]) ]] && break 2
        echo "Please answer Y[es] or N[o]."
    done
    echo
done