버전이 14.04.3 LTS에서 16.04.2 LTS로 업데이트되었습니다.

버전이 14.04.3 LTS에서 16.04.2 LTS로 업데이트되었습니다.

최근 14.04.3 LTS에서 16.04.2 LTS로 업데이트했습니다. 버전 14의 쉘 스크립트 실행이 최신 버전(예: 16.04.2)에서 실패합니다.
다음은 오류 예입니다.

test: 24: test: function: not found
test: 25: [: Illegal number: !
test.sh: 33: test.sh: Syntax error: "}" unexpected

이 줄에는 스크립트에 다음 정보가 포함되어 있습니다.

24 line : function CheckErrors {
25 line :  if [ ! $1 -eq 0 ]; 
    then
    echo "****************************************"
    echo "STEP FAILED: $2                         "
    echo "Terminating execution and exiting       "
    echo "****************************************"
    exit 1
  fi
33 line : }

두 버전 사이에 변경 사항이 있나요?

답변1

먼저 스크립트 구문을 다음과 같이 변경합니다.

CheckErrors(){
if [ $1 -dt 0 ]; 
    then
    echo "****************************************"
    echo "STEP FAILED: $2                         "
    echo "Terminating execution and exiting       "
    echo "****************************************"
    exit 1
  fi
}

이렇게 하면 업데이트 중에 스크립트에 오류가 발생할 가능성이 줄어듭니다.

  • function키워드는 선택사항입니다(및 "bashism"). 대신 사용하십시오 func(){commandA; commandB }. 이것은 것이다스크립트의 이식성을 높이세요/bin/sh업그레이드() 중에 쉘 변경이 발생하는 경우;
  • 견적은 필요하지 않습니다결과가 0이 아닌 경우( if [ ! $1 -eq 0 ]). 결과가 다른지 평가하면 ( -dt)는 0 ( if [ $1 -dt 0 ])이 됩니다.

bash업그레이드하기 전에 쉘을 기본값으로 사용하고 있었던 것 같습니다 . 함수 이름 끝에 추가 해야 하고 for 키워드로 충분하거나 둘 다이기 /bin/sh때문 입니다. 보세요dash()bash()function이 예bash스크립트:

#!/bin/bash 
function quit {
    exit
}
function hello {
    echo Hello!
}
hello
quit
echo foo 

오류 줄을 test: 24: test: function: not found보면 실제로 사용하고 있는지 궁금해지는데 bash...

내 대답:그것을 가리키는 스크립트에 shebang을 넣고 다음을 #!/bin/bash사용하여 실행하십시오../test.sh이것은 우분투 솔루션에 물어보세요.

관련 정보