繁体   English   中英

继续/跳出循环,继续执行

[英]Continue / break out of a loop, continue execution

我对bash非常陌生,因此完全欢迎任何提示/改进/代码扑倒。 我非常想提高自己的技能。

一旦选择了该选项,我遇到的问题是,无论选择块下面的任何代码都不会执行。 我尝试了一些替代方法,但显然我缺少了一些东西。

#!/bin/bash
PROJECT="$1"
USER=sgosselin
LOCAL_DIR=/mnt/
REMOTE_PROJECTS_PATH=/var/test_www
REMOTE_HOST="test-sandbox-01.dev1.in.example.com"
WEB_USER=www-data

declare -A projects
projects=([proj1]=proj1_dir [proj2]=proj2_dir [quit]=quit)
PROJECT_LIST="proj1 proj2 quit"

# Make sure only root can run our script
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run with sudo." 1>&2
   exit 1
fi

 # Should not have anything to change below
echo "/nSelect project you wish to rsync\n\n"

select PROJECT in $PROJECT_LIST
do
  if [ "$PROJECT" = "quit" ]; then
    echo
    echo  "Quitting $0"
    echo 
    exit
  fi
  for k in "${!projects[@]}"
  do 
    if [ "$k" = "$PROJECT" ]
    then
      PROJECTDIR=${projects[$k]}
      continue
    fi
  done
  echo "Rsynching $PROJECT from $REMOTE_HOST into" $LOCAL_DIR$PROJECTDIR
  rsync -azrP $USER@$REMOTE_HOST:$REMOTE_PROJECTS_PATH/$PROJECT/files/ $LOCAL_DIR$PROJECTDIR

  # Switch to files dir, chown to web user
  cd $LOCAL_DIR
  chown -R $WEB_USER:$WEB_USER . $PROJECTDIR
  break
done
# This never gets executed!
echo "Rsync done."
exit

我运行select有点不同。 也许不是“正确”的方法,但对我有用。

select foo in higher lower
do
  break
done
if [ $foo = higher ]
then
  (( lb = k ))
else
  (( ub = k ))
fi

资源

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM