shell 脚本中的两个单词参数 - unix

Two-words argument in shell script - unix

我的 shell 脚本有问题。它应该读取参数:index、date、time1(间隔的开始)、time2(间隔的结束)。 它应该计算用户(索引)在时间间隔 time1-time2 中在给定日期登录的次数。 例如:121212 "Jan 14" 00 12

这行得通,但我对参数日期有疑问。它不承认这是一个论点。它在 1 月和 14" 分开,这是一个大问题。 我已经在互联网上搜索了几个小时,但我无法在任何地方找到解决方案。 这是我的代码:

#!/bin/bash

read user date time1 time2

list=`last | grep ^$user.*$date | awk '{ print  }'`

start=$time1
end=$time2

echo "start $start"
echo "end $end"

count=0
for el in $list ;
do
    login=$el
    echo "najava $najava"

    checkIf(){
            current=$login
            [[ ($start = $current || $start < $current) && ($current = $end || $current < $end) ]]
    }

    if checkIf; then
            count=`expr $count + 1`
            ip=`last | grep ^$user.*$date.*$login | awk '{ print  }'`
            echo $ip >> address.txt
    else
            continue
    fi
  done

 echo "The user has logged in $count times in the given time interval"

来自 read

的 man 条目
The characters in IFS are used to split the line into words.

您系统上的默认 IFS 可能是 space。您可以通过转义任何您不想用作单词分隔符的 space 来立即解决您的问题:

121212 Jan\ 14 00 12

应该适合您的目的。

但是,当然,这不是一个理想的解决方案。一种可能性是在命令行上将您的参数传递给脚本,而不是在调用脚本后通过读取,例如

#!/bin/bash

user=""
date=""
time1=""
time2=""
#etc

有关处理命令行参数的更多详细信息,请参阅 http://www.shelldorado.com/goodcoding/cmdargs.html