结束嵌套的ifs和or语句

时间:2015-02-24 12:09:46

标签: bash sqlite lftp

脚本新手,我的剧本中有一个错误,需要新鲜的眼睛。

我正在编写一个脚本,它只会下载多个目录并在其中提取内容。该脚本通过

执行此操作
  • 创建数组并使用该数组中的变量
  • 使用sqlite数据库确保只下载一次 - 这个脚本每30分钟运行一次至关重要
  • 运行winrar和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

任何想法哦,如何正确或如何改进脚本将是受欢迎的。

1 个答案:

答案 0 :(得分: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,当我开始时它对我帮助很大。