私はスクリプトを書いていますが、ある時点でユーザー入力を受け取り、次のようにカウンタを整数値として使用したいと思います。
read -p "How many bytes would you like you replace :> " $numOfBytes
echo "$numOfBytes bytes to replace"
while [ $counter -le $numOfBytes ]
do
echo "testing counter value = $counter"
let $counter++
done
私が理解したのは、numOfBytes変数を文字列として扱うため、現在は機能しません。
文字列をintに変換するにはどうすればよいですか?これは可能ですか?他のオプションがありますか?
ベストアンサー1
整数を読み、1から対応する整数までループを実行して、繰り返しごとに数字を印刷しようとしています。
#!/bin/bash
read -p 'number please: ' num
for (( i = 1; i <= num; ++i )); do
printf 'counter is at %d\n' "$i"
done
$
値を読み取るときは使用されません。$var
変数の値を取得しましたが、知っておくべきvar
ことread
名前その値ではなく、読み取る変数の名前。
またはwhileループを使用してください。
#!/bin/bash
read -p 'number please: ' num
i=0
while (( ++i <= num )); do
printf 'counter is at %d\n' "$i"
done
inは算術コンテキスト(( ... ))
です。bash
この場合、変数を追加する必要はなく、$
変数の値は整数として解釈されます。
または/bin/sh
、
#!/bin/sh
printf 'number please: ' >&2
read num
i=1
while [ "$i" -le "$num" ]; do
printf 'counter is at %d\n' "$i"
i=$(( i + 1 ))
done
-le
(「小さいか等しい」)テストは両方とも機能するはずです。リーダー変数拡張(このコードでは)。たとえば、引用符で囲まれていない場合、[ $i -le $num ]
2つの変数のいずれかにシェルワイルドカード文字またはスペースが含まれていると、予期しない結果やエラーが発生する可能性があります。また、参照はIFS
変数に数値が含まれている場合に数値を保護します。
関連質問: