쉘 스크립트의 두 단어 매개변수

쉘 스크립트의 두 단어 매개변수

쉘 스크립트에 문제가 있습니다. 인덱스, 날짜, 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!

관련 정보