최근 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
이것은 우분투 솔루션에 물어보세요.