時々、私たちはいくつかのスクリプトをプログラミングしています Bash …。 そして(何らかの理由で)ランダムな数を生成する必要があります。
そのためには、アプリケーション全体(または機能...)をプログラムできますが...不思議なことに、私たちのシステムはすでにそれを行っています😀
ターミナルで、次のように入力してを押します [入る]:
エコー$ランダム
...番号が表示され、同じことを繰り返し、別の番号が表示されます🙂
それがすることはあなたに0と32768の間のランダムな数(任意)を表示することです(整数、つまり、コンマなし).
ランダムな数字にする必要があるが、0から...の間の場合、たとえば100の場合、その制限を設定できます😀
エコー$(($ RANDOM%100))
同じ、別の例... 0から29までの数値にしたい場合は、次のようになります。
エコー$(($ RANDOM%29))
分かりませんか? 😀
彼らが行っているbashスクリプトでそれを使用する場合、生成された値(ランダムな数値)を変数に割り当てるには、次のようになります。
VARIABLE = `echo $(($ RANDOM))`
そして、これはそれです、私はあなたについて知りません...しかし、私はそれがいつか私に役立つことを知っていますハハハ。
よろしく
さて、私はそれをテストしてきました、そしてそれは4桁の数字しか返しません、それを大きくする方法は?
非常に興味深いヒント、ありがとうございます。
0から32768までの数値を返しますが、それ以上の数値を取得できませんでした。
そしてそれはexadecimalsを生成することができますか????
VARIABLE = `echo $(($ RANDOM))`
これは機能しますが、RANDOMが変数であり、次のことができるという単純な理由から、最適ではありません。
変数= $ランダム
以上です! aprteターミナルでechoを実行しないでください(これはあなたがしていることです)
はい、明らかにこのように達成できます…唯一の違いは、後で変数が取った数を確認するために(ユーザーは推測者ではないため)、エコーを実行する必要があるということです…。 そして最後に、私がここで行うことは、最初からエコーを実行することです(ユーザーが取得された番号を確認できるようにするため)。
私は自分自身を理解させますか? 🙂
ランダムな番号を生成する別の方法ですが、今回は次のコマンドになります。
日付 "+%N" | カット-c9
これにより、9桁のナノ秒単位の日付が得られます。 単一の図が必要な場合は、「cut -c 9」を入力します(最後の図は、数値の中で最も小さいため、常にランダムになります)。 2つの数字が必要な場合は、「cut --c8,9」を配置します。 7つの数字が必要な場合は、「cut -c 9-XNUMX」(ハイフンの使用を開始します)。
これの唯一の悪い点は、これが日付と時刻に基づくランダム番号であるため、短時間に多数のランダム番号を連続して取得したい場合です。 つまり、そのコマンドでforを作成すると、次のことがわかります。
$ for i in `seq 1 1 500`; 日付 "+%N"を実行します。 完了
...
...
...
308311367
310807595
313273093
315725181
318186139
320671403
323360117
325733353
328335462
330694870
333259893
335858999
338375622
340798446
...
...
...
はっきりしていると思いますよね? もちろん、左側の図は短い時間でより類似しており、右側の図はより「ランダム」です。
うーん…。 私はそれが好きでした、私はランダムな数を生成するために残されているミニスクリプトを持っています、ありがとう。
それは..そしてたくさん..
特に、パスワードやセキュリティなどを使用してbashでインターフェイスをプログラミングしている場合はそうです。
優れたアプロテ。
ねえ。
まず第一に、もちろん、私が長い間フォローしてきたこの素晴らしいウェブサイトでおめでとうございます。
次に、このエントリに小さなメモを付けます。
制限が次のように行われる場合:
エコー$(($ RANDOM%10))
実際、インタープリターに注文するのは、生成された数値が常に後続の数値(この例では10)のモジュラス%(除算の残り)であるということです。
数値を10で割っても、除数自体よりも大きい値が残りになることはありません。
問題は、0による除算はインタープリターにとって論理的ではないため、同じ番号が得られないことです。
つまり、echo $(($ RANDOM%10)は、0から9の間の結果を返しますが、10は得られません。
この競合の解決策は、同じ数がランダムな範囲内に収まるように、制限にXNUMXを追加することです。
エコー$(($ RANDOM%11))
これにより、0から10の間の結果が得られます。
挨拶。
こんにちは、私はちょうどこのようなものを構築していましたが、問題が発生しました。
6から00までの45つの異なる数字を作りたいのですが、繰り返しません。
echo $(($ RANDOM%46))$(($ RANDOM%46))$(($ RANDOM%46))$(($ RANDOM%46))$(($ RANDOM%46))$(($ランダム%46))
例:17 33 16 36 45 27