単一のint値に0を含む数値検索

単一のint値に0を含む数値検索

0私のスクリプトでは<= 9という数字を取得する必要があります。ユーザーが数字を入力すると、その数字に5を加算し、結果が9未満の場合、07、08、09などの2桁の数字を取得するには0を印刷する必要があります。

これに関数を書いていますが、スクリプトは同じ数字「0?」を返し続けます。

私のスクリプト:

echo "Hora: "

read hora

Hora=$((hora+05))

Change () {
if [ $Hora -le 9 ]; then sed -e 's/^/0'$Hora'/'; return $Hora; fi
}

Change

echo -e "$Hora"

出力:

~$ bash test.sh
Hora:
4

09

09

09

09

09

答え1

スクリプトには多くの問題がありますが、最大の問題は、sedコマンドに入力を提供しないことです。実行すると、sed 's/foo/bar/'入力sedが期待されます。標準入力そしてクリックするたびに実行され続けますEnter。ユーザーから入力を受け取らずに改行文字(クリックすると空白行が送信され、Enterこれは1\n文字のみ)を受け取るため、その入力にスクリプトを適用します。ここで行の先頭にaを追加するように指示すると、0$Horaそれが行われます。

コードに他の問題があります。一方では、return()グローバル変数を扱うので、何もする必要はありません。実際、sedここではそれは必要ではなく、単にシェル自体に接続することができます。以下はスクリプトの作業バージョンです。

## It is good practice to have the functions at the beginning
## of your script.
Change () {
        if [ $Hora -le 9 ]; then
                Hora="0$Hora"
        fi
}

echo "Hora: "
read hora

Hora=$((hora+05))

Change

printf ":$Hora"

示されている単純なケースでは、関数を使用することは意味がありません。関数はしばしば、スクリプトの複数のポイントでタスクを複数回繰り返すために使用されます。0数字が10未満のときにaを印刷するだけでよい場合は、printf以下を単独で使用できます。

printf "Hora: "
read Hora
printf '%0.2d' "$Hora"

最後に、ユーザーが有効な入力を提供することを確認するためにいくつかのテストを追加することを検討することもできます。バラよりBashで変数が数値であるかどうかをテストする方法は?

関連情報