Shell编程中变量的匹配模式

时间:2012-11-23 10:44:30

标签: awk printf

似乎我继续使用以下内容获取-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)

预期产量: 成功

3 个答案:

答案 0 :(得分: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中直接使用shell变量并不是一个好习惯,因此使用-v将shell变量传递给awk。
  3. 如果使用的语法不正确,请更新以更正它。

答案 1 :(得分:1)

这就是你要问的方法:

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

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

但我不认为你问的是个好主意。它至少应该是这样的:

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

检查逻辑(因为我没有!),但希望你能得到这个方法。

答案 2 :(得分:0)

您也可以使用以下内容检查$ orderSeats是否在$ flightSeatBooked中。如果它在那里它返回匹配的字符串的长度或返回0。

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