Bash Scripting - 支撑扩展的条件

时间:2014-01-30 16:22:15

标签: bash shell

我最近遇到了bash练习的问题,即创建一个脚本来检查用户输入的日期是否与我的某些日期匹配。

为了进一步细分,我的练习是用支撑扩展来检查模式匹配,但是由于我在下面尝试了这些线并且没有一个工作,所以它非常棘手。我希望你们能帮助我。

echo -e "Enter your birthday: \c"
read birthday

WoodRat={19240205..19250123}


if [[ $birthday =~ $WoodRat ]]; then

echo "Your Chinese Zodiac is: Wood Rat "

else

echo "Sorry, cant find any matches."

fi

2 个答案:

答案 0 :(得分:2)

支撑扩展不是正确的工具:文字字符串而不是值列表被分配给WoodRat,而{19240205..192501123}不是正则表达式来测试值是否在范围。最好使用明确的最小值和最大值:

WoodRat=(19240205 19250123)

if (( birthday >= ${WoodRat[0]} && birthday <= ${WoodRat[1]} )); then
  echo "Your Chinese Zodiac is: Wood Rat "
else
  echo "Sorry, cant find any matches."
fi

答案 1 :(得分:1)

Brace扩展和正则表达式是不同的东西。大括号扩展扩展为多个元素,而正则表达式匹配模式。

您应该使用数字比较:

if [[ $birthday -ge 19240205 && $birthday -le 19250123 ]]

要使用大括号扩展来执行此操作,您需要与每个元素进行比较:

# Very inefficient, never use this:
for num in {19240205..19250123}
do
  if [[ $birthday = $num ]] 
  then ...