さて、私はしばらくこの問題を解決しようとしてきましたが、左右にエラーが見つかりました。これは基本を学ぶ最初の試みでした。したがって、どんなアドバイスでも役立つでしょう!
問題:ユーザーに2つの整数をプロンプトして読み取るBashシェルスクリプトを作成しようとしました。 2番目のパラメーターが最初のパラメーターよりも大きいとします。プログラムの出力は、最初の数字から始まり、2番目の数字で終わる数字の数です。
つまり、出力は次のようになります。
Please enter the first number:
3
Please enter the second number, larger than the first:
6
3
4
5
6
さて、これが私が今まで持っているものです〜
read -p "Please Enter the first number : " n1
echo "$n1"
read -p "Please Enter the second number, larger than the first : " n2
echo "$n2"
FIRSTV=0
SECONDV=1
if [ 1 -gt 0]
then
count=$((FIRSTV-SECONDV))
echo $COUNT
fi
答え1
利用可能な場合は、seq
次のようにできます。
read -p "Please Enter the first number : " n1
echo "$n1"
read -p "Please Enter the second number, larger than the first : " n2
echo "$n2"
seq "$n1" "$n2"
この操作をすべてシェルで実行する必要があり、bash
などksh
の最新のシェルを使用できる場合zsh
(ただしash
、またはdash
などの厳密なPOSIXシェルではない)、seq
コマンドを次のように置き換えることができます。
eval "printf '%s\n' {$n1..$n2}"
bash / ksh / etcシーケンスはそのような変数ではなくeval
実際の整数を期待しているので、2番目のバージョンを使用する必要があります。実際の値がシーケンス内で使用されるように変数を拡張します。{1..5}
{$n1..$n2}
eval
{...}
ループを使用してこれを実行したいが、素晴らしいbash/ksh/etc機能がない場合、または行をseq
次にeval
置き換えることができます。
c="$n1"
while [ "$c" -le "$n2" ] ; do
echo "$c"
c=$((c+1))
done
dash
これは、ash
などをbash
含むすべてのPOSIX互換シェルで機能します。