10

我需要根据一天中的时间向用户打招呼(使用“早上好”、“下午好”或“晚上好”)。

我已经获得了用户的详细信息($userTitle $userName)但是我不确定如何根据时间以不同的方式问候某人......有什么想法吗?

4

8 回答 8

20
h=`date +%H`

if [ $h -lt 12 ]; then
  echo Good morning
elif [ $h -lt 18 ]; then
  echo Good afternoon
else
  echo Good evening
fi
于 2013-01-15T20:36:16.697 回答
6

你可以得到这样的时间:

TIME=$(date "+%H")

然后对该值采取行动,即

if [ $TIME -lt 12 ]; then
    echo "Good morning"
elif [ $TIME -lt 18 ]]; then
    echo "Good afternoon"
else
    echo "Good evening"
fi
于 2013-01-15T20:35:54.853 回答
2

尝试这样做:

TIME=$(date "+%k")

if ((TIME < 12 )); then
    echo "Good morning"
elif ((TIME < 18 )); then
    echo "Good afternoon"
else
    echo "Good evening"
fi

笔记

  • 使用这种语法,无需记住-ge之类的。这就像算术
  • ((...))是一个算术命令,如果表达式非零,则返回退出状态 0,如果表达式为零,则返回 1。let如果需要副作用(分配),也用作 的同义词。见http://mywiki.wooledge.org/ArithmeticExpression
于 2013-01-15T20:42:36.043 回答
1
hour=`date +%H`
if [ $hour -le 12 ]; then
    echo 'good morning'
elif [ $hour -ge 18 ]; then
    echo 'good evening'
else
    echo 'good afternoon'
fi
于 2013-01-15T20:37:58.650 回答
1

除一个细节外,所有其他答案都是正确的。命令date +%H以 XX 格式返回小时数(例如,如果时间是 09:00:00,则返回“09”)。在 bash 中以零开头的数字是八进制数。因此,这种细微差别可能会导致错误。

例如:

if [ 09 > 10 ] 
then
    echo "it's something strange here"
fi

将打印“这里有些奇怪”。

可能您选择了不会导致此类行为的时间间隔。但是对于保险,您可以写:

小时=date +"%H" | sed -e 's/^0//g'

小心点。

于 2013-01-15T20:53:05.340 回答
0

如果在具有功能的 powershell 中呢?

function Get-Greeting
    {
    $Hour = (Get-Date).TimeOfDay.Hours
    if($Hour –ge 0 –and $Hour –lt 12)

    {
        $greet = “Good Morning give me a coffee !!”
    }
    elseif($Hour –ge 12 –and $Hour –lt 16)
    {
        $greet = “Good Afternoon How is the weather today?”
    }
    else
    {
        $greet = “Good Evening sir, want to sip a tea?”
    }

    $Username = $env:USERNAME

    return $(“$greet , You have logged in as User, $Username” )
    }
        enter code here
于 2017-08-24T10:55:34.390 回答
-1
echo enter the time 
read time 
if [ $ time - lt 12 ]
then
echo good morning
elif [ $ time - lt 16 ]
then
echo good afternoon
elif [ $ time - lt 20 ]
then
echo good evening
elif [ $ time - lt 25]
then
echo good night
else
echo enter a valid number only 24 hour!!!!!!!
fi
于 2015-08-09T07:05:16.077 回答
-2
h=`date|cut -d" " -f4|cut -d: -f1`
if [ $h -lt 10 ]; then
 echo Good Morning
elif [ $h -gt 10 -o $h -lt 16 ]; then
 echo Good Afternoon
elif [ $h -gt 16 -o $h -lt 20 ]; then
 echo Good Evening
else
 echo Good Night
fi
于 2016-03-15T07:48:49.393 回答