식별자를 선언해야 합니다. [닫기]

식별자를 선언해야 합니다. [닫기]

내 조각:

   filename='somefile_Connectivity_12345.CSV'
   trimfilename= echo $filename| cut -d'_' -f 2
   if '$trimfilename'='Connectivity'
   then 
   echo "loop1"
   elif '$trimfilename'='Red'
   then 
echo " loop2"
elif ' $trimfilename'='Blue'
then
echo "loop3'
end if;

"식별자를 선언해야 합니다. elif 부분이 없으면 제대로 작동합니다."라는 오류가 발생합니다.

답변1

이 시도:

#!/bin/bash
filename='somefile_Connectivity_12345.CSV'
trimfilename=$(echo $filename| cut -d'_' -f 2)
if [ $trimfilename = "Connectivity" ]
then 
  echo "loop1"
elif [ $trimfilename = "Red" ]
then 
  echo " loop2"
elif [ $trimfilename = "Blue" ]
then
  echo "loop3"
fi

답변2

기본적으로 다음을 수행할 때 '$trimfilename'을 'Connectivity'로 설정하려고 합니다.

if '$trimfilename'='Connectivity'...

if- 지휘 위치에 있을 때 - 예아니요echo및 와 exit동일한 의미를 갖는 명령입니다 [. 이것은예약어;- 와 동일한 방식으로 쉘의 파서에 의해 처리되며 <newline>, - 실제로도 ! dammit동일한 방식으로 처리됩니다.=

ifif적어도 하나의 블록으로 구성된 블록의 시작을 나타냅니다.복합 명령, 1 또는간단한 명령. 아마도 내가 설명할 수 있는 가장 유용한 방법은 다음과 같습니다.

#one compound command
{ simple command; simple command; simple command; } 

if { : this compound command returns 0 ; }
then { : do this compound command ; }
else { : do this compound command ; }
fi

각각 사이의 중괄호예약어 if, then; else그리고암묵적으로if블록 에 있으며 불필요합니다. 그러나 이 모든 것은 쉘의 파서에 의해 처리됩니다.

파싱이 발생합니다앞으로변수 확장/할당을 수행할 때:

if var=val
then :
else :
fi

...테스트 중입니다.~의도착하다변하기 쉬운0(이 경우 반환되는 값)을 반환하고 거기서부터 계속합니다.하지만...이렇게 하면...

if 'in\valid var name'=val
then :
else :
fi

...그 다음에운이 좋다면오류 메시지가 표시되고 else 블록이 완료됩니다. 하지만 전체 블록의 실행이 갑자기 중단될 가능성이 가장 높습니다.파싱할 수 없습니다..

앞서 말했듯 =이 할당 연산자는 쉘 파서의 함수이므로 완료하려면 최소한 두 번의 평가가 필요합니다.

var=val; eval $var=val2

쉘은 =구문 분석 시(확장 전) 할당 기능을 기록하며 확장에 대한 할당을 처리할 수 없습니다.아직 이런 일이 일어나지 않았기 때문입니다.

원하는 것은 테스트 명령의 반환 값입니다. 분명히 변수 확장을 평가하는 명령입니다. 이것은 test...

if test "$var" = "val"
then echo yay
else echo nay
fi

또는...

if [ "$var" = "val" ]
then echo yay
else echo nay
fi

"quote"test명령이 너무 많은 위치에서 너무 많은 매개변수만 처리할 수 있기 때문에 이는 테스트된 확장에 중요합니다 .뒤쪽에쉘 구문 분석 및 쉘 확장이 곧 제공됩니다.분사.

관련 정보