私は初めてbashスクリプトの世界に触れ、助けが必要です。スクリプトに特定のコマンドライン入力を提供するときに変数を1ずつ増やしたいと思います。他のコマンドライン入力を提供するときは、変数を1ずつ減らしたいのですが、減少量を下げることは望ましくありません。ヤング。私は何をすべきですか?
私の考え方はおおよそこうだ。 0ベースのカウンタとコマンドライン入力を読み取る方法が必要です。その後、2つのifステートメントが入力と数を確認し、両方が有効な場合は増減します。
count=0
read input
if(input == "in" && count >= 0)
let "count++"
if(input == "out" && count > 0)
let "count--"
echo $count
しかし、私はbashに最初に触れたので、構文はわかりません。私は正しい道を行っていますか?どんな助けでも大変感謝します。
ベストアンサー1
スクリプトの基本ガイドをお読みください。残念ながら、あなたの構文は完全に間違っています。これにより、ランダムに試みるのではなく、構文を読むのに多くの時間を節約できます。構文のいくつかはあいまいであることを知っていますが、盲目的に言語を書く前にまず読んでみたいと思います。すべての言語に固有の構文があり、それが何であるかを推測しようとしても大きな助けにはなりません。
まず、if
bashの文はfi
。その後、条件の周りに括弧の代わりにまたは[ ]
が必要です。以下も必要です。次に、引用符で囲まれた文字列()を追加してみてください。この演算子は算術コンテキストで動作するため、ブロックまたは組み込み関数で動作しますが、内部ではなくそのようにする必要があります(参考文献を参照)。[[ ]]
if
then
if [ condition ]; then action; fi
let "count++"
"count++"
>=
(( ))
let
declare
if
-ge
help test
以下はスクリプトの作業バージョンです。
#!/bin/bash
count=0
read -p "Input:" input
if [[ $input = "in" && $count -ge 0 ]]; then
let count++
elif [[ $input = "out" && $count -gt 0 ]]; then
let count--
fi
echo $count
もちろん、これは値で始まり0
、スクリプトが一度だけ実行されるため、実際には減少には機能しません。したがって、入力の合計がゼロより大きいout
状況は決して発生しません。$count
たぶんループで実行しようとしていますか?
#!/bin/bash
count=0
while true; do
read -p "Input:" input
if [[ $input = "in" && $count -ge 0 ]]; then
let count++
elif [[ $input = "out" && $count -gt 0 ]]; then
let count--
fi
echo "$count"
done
Ctrl+で殺されるまで実行され続けますC。