shell脚本中的两个词参数

shell脚本中的两个词参数

我的 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

相关内容