쉘 스크립트에 문제가 있습니다. 인덱스, 날짜, 시간 1 (간격의 시작), 시간 2 (간격의 끝)와 같은 인수를 읽어야합니다. 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"
에 대한 man 항목 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 을 참조 하십시오 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다