Hello!
Below my first bash script. As you can see i build 2 nested cases. The second one (sync databases) is working fine. Bu the first one (sync datadirs) is not working. It says: rsync: command not found. However when i move the rsync command to the top of the script its working. So i suppose there's something wrong in my script. Can somebody tell me what's wrong?
Regards,
Bas
--- Script ---
#!/bin/bash
LOCAL_PATH=""
LOCAL_DB=""
LOCAL_DB_USER=""
LOCAL_DB_PASSWORD=""
STAGING_SSH_USER=""
STAGING_SSH_HOST=""
STAGING_PATH=""
STAGING_DB=""
STAGING_DB_USER=""
STAGING_DB_PASSWORD=""
LIVE_SSH_USER=""
LIVE_SSH_HOST=""
LIVE_PATH=""
LIVE_DB=""
LIVE_DB_USER=""
LIVE_DB_PASSWORD=""
read -p "What to do?
(1) Sync datadirs
(2) Sync database" choice1
case "$choice1" in
1 )
read -p "Sync datadirs:
(1) pull staging -> local
(2) pull live -> local
(3) push local -> staging" choice2
case "$choice2" in
1 )
TYPE=pull-datadirs
ENV="staging"
SSH_USER=$STAGING_SSH_USER
SSH_HOST=$STAGING_SSH_HOST
PATH=$STAGING_PATH
;;
2 )
TYPE=push-datadirs
ENV="live"
SSH_USER=$LIVE_SSH_USER
SSH_HOST=$LIVE_SSH_HOST
PATH=$LIVE_PATH
;;
3 )
TYPE=push-datadirs
ENV="staging"
SSH_USER=$STAGING_SSH_USER
SSH_HOST=$STAGING_SSH_HOST
PATH=$STAGING_PATH
;;
* )
echo "invalid"
exit
;;
esac
;;
2 )
read -p "Sync database:
(1) pull staging -> local
(2) pull live -> local
(3) push local -> staging" choice2
case "$choice2" in
1 )
TYPE=pull-database
ENV="staging"
SSH_USER=$STAGING_SSH_USER
SSH_HOST=$STAGING_SSH_HOST
DB=$STAGING_DB
DB_USER=$STAGING_DB_USER
DB_PASSWORD=$STAGING_DB_PASSWORD
;;
2 )
TYPE=pull-database
ENV="live"
SSH_USER=$LIVE_SSH_USER
SSH_HOST=$LIVE_SSH_HOST
DB=$LIVE_DB
DB_USER=$LIVE_DB_USER
DB_PASSWORD=$LIVE_DB_PASSWORD
;;
3 )
TYPE=push-database
ENV="staging"
SSH_USER=$STAGING_SSH_USER
SSH_HOST=$STAGING_SSH_HOST
DB=$STAGING_DB
DB_USER=$STAGING_DB_USER
DB_PASSWORD=$STAGING_DB_PASSWORD
;;
* )
echo "invalid"
exit
;;
esac
;;
* )
echo "invalid"
exit
;;
esac
# Pull datadirs
if [ $TYPE == 'pull-datadirs' ] ; then
echo "Start syncing fileadmin/user_upload and uploads/ from $ENV to local"
rsync -avzhn --include='fileadmin/' --include='fileadmin/user_upload/***' --include='uploads/***' --exclude='*' --progress --delay-updates --delete --stats $SSH_USER@$SSH_HOST:$PATH $LOCAL_PATH
echo "Completed!"
fi
# Push datadirs
if [ $TYPE == 'push-datadirs' ] ; then
echo "Start syncing fileadmin/user_upload and uploads/ from local to $ENV"
rsync -avzhn --include='fileadmin/' --include='fileadmin/user_upload/***' --include='uploads/***' --exclude='*' --progress --delay-updates --delete --stats $LOCAL_PATH $SSH_USER@$SSH_HOST:$PATH
echo "Completed!"
fi
DB_FILE=$DB$(date +.%d.%m.%y).sql.gz
DB_FILE_LOCAL=$LOCAL_DB$(date +.%d.%m.%y).sql.gz
# Pull database
if [ $TYPE == 'pull-database' ] ; then
echo "Make dump from $ENV"
ssh $SSH_USER@$SSH_HOST "mysqldump --user=$DB_USER --password=$DB_PASSWORD $DB" | gzip > ./$DB_FILE
echo "Import to local"
gzip -dc < ./$DB_FILE | mysql --user=$LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB
echo "Completed!"
fi
# Push database
if [ $TYPE == 'push-database' ] ; then
echo "Make dump from local"
mysqldump --user=$LOCAL_DB_USER --password=$LOCAL_DB_PASSWORD $LOCAL_DB > $DB_FILE_LOCAL
echo "Import to $ENV"
ssh $SSH_USER@$SSH_HOST "mysql --user=$DB_USER --password=$DB_PASSWORD $DB" < ./$DB_FILE_LOCAL
echo "Completed!"
fi