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이해하지 못합니다 [[ ]].

그 공간을 삭제하면 모든 것이 잘 될 것입니다.

답변2

다음은 나에게 효과적입니다. "단지 Enter"를 클릭하거나 공백 수 또는 여러 탭을 클릭하면 true를 반환합니다. 영숫자 등은 모두 false를 반환합니다.

if [ -z $VAR ]
then
 ..... do your backup stuff here
else
  "ok, not backing up"
fi

FWIW 프롬프트를 더 명확하게 변경하겠습니다. "백업을 실행하려면 Enter 키를 누르세요. 종료하려면 아무 문자나 입력하세요."

관련 정보