2015-02-24 37 views
0

腳本新手的位,我的腳本中有一個錯誤,需要新鮮的眼睛。結尾嵌套的ifs和表述

我正在編寫一個腳本,它將下載多個目錄中的一個,並提取其中的內容。必要的,因爲該腳本將運行,每30分鐘

  • 運行WinRAR和 - 劇本由

    • 創建一個數組,並使用SQLite數據庫,以確保只有下載發生一次使用這個數組
    • 變量做到這一點ffmpeg的解壓縮文件

    下面的腳本作品(運行),但不會做我想做的 - 這裏的腳本

    #!/bin/sh 
    set -x 
    cd /cygdrive/q/private/deluge/zeroday/ 
    Progs=(*) 
    for show in "${Progs[@]%*/}"; do 
        cd ~/scripts/sqlite/ 
        exists=$(sqlite3 dir.db "select count(*) from zero where episode=\"${show}\"") 
        if ((exists > 0)); then 
        echo "Show already downloaded" 
        else 
         ~/scripts/synctorrents1.sh 
        cd /cygdrive/h/Rippers/Zeroday/ 
        dire=(*) 
        for rip in "${dire[@]%*/}"; do 
         cd /cygdrive/h/Rippers/Zeroday/${rip}/ 
         "/cygdrive/c/Program Files/WinRAR/unrar" x *.rar 
         "/cygdrive/c/Program Files/get_iplayer/FFmpeg/ffmpeg-2.2.3-win32-static/bin/ffmpeg.exe" -i "${rip}.mkv"$ 
         mv ${rip}.mp4 /cygdrive/h/Rippers/MB3_Watch/ 
         rm -f ${rip}.mkv 
         rm -rf /cygdrive/h/Rippers/Zeroday/${rip}/ 
         done 
        fi 
    done 
    exit 0 
    

    該腳本調用另一個腳本,該腳本使用LFTP進行下載。我的問題是,當我要求腳本下載一個目錄時,它會下載所有目錄。下面是一個腳本 -

    #!/bin/sh 
    login="xxxx" 
    pass="xxxx" 
    host="xxxx" 
    remote_dir="/media/sdi1/home/macburp/private/deluge/zeroday/" 
    local_dir="/cygdrive/h/Rippers/Zeroday" 
    
    cd /cygdrive/q/private/deluge/zeroday/ 
    Progs=(*) 
    trap "rm -f /tmp/synctorrent.lock" SIGINT SIGTERM 
    if [ -e /tmp/synctorrent.lock ] 
    then 
    echo "Synctorrent is running already." 
    exit 1 
    else 
    touch /tmp/synctorrent.lock 
    for show in "${Progs[@]%*/}"; do 
    lftp -p 22 -u $login,$pass sftp://$host << EOF 
    set mirror:use-pget-n 7 
    mirror -c -P1 --log=synctorrents.log $remote_dir/${show}/ local_dir/${show}/ 
    quit 
    EOF 
    done 
    rm -f /tmp/synctorrent.lock 
    trap - SIGINT SIGTERM 
    exit 0 
    fi 
    

    這個腳本(從其他地方獲得)被挑剔 - 它不想工作的時候劇本進行適當的縮進,不喜歡被編輯。

    我看到,我現在需要兩個腳本結合起來,所以我已經試過這 -

    #!/bin/sh 
    set -x 
    login="xxxx" 
    pass="xxxxxx" 
    host="xxxxxxxxxx" 
    remote_dir="/media/sdi1/home/macburp/private/deluge/zeroday/" 
    local_dir="/cygdrive/h/Rippers/Zeroday" 
    
    cd /cygdrive/q/private/deluge/zeroday/ 
    Progs=(*) 
    for show in "${Progs[@]%*/}"; do 
    cd ~/scripts/sqlite/ 
    exists=$(sqlite3 dir.db "select count(*) from zero where episode=\"${show}\"") 
    if ((exists > 0)); then 
    echo "Show already downloaded" 
    else 
    trap "rm -f /tmp/synctorrent.lock" SIGINT SIGTERM 
    if [ -e /tmp/synctorrent.lock ] 
    then 
    echo "Synctorrent is running already." 
    exit 1 
    else 
    touch /tmp/synctorrent.lock 
    lftp -p 22 -u $login,$pass sftp://$host << EOF 
    set mirror:use-pget-n 7 
    mirror -c -P1 --log=synctorrents.log $remote_dir/${show}/ $local_dir/${show}/ 
    quit 
    EOF 
    cd /cygdrive/h/Rippers/Zeroday/ 
    dire=(*) 
    for rip in "${dire[@]%*/}"; do 
    cd /cygdrive/h/Rippers/Zeroday/${rip}/ 
    "/cygdrive/c/Program Files/WinRAR/unrar" x *.rar 
    "/cygdrive/c/Program Files/get_iplayer/FFmpeg/ffmpeg-2.2.3-win32-static/bin/ffmpeg.exe" -i "${rip}.mkv" -c:v $ 
    mv ${rip}.mp4 /cygdrive/h/Rippers/MB3_Watch/ 
    rm -f ${rip}.mkv 
    rm -rf /cygdrive/h/Rippers/Zeroday/${rip}/ 
    done 
    exit 0 
    fi 
    

    這失敗,出現以下錯誤 -

    /home/Paul/scripts/sqlite/syncsqlremoterip5.sh: line 44: syntax error: unexpected end of file 
    

    任何想法哦如何把這個權利或如何改進劇本將受到歡迎。

  • +0

    您最上面的'for'和'if'沒有關閉。 – keltar 2015-02-24 12:31:43

    +0

    如果這是在bash下運行,那麼一定要用'#!/ bin/bash'(或者你的bash解釋器放在哪裏)來啓動文件。另外,請檢查你的'here'文件。結束'<< EOF'的行將一個由EOF終止的命令文件傳遞給'lftp'命令。確保您的FTP路徑正確擴展。 – 2015-02-24 12:32:33

    +0

    Keltar,我看不到現在看 - 你能建議我應該把代碼解決的地方嗎?謝謝。 – Macburp 2015-02-24 12:58:20

    回答

    0
    #!/bin/sh 
    set -x; 
    login="xxxx"; 
    pass="xxxxxx"; 
    host="xxxxxxxxxx"; 
    remote_dir="/media/sdi1/home/macburp/private/deluge/zeroday/"; 
    local_dir="/cygdrive/h/Rippers/Zeroday"; 
    
    cd /cygdrive/q/private/deluge/zeroday/; 
    Progs=(*); 
    for show in "${Progs[@]%*/}"; do 
        cd ~/scripts/sqlite/; 
        exists=$(sqlite3 dir.db "select count(*) from zero where ;episode=\"${show}\"") 
    if ((exists > 0)); then 
        echo "Show already downloaded"; 
    else 
        trap "rm -f /tmp/synctorrent.lock" SIGINT SIGTERM; 
    **fi** 
    if [ -e /tmp/synctorrent.lock ]; then 
        echo "Synctorrent is running already."; 
        exit 1; 
    else 
        touch /tmp/synctorrent.lock; 
        lftp -p 22 -u $login,$pass sftp://$host << EOF; 
        set mirror:use-pget-n 7; 
        mirror -c -P1 --log=synctorrents.log $remote_dir/${show}/$local_dir/${show}/; 
        quit; 
        EOF; 
    **fi** 
    cd /cygdrive/h/Rippers/Zeroday/; 
    dire=(*); 
    for rip in "${dire[@]%*/}"; do 
    cd /cygdrive/h/Rippers/Zeroday/${rip}/; 
    "/cygdrive/c/Program Files/WinRAR/unrar" x *.rar; 
    "/cygdrive/c/Program Files/get_iplayer/FFmpeg/ffmpeg-2.2.3-win32-static/bin/ffmpeg.exe" -i "${rip}.mkv" -c:v $; 
    mv ${rip}.mp4 /cygdrive/h/Rippers/MB3_Watch/; 
    rm -f ${rip}.mkv; 
    rm -rf /cygdrive/h/Rippers/Zeroday/${rip}/; 
    done 
    

    我假設這是你的代碼應該如何佈局。你需要關閉你的「if」的「fi」。另外,請查看TLDP,當我開始時,它幫助了我很多。

    +0

    紅色,謝謝。我假設你已經爲我的好處標記了'fi',並且星號不應該寫入最終腳本?也感謝鏈接。明天測試腳本並回報 – Macburp 2015-02-25 00:01:43

    +0

    另外,爲什麼幾乎所有(但不是全部)行都以分號結尾? – Macburp 2015-02-25 00:09:48

    +0

    試過這個版本,它沒有工作。得到這個錯誤 - /home/Paul/scripts/sqlite/syncsqlremoterip6.sh:第39行:警告:這裏 - 文件在第24行由文件結尾分隔(通緝'EOF') /home/Paul/scripts/sqlite/syncsqlremoterip6。sh:第40行:語法錯誤:文件意外結束 – Macburp 2015-02-25 12:50:56