ใครสนใจช่วยด้วยรหัสนี้


-4

ดังนั้นโดยทั่วไปสิ่งที่ฉันต้องการให้สคริปต์นี้ทำคือทำสำเนาไฟล์ทุก ๆ 300 วินาที แต่สลับกันระหว่างการทำไฟล์ "savegame.backup1" จากนั้นในครั้งต่อไป 300 วินาทีผ่าน "savegame.backup2" เพื่อ backup1

ตัวจับเวลาของฉันดูเหมือนจะไม่ทำซ้ำและฉันไม่แน่ใจว่าฉันจะทำสคริปต์นี้ให้สมบูรณ์ได้อย่างไร

สำหรับบริบทรหัสจำนวนมากที่ฉันใช้นั้นมาจาก googling บางส่วนทำโดยความรู้ส่วนบุคคล ฉันไม่สามารถค้นหาสิ่งที่มันหายไป

ขอบคุณ

#!/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

ดังนั้นคุณได้ลองทำอะไรเพื่อแก้ไขปัญหาและผลลัพธ์คืออะไร ข้อเสนอแนะครั้งแรก: คุณควรตรวจสอบไวยากรณ์ใหม่อีกครั้งว่าการสร้างลูป 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

ทำงานได้ดี ตอนนี้ฉันแค่ต้องคิดหาวิธีที่จะทำให้สคริปต์รอเมื่อมันทริกเกอร์ส่วน 'else' เพื่อให้มันสามารถวิ่งผ่านลูปอีกครั้งโดยที่ผู้ใช้ไม่ต้องกด Enter
Interknet
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.