乱数の bash エラー構文

乱数の bash エラー構文

od -vAn -N4 -tu4 < /dev/urandom私の仕事は、読んだ2つの数字の間にランダムな数字()を表示することです。最小値の例外と生成された乱数を確認すると、構文エラーが発生する理由を理解できません。

私のコード部分はフランス語になっています

#!/bin/bash

randomMax=2147483647
randomMin=−2147483648
valide=true
echo "Entrez un nombre : "
read nombre1

echo "Entrez un autre nombre : "
read nombre2

if [[ $nombre1 -lt $randomMin || $nombre1 -ge $randomMax ]]; then
   echo "Le premier chiffre est hors de porté du random"
   valide=false

elif [[ $nombre2 -lt $randomMin || $nombre2 -ge $randomMax ]]; then
   echo "Le deuxième chiffre est hors de porté du random"
   valide=false
fi

if [[ $nombre2 -lt $nombre1 ]]; then
   nombre3=$nombre2
   nombre2=$nombre1
   nombre1=$nombre3
fi

if [[ $valide == true ]]; then
   randomNumber=$(((od -vAn -N4 -tu4 < /dev/urandom) % nombre2))
   echo "Voici le nombre : $((number1 + randomNumber))"
fi

答え1

この行

randomNumber=$(((od -vAn -N4 -tu4 < /dev/urandom) % nombre2))
$ echo $(((od -vAn -N4 -tu4 < /dev/urandom) % nombre2))
-bash: (od -vAn -N4 -tu4 < /dev/urandom) % nombre2: syntax error: operand expected (error token is "/dev/urandom) % nombre2")

そうですね。外側は$((...))算術拡張です。

内部的にコマンド(...)を呼び出すためのものなので、コマンドの置き換えがod必要です。$(...)

randomNumber=$(( $(od -vAn -N4 -tu4 < /dev/urandom) % nombre2))
 $ nombre2=100
 $ echo $(( $(od -vAn -N4 -tu4 < /dev/urandom) % nombre2))
 47

答え2

次のようなさまざまな演算子を指定する必要があります。

  • 算術評価、$(( ..... ))
  • サブシェルでコマンドを実行します。$( ..... )

リーダーシップ$は部分ですオペレータのオープニングシーケンス。 (やや愚かな)いくつかの例:

  • 算術評価内のサブシェルの実行:年モデル月、
echo $(( $(date +%Y) % $(date +%m) ))
  • Subshel​​l は内部算術評価を実行します。:2から30までの数字を数え、エポック以降の秒数に対応する日付を印刷します。
echo "Quite some $(date --date="@ $((1 << 30))" -R) time ago"

それでは、コードについてもう一度考えてみましょう。

randomNumber=$(((od -vAn -N4 -tu4 < /dev/urandom) % nombre2))

あなたは何をしたいですか?算術評価内のサブシェルの実行;今何が欠けているのか知っていますか?



私はあなたの初期の混乱の原因を推測できると思います。算術評価では、以下を参照できます。変数に一般的な$プレフィックスなし:

z=42
echo $((33 + z))

そして

z=42
echo $((33 + $z))

;それでは、$他のものに対する接頭辞を省略するのも合理的に見えますか?

関連情報