deb*_*gon 0 scripting bash shell-script syntax
几年前我写了一个多部分脚本,它调用 rsync 并且它一直有效。经过一年的无用和大量 debian apt-get 更新,现在脚本停止工作。
Main2Network1.sh 调用 Main2Network2 有第 3 部分和第 4 部分,但脚本 Main2Network1.sh 第 27 行具有:
Main2Network1.sh: [[ not found
Run Code Online (Sandbox Code Playgroud)
第 27 行是
if [[ -z $VAR ]];
Run Code Online (Sandbox Code Playgroud)
当我编写脚本时,脚本 [[ ]] 是 if 然后只需按回车键即可工作的必要条件,即/sf/answers/1414134431/
也许有人可以告诉我他们是否在我的第 27 行左右的代码中看到任何最近弃用的语法(这就是我在运行脚本时遇到错误的地方)谢谢大家
主2网络1.sh
#!/bin/bash
#renames files changed files on NETWORK to _day_mnth_yr_NETWORK1 then puts maincomp version of file on network.
#THIS SHOULD BE PUT TO AUTOMATICALLY RUN AFTER TRAVEL2NETWORK SYNC
#info=NAME1 lists just changed Files/Dirs, -b must preceed --suffix,
# this will change existing dup file on travel to date_TRAVEL replacing base file with network version
#SOURCE File Dups replace network and network copy renamed to _NETWORK1
echo "source MAIN dir?"
read SOURCE
SO=$(echo ${SOURCE}/ | tr -d "[='=]")
echo "destination NETWORK dir?"
read DEST
DE=$(echo ${DEST}/ | tr -d "[='=]")
echo "exclude file?"
read EXCLUDE
EX=$(echo ${EXCLUDE} | tr -d "[='=]")
echo "=========================================="
echo "Exclude is $EXCLUDE"
echo "rsync destination is $DE"
echo "rsync Source is $SO"
echo "rsync exclude is $EX"
echo "=========================================="
mkdir "${0%/*}"/`eval date +"%d"_%m_%Y`log/
LOG=$(cd `dirname $0` && pwd)/`eval date +"%d"_%m_%Y`log/
# ~/ issue
rsync -aEv --info=NAME1 -c -n --numeric-ids -z -b --suffix=_%d%m%Y_%H%M_NETWORK1 --exclude-from=${EX} ${SO} ${DE} > $LOG/Main2NetworkStep1LOG.txt
echo 'check output if acceptable continue?'
read VAR
if [[ -z $VAR ]];
then
echo "backing up Main To Network"
echo ==================================================
source /`dirname $0`/Main2Network2.sh
echo 'Main System backed up'
else
echo "Ok"
exit
fi
Run Code Online (Sandbox Code Playgroud)
Main2Network2.sh
#!/bin/bash
DAY=`eval date +"%d"`
MONTH=`eval date +"%m"`
YEAR=`eval date +"%Y"`
echo 'beginning REAL Main to network backup'
echo ================================================================
rsync -aEv --info=NAME1 -c --numeric-ids -z -b --suffix=_${MONTH}_${DAY}_${YEAR}_NETWORK1 --exclude-from=${EX} ${SO} ${DE} > ${LOG}/Main2NetworkRealBackupStep2Log.txt
echo 'all done Main to Network sync'
leafpad ${LOG}/Main2NetworkRealBackupStep2Log.txt
echo 'begin Network to Main backup process?'
echo ========================================
read VAR
if [[ -z $VAR ]];
then
echo "Generating Network to Main Backup Dry Run Report"
source /`dirname $0`/Main2Network3.sh
else
echo "Ok"
exit
fi
Run Code Online (Sandbox Code Playgroud)
你的问题在第一行Main2Network1.sh
:
#!/bin/bash
#renames files changed files on NETWORK to _day_mnth_yr_NETWORK1 then puts maincomp version of file on network.
Run Code Online (Sandbox Code Playgroud)
看到开头的那个杂散空间了吗?这会将您的shebang行变成另一个注释,因此内核默认使用 运行您的脚本/bin/sh
,它不理解[[ ]]
构造。
删除那个空间,一切都应该很好。