シェルスクリプトに問題があります。インデックス、日付、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
!