shell脚本中的双字参数 - unix

时间:2015-01-14 14:42:57

标签: bash shell unix arguments

我遇到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 $7 }'`

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 $3 }'`
            echo $ip >> address.txt
    else
            continue
    fi
  done

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

1 个答案:

答案 0 :(得分:1)

来自read的人员条目,

The characters in IFS are used to split the line into words.

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

121212 Jan\ 14 00 12

应该适合您的目的。

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

#!/bin/bash

user="$1"
date="$2"
time1="$3"
time2="$4"
#etc

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