我的 shell 脚本有问题。它应该读取参数:索引、日期、time1(间隔的开始)、time2(间隔的结束)。它应该计算用户(索引)在时间间隔 time1-time2 内登录给定日期的次数。
例如:121212“1 月 14 日”00 12
这可行,但我对参数日期有疑问。它不将其视为一个参数。它将它拆分为 Jan 和 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
尝试使用 $1, $2, $3, $4, ... 作为命令行参数(而不是使用 read)
使用以下命令调用您的脚本:
./script.sh 121212 "Jan 14" 00 12
答案2
如果您出于某种原因需要/想要read
您可以说:
read -r user mm dd time1 time2
date="$mm $dd"
使用-r
通常是一个好主意——即使当一个思考一个人不需要它。
读取的 -r 选项可防止反斜杠解释(通常用作反斜杠换行符对,以继续多行)。如果没有此选项,输入中的任何反斜杠都将被丢弃。您几乎应该始终将 -r 选项与 read 一起使用。
http://mywiki.wooledge.org/BashFAQ/001
另外,如果您可以控制输入,您可以说:
121212 "Jan\ 14" 00 12
然后你就做不是使用-r
!