Кто-нибудь может помочь с этим кодом?

-4

Поэтому, в основном, я хочу, чтобы этот скрипт делал, например, каждые 300 секунд делать копию файла, но поочередно делать файл «savegame.backup1», а затем в следующие 300 секунд передать «savegame.backup2» и затем вернуться для резервного копирования1.

Кажется, мой таймер не повторяется, и я не уверен, как вообще завершить этот сценарий.

Для контекста, большая часть кода, который я использовал, была из Google, часть была сделана с помощью личных знаний Я не могу найти то, что мне не хватает.

Спасибо

#!/bin/bash
GameType="Sandbox"  #Sandbox, Survival, etc.
SaveName="07-01-2017_04-52-11"  #Make sure you copy the folder name.
Timeout=$((5))  #Timeout in seconds. The default of 300 (5 minutes) is likely adequate.

#No need to change anything below.
GameName="Project Zomboid"
SERVICE=ProjectZomboid64 #Change this to ProjectZomboid32 if you're using 32bit java!
steam steam://rungameid/108600
# Checks to see if folder exists - if not, one will be made.
mkdir -p "$HOME/Zomboid/Saves/Backups/$SaveName"

#Loop start
while [ $Timeout -gt 0 ]; do
    clear && echo -ne "Creating a backup in" $Timeout "seconds."
    sleep 1
    : $((Timeout--))
    done
    clear
    if ps ax | grep -v grep | grep $SERVICE > /dev/null
        then
            cp "$HOME/Zomboid/Saves/$GameType/$SaveName/map_p.bin" "$HOME/Zomboid/Saves/Backups/$SaveName/map_p.bin.backup1"
            #Need to alternate between the two each time it loops. Backup1 the first time, Backup2 the second, Backup1 the third...
            #cp "$HOME/Zomboid/Saves/$GameType/$SaveName/map_p.bin" "$HOME/Zomboid/Saves/Backups/$SaveName/map_p.bin.backup2"
            echo "$GameName is running. Backup made." #ERROR CHECKING
        else
            #Loop should end here, and prevent any further repeating of the loop.
            read -r -p "$GameName is not detected as running, and no further backups will be made."
        fi
    echo "Outside of loop." #ERROR CHECKING
    sleep 5s
Interknet
источник
Итак, что вы пытались до сих пор исправить проблему (и), и каковы были результаты? Первое предложение: вы должны перепроверить синтаксис того, как строится цикл While в Bash.
Ƭᴇcʜιᴇ007
@ TECHIE007 Я попытался добавить еще один цикл снаружи цикла, а затем еще один цикл внутри цикла. Таким образом, loop1 = бесконечный, loop2 внутри loop1, а затем loop3 внутри loop2. Данный ответ сработал. Вот что у меня сейчас: pastebin.com/yk8k8Yxh но теперь все, что мне нужно, это заставить $ i добавлять +1 каждый раз, когда он проходит, пока он не достигнет $ BackupCount и не сбросится до 1.
Interknet
Ох, и результаты были смешанными. То, что я нашел, чтобы добавить в код, просто не сработало, когда я их реализовал. Я учусь, хотя: D
Interknet

Ответы:

-1
i=1
while :;do
if [ $(pgrep $SERVICE) ];then
    cp "$HOME/Zomboid/Saves/$GameType/$SaveName/map_p.bin" "$HOME/Zomboid/Saves/Backups/$SaveName/map_p.bin.backup$i"
    [ $i = 1 ] && i=2 || i=1
fi
sleep 300
done
Ipor Sircer
источник
Работал нормально. Теперь мне просто нужно найти способ заставить скрипт ждать, когда он запускает часть «else», чтобы он мог снова проходить через цикл без необходимости нажимать клавишу ввода.
Interknet