For if子句中的循环。 If子句没有调用

时间:2016-02-17 11:20:06

标签: shell if-statement for-loop

我是Shell的新手,并尝试编写一些简单的脚本。

此处未调用if子句或未调用for循环。我已经分享了o / p

#!/bin/bash

set -x
read -p "enter Date in DD " d
if [$d -gt "00" -a $d -lt "31"]
then
     echo "Choose any one month from given option: Jan,Feb,Mar,Apr,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
     read  m
     for $m  in Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
      do
        case "echo $m" in
        Jan) mnum=01;;
        Feb) mnum=02;;
        Mar) mnum=03;;
        Apr) mnum=04;;
        May) mnum=05;;
        Jun) mnum=06;;
        Jul) mnum=07;;
        Aug) mnum=08;;
        Sep) mnum=09;;
        Oct) mnum=10;;
        Nov) mnum=11;;
        Dec) mnum=12;;
      esac
echo "Month is $mnum"
   done
else  echo "Its an invalid Date"
fi
    echo "Enter Year in YYYY"
     read y
   if echo $y |egrep "^[1|2][0-9][0-9]+$"
   then
    echo "Its Valid year"
    echo "Your date is $d/$m/$y"
   fi
~

输出:

 ./a.sh
+ read -p 'enter Date in DD ' d
enter Date in DD 23
+ '[23' -gt 00 -a 23 -lt '31]'
./a.sh: line 5: [23: command not found
+ echo 'Its an invalid Date'
Its an invalid Date
+ echo 'Enter Year in YYYY'
Enter Year in YYYY
+ read y
2015
+ echo 2015
+ egrep '^[1|2][0-9][0-9]+$'
2015
+ echo 'Its Valid year'
Its Valid year
+ echo 'Your date is 23//2015'
Your date is 23//2015

1 个答案:

答案 0 :(得分:0)

<强> 1。如果声明是使用:

if语句需要更正,whitespace[之间,$d和{{1}之间保持一个"31" }}。 如果声明是

,则正确
]

下面是scriptlet和示例输出。

Scriptlet:

if [ $d -gt "00" -a $d -lt "31" ]

<强>输出:

#!/bin/bash
set -x
read -p "enter Date in DD " d
if [ $d -gt "00" -a $d -lt "31" ]
then
    echo $d
fi

<强> 2。对于循环问题

你的for循环在语法上是不正确的。因为您不能使用值(即$ sh try.sh + read -p 'enter Date in DD ' d enter Date in DD 21 + '[' 21 -gt 00 -a 21 -lt 31 ']' + echo 21 21 ),而是需要使用变量(例如$m) 正确的语法:m