腳本新手的位,我的腳本中有一個錯誤,需要新鮮的眼睛。結尾嵌套的ifs和表述
我正在編寫一個腳本,它將下載多個目錄中的一個,並提取其中的內容。必要的,因爲該腳本將運行,每30分鐘
- 創建一個數組,並使用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
任何想法哦如何把這個權利或如何改進劇本將受到歡迎。
您最上面的'for'和'if'沒有關閉。 – keltar 2015-02-24 12:31:43
如果這是在bash下運行,那麼一定要用'#!/ bin/bash'(或者你的bash解釋器放在哪裏)來啓動文件。另外,請檢查你的'here'文件。結束'<< EOF'的行將一個由EOF終止的命令文件傳遞給'lftp'命令。確保您的FTP路徑正確擴展。 – 2015-02-24 12:32:33
Keltar,我看不到現在看 - 你能建議我應該把代碼解決的地方嗎?謝謝。 – Macburp 2015-02-24 12:58:20