내 조각:
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
동일한 방식으로 처리됩니다.=
if
if
적어도 하나의 블록으로 구성된 블록의 시작을 나타냅니다.복합 명령, 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
명령이 너무 많은 위치에서 너무 많은 매개변수만 처리할 수 있기 때문에 이는 테스트된 확장에 중요합니다 .뒤쪽에쉘 구문 분석 및 쉘 확장이 곧 제공됩니다.분사.