Shell中的字符串匹配

时间:2015-11-24 18:35:09

标签: shell

我已经提交了一个名为file.yaml的文件,其中包含以下内容:

SystemType=Secondary-HA
Hostname America

我有一个shell脚本filter.sh:

echo "Enter systemType:"
read systemType
SYSTYPE=`grep systemType /home/oracle/file.yaml | awk '{print $2}'`
if [ SYSTYPE=Secondary-HA ]
then
    cat /home/oracle/file.yaml > /home/oracle/file2.txt
fi
hstname=`grep Hostname /home/oracle/file2.txt | awk '{print $2}'`
echo $hstname

这里我想只给出systemType' Secondary-HA'那么只有我应该得到美国的结果。但截至目前,如果我提供systemType' Secondary',我会给出与美国相同的结果。这是我不想要的。 请告诉我们。我在shell脚本方面有点新鲜。

1 个答案:

答案 0 :(得分:1)

您需要了解shell在某些位置是白色空间敏感的,例如在拆分参数时。因此,

if [ x=y ]

必须写成

if [ x = y ]

另外,我已经取代了反模式

grep xyz file | awk '{print $2}'

用更便宜的无管道

awk '/xyz/ {print $2}' file

接下来,默认情况下,awk在空白处拆分,而不是=。您需要说awk -F=分割为=。我还将systemType大写为SystemType,因为你告诉我们的是你的yaml文件。如果你想参加编程,你需要小心。

结果如下:

echo "Enter systemType:"
read systemType
SYSTYPE=$(awk -F= '/SystemType/ {print $2}' /home/oracle/file.yaml)
if [ "$SYSTYPE" = "$systemType" ]; then
    cp /home/oracle/file.yaml /home/oracle/file2.txt
fi
hstname=$(awk '/Hostname/ {print $2}' /home/oracle/file2.txt)
echo $hstname