次のスクリプトがあります。
#!/bin/bash
# This shell script is to tabulate and search for SR
n=0 # Initial value for Sl.No
next_n=$[$n+1]
read -p "Enter your SR number : " SR
echo -e "$next_n\t$SR\t$(date)" >> /tmp/cases.txt
初めてスクリプトを実行すると、次のように入力されます SR = 123
。
1 123 <date>
スクリプトを再実行して、次のようなSR = 456
結果を得たいと思います。
1 123 <date>
2 456 <date>
しかし、私のスクリプトは再初期化中なので、常に列1を印刷1,1,1,1
しますn
。新しいSR値に対してスクリプトが実行されるたびに、列1を自動的に1倍増やす方法はありますか?
答え1
次のように、ファイルの最後の行の最初の列の値を読み取ることができます。
#!/bin/bash
# This shell script is to tabulate and search for SR
next_n=$(($(tail -n1 /tmp/cases.txt 2>/dev/null | cut -f1) + 1))
read -p "Enter your SR number : " SR
echo -e "$next_n\t$SR\t$(date)" >> /tmp/cases.txt
cut -f1
タブで区切られた一連の文字である行の最初のフィールドを選択します。
これは、ファイルが空であるか存在しない場合でも機能します。next_n
この場合は1に設定します。
答え2
[ -s "/tmp/cases.txt" ] || : > /tmp/cases.txt
next_n=$(expr "$(wc -l < /tmp/cases.txt)" \+ 1)
read -p "Enter your SR number: " SR
printf '%d\t%d\t%s\n' "$next_N" "$SR" "$(date)" >> /tmp/cases.txt