2012-11-23 2 views
0

다음과 같이 -gt 또는 == 오류가 계속 발생하는 것으로 보입니다. 누군가 도울 수 있습니까?쉘 프로그래밍에서 변수에 대한 패턴 일치

flag= echo $flightSeatBooked | awk -F[,] '{print match($flightSeatBooked, $orderSeats)}' 
if $flag == 0; then 
     echo "Success"; 
else 
     echo "fail"; 

을 감안할 때 :

flightSeatBooked= 9;,A1,A2,A3,A4,B2,E4,C3,B3,D3,D2,E1,E2,C2,B4,C4,D4,C1,D1,E3,B1 
orderSeats= B2 (not found in the variable) 

예상 출력 : 성공

+0

orderSeats = B2 인 경우 $ flightSeatBooked에 있습니다. 맞습니까? – louxiu

+0

구문 오류가없는 스크립트의 유일한 행은'else'라고 말합니다. 그래서 쉘 스크립팅에 익숙하지 않으므로 셸과 awk를 섞어서 사용하는 방법을 생각해보십시오. 그 길은 최고가 아닐 수도 있습니다. 당신이하려는 것을 우리에게 말하면 우리는 제안을 할 수 있습니다. –

답변

1

꽤 많은 실수. 이런 식으로 변경 :

flag=$(echo $flightSeatBooked | awk -v flseat=$flightSeatBooked -v orseat=$orderSeats '{print match(flseat, orseat)}') 

if [ $flag -eq 0 ]; then 
     echo "Success"; 
else 
     echo "fail"; 
fi 
  1. 명령 대체는 $ (...) 표기법을 사용하여 수행되었습니다.
  2. awk에서 쉘 변수를 직접 사용하는 것은 좋지 않으므로 -v를 사용하여 쉘 변수를 awk에 전달해야합니다.
  3. 구문을 잘못 사용한 경우이를 수정하기 위해 업데이트되었습니다.
+0

변수 중 하나에 공백이나 globbing 문자 또는 RE 메타 문자가 있으면이 작업이 실패합니다. 항상 변수를 인용하고, awk 스크립트에서 match() 대신 index()를 사용하고 에코와 파이프를 제거한 다음 index() 호출을 BEGIN 섹션으로 이동하여 exit로 시작하십시오. 기본적으로 전체 내용을 다시 작성해야합니다. –

0

$ orderSeats가 $ flightSeatBooked에 있는지 여부를 아래에서 확인할 수도 있습니다. 그것이 있으면 일치하는 문자열의 길이를 반환하거나 0을 반환합니다.

flag=$(awk -v flseat="$flightSeatBooked" -v orseat="$orderSeats" 'BEGIN{print index(flseat, orseat)}') 

if [ $flag -eq 0 ]; then 
     echo "Success" 
else 
     echo "fail" 
fi 

하지만 난 당신이 요구하는 것은 좋은 아이디어라고 생각하지 않습니다

expr "$flightSeatBooked" : ".*,${orderSeats}," 
1

이것은 당신이 무엇을 물어 수행하는 방법이다. 그것은 적어도 같은 것을해야한다 :

awk -v flseat="$flightSeatBooked" -v orseat="$orderSeats" 'BEGIN{exit index(flseat, orseat)}') 

if [ $? -eq 0 ]; then 
     echo "Success" 
else 
     echo "fail" 
fi 

당신은 아마 정말 필요한 것은이 같은 것입니다 :

case "$flightSeatBooked" in 
    *"$orderSeats"*) echo "fail";; 
    *) echo "Success" ;; 
esac 

체크 로직 (! 내가하지 않은 것처럼), 그러나 희망 당신은 얻을 접근.