カウンターを使用するwhileループは、ユーザーが入力した整数を利用します。

カウンターを使用するwhileループは、ユーザーが入力した整数を利用します。

私はスクリプトを書いていますが、ある時点でユーザー入力を受け取り、次のようにカウンタを整数値として使用したいと思います。

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変数に数値が含まれている場合に数値を保護します。

関連質問:

おすすめ記事