我已经提交了一个名为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脚本方面有点新鲜。
答案 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