在shell脚本中输入Y表示“是”,N表示“否”

时间:2012-10-22 11:56:38

标签: shell

我在ksh中有一个Shell脚本,在输入输入后,脚本要求输入Y表示是,N表示否,以便检查输入并继续。以下是该脚本的一部分:

echo ""

YN=""
while [ "x$YN" != "xn" -a "x$YN" != "xN" -a "x$YN" != "xy" -a "x$YN" != "xY" ]; do
   echo -n "Please confirm (y/n): "
   read YN
done

if [ "x$YN" = "xn" -o "x$YN" = "xN" ]; then
   exit 0
fi

我无法理解

while [ "x$YN" != "xn" -a "x$YN" != "xN" -a "x$YN" != "xy" -a "x$YN" != "xY" ];

在这方面可以和我一起帮助我。

1 个答案:

答案 0 :(得分:1)

实际上这应该写成:

while [ "$YN" != "n" -a "$YN" != "N" -a "$YN" != "y" -a "$YN" != "Y" ];

但是如果变量$YN为空,那么如果使用一些shell,则会导致错误。因此,进行比较的安全方法是在比较的两边在双引号内附加一个虚拟字符(以便它们相互抵消),如:

while [ "x$YN" != "xn" -a "x$YN" != "xN" -a "x$YN" != "xy" -a "x$YN" != "xY" ];

即使$YN为空,也不会中断。