我遇到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"
答案 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。