我在bash脚本中有一个if / else语句,询问是否要从快照ID创建EBS卷。
我想创建一个类似if [ "$from_snapshot" -eq "Y|y" ]
的行,但我认为这不会起作用。
这就是我所拥有的:
if [ "$from_snapshot" -eq "Y" ]
then
echo "Enter Snapshot ID: "
read -r snapshot_id
elif "$from_snapshot" -eq "y"
echo "Enter Snapshot ID: "
read -r snapshot_id
else
echo "No Snapshot Required"
fi
如果有什么办法我可以更简洁地说明这一点?
答案 0 :(得分:5)
test
(aka [
)中的-eq
运算符用于算术比较。那肯定不是你想要的;您正在尝试进行字符串比较,即=
运算符。 (Bash允许您将其键入==
,但=
符合标准要求。)
使用bash,你最好使用[[
conditional command,它允许" glob"样式模式比较(如果需要,还可以使用正则表达式)。所以你可以使用
if [[ "$from_snapshot" = [Yy] ]]; then
注意:不在[Yy]
附近加上引号。引用它将使其成为文字字符串而不是模式。
答案 1 :(得分:2)
在更一般的情况下,您可以使用执行逻辑OR的-o
选项:
if [ \( "$from_snapshot" = "Y" \) -o \( "$from_snapshot" = "y" \) ]
then
echo "Enter Snapshot ID: "
read -r snapshot_id
else
echo "No Snapshot Required"
fi
或者您可以在它们之间使用||
进行多次测试:
if [ "$from_snapshot" = "Y" ] || [ "$from_snapshot" = "y" ]
then
echo "Enter Snapshot ID: "
read -r snapshot_id
else
echo "No Snapshot Required"
fi