쉘 스크립트에 문제가 있습니다. 인덱스, 날짜, 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, ...를 명령줄 인수로 사용해 보십시오(읽기 대신).
다음 명령을 사용하여 스크립트를 호출하십시오.
./script.sh 121212 "Jan 14" 00 12
답변2
어떤 이유로든 필요하거나 원하는 경우 다음과 같이 read
말할 수 있습니다.
read -r user mm dd time1 time2
date="$mm $dd"
일반적으로 사용하는 것이 좋습니다 -r
.생각하다하나는 필요하지 않습니다.
읽기 위한 -r 옵션은 백슬래시 해석을 방지합니다(일반적으로 여러 줄을 계속하기 위해 백슬래시-개행 쌍으로 사용됨). 이 옵션이 없으면 입력의 모든 백슬래시가 삭제됩니다. 읽기에는 거의 항상 -r 옵션을 사용해야 합니다.
http://mywiki.wooledge.org/BashFAQ/001
또는 입력을 제어할 수 있는 경우 다음과 같이 말할 수 있습니다.
121212 "Jan\ 14" 00 12
그럼 당신은 할아니요사용 -r
!