이 코드를 도와주는 사람이 있습니까?


-4

기본적으로이 스크립트에서하고 싶은 것은 예를 들어 300 초마다 파일의 복사본을 만드는 것이지만 "savegame.backup1"파일을 만든 다음 다음에 300 초가 "savegame.backup2"를 전달한 다음 다시 백업 1.

타이머가 반복되지 않는 것 같습니다.이 스크립트를 어떻게 완성 할 수 있을지 잘 모르겠습니다.

맥락 상, 내가 사용한 많은 코드는 인터넷 검색에서 나온 것이며 일부는 개인 지식으로 수행되었습니다. 누락 된 항목을 찾을 수 없습니다.

감사

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

그래서 지금까지 문제를 해결하기 위해 무엇을 시도했으며 결과는 무엇입니까? 첫 번째 제안 : Bash에서 While 루프가 구성되는 방식에 대한 구문을 다시 확인해야합니다.
Ƭᴇcʜιᴇ007

@ TECHIE007 루프 외부에 다른 루프를 추가하고 루프 내에서 다른 루프를 추가하려고했습니다. 따라서 loop1 = 무한, loop1 내부의 loop2, loop2 내부의 loop3. 주어진 대답이 효과가있었습니다. 여기에 내가 가진 무엇 지금 : pastebin.com/yk8k8Yxh 하지만 지금 필요한 모든 그것이 $ 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.