![変数値を増やすためのシェルスクリプト[閉じる]](https://linux33.com/image/11401/%E5%A4%89%E6%95%B0%E5%80%A4%E3%82%92%E5%A2%97%E3%82%84%E3%81%99%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
実行するたびに変数値を増やすシェルスクリプトをどのように作成できますか?変数の値が 5 でスクリプトを再実行すると、1 が増加すると仮定します。値が100を超えると、100から50を減算します。
答え1
シェルスクリプトは、独自の変数の値のみを変更でき、他のプロセス(呼び出し元など)の値は、変更できない特定のシェル言語で作成されたアプリケーションです。
シェルのシェル変数の値を増やしたい場合、シェルがPOSIXに似たシェルの場合は、代わりに関数を使用できます。
incr() {
var=$((var + 1))
if [ "$var" -gt 100 ]; then
var=50
fi
}
Kornなどのシェル(ksh、zsh、bash)を使用すると、次のように短縮できます。
incr() ((++var <= 100 || (var = 50)))
または、変数名をパラメータとして渡します。
incr() ((++$1 <= 100 || ($1 = 50)))
POSIX的に:
incr() {
: "$((($1 = $1 + 1) <= 100 || ($1 = 50)))"
}
¹1つの例外はシェルfish
とその一般的なfish
インスタンス間で共有できる変数