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