grep
ファイルを検索するには、コマンドに2つの変数を使用しました。ユーザーが1つを入力して2番目の変数でEnterキーを押すと、エラーが発生します。
ユーザーが2番目の変数に何も入力しない場合は、2番目の変数にNULL値を設定したいと思います。
#!/bin/bash
find /var/log/nginx/ -type f ( -iname "access.log*" ! -iname "access.log*.gz" ) -exec cat {} + >> output.txt
echo enter the file name read file1
echo "enter varible 1"
read var1
echo "enter varible 2"
read var2
grep -w $var1 output.txt | grep $var2 | cut -d' ' -f1,4,12,25 > $file1
grep -w $var1 output.txt | grep $var2 |sed 's#.*(aff_id=[[:digit:]]\+).*(off_id=[[:digit:]]\+).*(trans_id=[[:alnum:]]\+);.*#\1 \2 \3#' > out2.txt
paste -d' ' $file1 out2.txt > out3.txt
rm -rf output.txt
rm -rf $file1
答え1
あなたが探しているのは、変数に値が割り当てられているかどうかをテストする機能のようです。これは、Bash文字列比較演算子を使用して実行できます。これらの演算子は、次のようないくつかの共通参照に文書化されています。
特に、以下を使用してif [ -n "${string}" ]
空でない文字列をテストできます。このテストを使用するようにスクリプトを調整すると、次のような結果が表示されることがあります。
#!/bin/bash
find /var/log/nginx/ -type f ( -iname "access.log*" ! -iname "access.log*.gz" ) -exec cat {} + >> output.txt
echo enter the file name read file1
echo "enter varible 1"
read var1
echo "enter varible 2"
read var2
if [[ -n "${var2}" ]]; then var2=""; fi
grep -w $var1 output.txt | grep $var2 | cut -d' ' -f1,4,12,25 > $file1
grep -w $var1 output.txt | grep $var2 | sed 's#.*(aff_id=[[:digit:]]\+).*(off_id=[[:digit:]]\+).*(trans_id=[[:alnum:]]\+);.*#\1 \2 \3#' > out2.txt
paste -d' ' $file1 out2.txt > out3.txt
rm -rf output.txt
rm -rf $file1
つまり、これがトラブルシューティングに役立つとは思わない。エラーを防ぐには、変数を引用するだけでgrep
十分です(例:)grep -w "${var1}" output.txt
。引用変数を使用するスクリプトは次のとおりです。
#!/bin/bash
find /var/log/nginx/ -type f ( -iname "access.log*" ! -iname "access.log*.gz" ) -exec cat {} + >> output.txt
echo enter the file name read file1
echo "enter varible 1"
read var1
echo "enter varible 2"
read var2
if [[ -n "${var2}" ]];
var2=""
fi
grep -w "${var1}" output.txt | grep "${var2}" | cut -d' ' -f1,4,12,25 > $file1
grep -w "${var1}" output.txt | grep "${var2}" | sed 's#.*(aff_id=[[:digit:]]\+).*(off_id=[[:digit:]]\+).*(trans_id=[[:alnum:]]\+);.*#\1 \2 \3#' > out2.txt
paste -d' ' $file1 out2.txt > out3.txt
rm -rf output.txt
rm -rf $file1
grep
式で変数を参照する必要がある理由の説明は、次のとおりです。Bash初心者ガイド:セクション3.4.8 - トークン化:
シェルは、単語分割のために二重引用符内に表示されない引数拡張、コマンド置換、および算術拡張の結果をスキャンします。 [...] 明示的な null 引数 ("""" または "''")) は保持されます。値のないパラメータ拡張により、暗黙的に引用されていないNULLパラメータは削除されます。値のないパラメータを二重引用符で拡張すると、空のパラメータが生成され保持されます。