bashシェルスクリプト言語が変更されましたか? [閉鎖]

bashシェルスクリプト言語が変更されましたか? [閉鎖]

数年前、私はrsyncというマルチパートスクリプトを書いていましたが、いつも働きました。 1年間使用せずに多数のdebian apt-getアップデートを行った後、スクリプトの動作が停止しました。

Main2Network1.sh は Main2Network2 を呼び出し、パート 3 と 4 を含みますが、Main2Network1.sh スクリプトの 27 行目には以下が含まれます。

 Main2Network1.sh: [[ not found 

27号線は

if [[ -z $VAR ]];

スクリプトを作成するときは、if thenに[[]]スクリプトが必要で、Enterキーを押すと機能します。https://stackoverflow.com/a/20201920/9383998

おそらく、誰かが私のコードの27行の周りに最近使用されなくなった構文が表示されているかどうかを知らせることができます(スクリプトを実行したときにエラーが発生する場所はここにあります)。みんなありがとう

Main2Network1.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

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

ベストアンサー1

あなたの問題は最初の行にありますMain2Network1.sh

 #!/bin/bash
#renames files changed files on NETWORK to _day_mnth_yr_NETWORK1 then puts maincomp version of file on network.

最初にその迷子になった空間が見えますか?それからあなたは変わりますシェルボーン行を別のコメントに追加すると、カーネルはデフォルトでスクリプトを実行して構成を理解/bin/shしません[[ ]]

そのスペースを削除すると、すべてがうまくいくでしょう。

おすすめ記事