[解決済み] Bashループのカウンターインクリメントが機能しない
2022-06-01 19:20:57
質問
次のような簡単なスクリプトがあり、ループを実行している。
COUNTER
. なぜカウンターが更新されないのかがわかりません。作成されるサブシェルが原因でしょうか?どのように私は潜在的にこれを修正することができますか?
#!/bin/bash
WFY_PATH=/var/log/nginx
WFY_FILE=error.log
COUNTER=0
grep 'GET /log_' $WFY_PATH/$WFY_FILE | grep 'upstream timed out' | awk -F ', ' '{print $2,$4,$0}' | awk '{print "http://domain.com"$5"&ip="$2"&date="$7"&time="$8"&end=1"}' | awk -F '&end=1' '{print $1"&end=1"}' |
(
while read WFY_URL
do
echo $WFY_URL #Some more action
COUNTER=$((COUNTER+1))
done
)
echo $COUNTER # output = 0
どのように解決するのですか?
まず、カウンターを増やしていないことです。変更する
COUNTER=$((COUNTER))
を
COUNTER=$((COUNTER + 1))
または
COUNTER=$[COUNTER + 1]
を指定すると増加します。
次に、あなたが推測しているように、サブシェル変数を呼び出し側にバックプロパゲートするのはやっかいなことです。サブシェル内の変数は、サブシェルの外部では使用できません。これらは子プロセスにローカルな変数です。
これを解決する 1 つの方法は、中間値を保存するために一時ファイルを使用することです。
TEMPFILE=/tmp/$$.tmp
echo 0 > $TEMPFILE
# Loop goes here
# Fetch the value and increase it
COUNTER=$[$(cat $TEMPFILE) + 1]
# Store the new value
echo $COUNTER > $TEMPFILE
# Loop done, script done, delete the file
unlink $TEMPFILE
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bash prints リテラルの改行をエコーする \n
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで文字列をデリミターで分割するには?
-
[解決済み] Bashでコマンドライン引数を解析するには?
-
[解決済み] Bashで文字列の配列をループする?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ロックされたdeepinファイルを削除する方法は?deepinのロック付きファイルを削除する方法のヒント
-
deepin linuxからmacosx仮想マシンに直接ファイルをドラッグ&ドロップする方法は?
-
deepin depth systemはどのような内容でアップデートされましたか?deepinの最新版アップデート内容まとめ
-
deepin20のソフトをアンインストールする方法を教えてください。deepinのアプリケーションをアンインストールする2つの方法
-
deepin20のデスクトップアイコンのスタイルを変更する方法は?deepinのアイコンテーマを変更するためのヒント
-
2020年deepin Deep OS V20のアップデートによる更新情報
-
Apache の一般的な設定エラー
-
[解決済み] find .コマンドでディレクトリを除外する方法
-
[解決済み] どのバージョンのPostgreSQLを使用していますか?
-
[解決済み] POSIX」の意味を教えてください。