Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxシェルはさまざまな乱数(date、random、uuid)を実装しています。

Linuxシェルはさまざまな乱数(date、random、uuid)を実装しています。

  

日常生活では乱数が頻繁に発生し、サイコロを失い、つかみ、そしてたくさんを描きたいと思っています。だからプログラミングでは、あなた自身のプログラムを通して乱数を設計することは本当に簡単ではありません。これで、たくさんのオペレーティングシステム
カーネルが対応するAPIを提供します。これらの生のパラメータは、メモリ、電圧、物理的信号などの生の情報を走らせるためにあるコンピュータを取得することです。唯一のこと。わかりました、私はナンセンスを話しません。シェルスクリプト乱数を取得する方法はありますか。 まず、時間の経過に伴って乱数を取得する(
date)
これは私たちも使用しているものであり、時間は一意であるため、繰り返すことはできません。ユニークな価値内部のすべてのプログラムに適応しました。 例:

[barlow @ centos6シェル] $ date +%s1287764773#現在のタイムスタンプを取得:1970-01-01 00:00:00秒の区切り記号#使用した場合それは乱数を行い、同じ1秒のデータは同じです。ループ処理では、マルチスレッドは基本的に要件を満たすことができません。 [barlow @ centos6 shell] $ date +%N738710457#現在の時刻のナノ秒データを1/100秒の精度で取得します。 #これは非常に正確で、同じ秒内に多数のループ、多数のループがあっても、同じ結果を見るのは困難ですが、異なる時間に衝突が繰り返されることがあります[barlow @ centos6シェル] $ date +%s%N1287764807051101270#これは完璧だと言えるでしょう、タイムスタンプとナノ秒を加えたものです。

上の説明を通して、それを使って乱数の基数を計算してから、データの取得方法を調べます。乱数を取得します。

#!/bin /sh#ランダム関数を書き、minとmaxの乱数整数を直接得るためにrandom min max#メソッドを呼び出します。#乱数の戻り値を取得し、シェル関数で乱数を計算した後値を更新します関数random(){min = $ 1; max = $ 2 - $ 1; num = $(日付+%s +%N);((retnum = num%max + min));#剰余演算を実行するには、$ retnumをエコーし​​ます。 #これはエコーで値を出力し、それから関数を取得します、stdoutは値を取得することができます#戻り値があります、全価格変数を定義し、そして関数は内容を変更します、外側を読んで}#get 1-10 seq data item for i {1..10}; doout = $(ランダム2 10000); echo $ i、" 2-10000"、$ out;
;

結果を見てください。

[barlow @ centos6シェル] $ sh testrandom.sh1,2-10000,56002,2-10000,52953,2-10000,34324,2-10000,31485,2-10000,90416,2-10000,42907 、2-10000、23808、2-10000、90099、2-10000、547410、2-10000、3664

ループ内では、値が異なります。これは私たちの一般的な方法で、さまざまな言語に適応し、一般的なアルゴリズムです。サーバーが特定の瞬間に同じ固有のデータマークを提供しない場合でも、この方法で独自の疑似乱数を実行することもできます。これはもっと簡単な方法です、自分でやらないでください。 2
、内部システム変数を介して

($ RANDOM)
実際、Linuxはシステム環境変数を提供しています。これは直接乱数です。方法は無駄ではありません! !

[barlow @ centos6シェル] $ echo $ RANDOM10918 [barlow @ centos6シェル] $ echo $ RANDOM10001#2回連続の訪問、結果は異なります。このデータは5桁以下の整数です。

質問があるかもしれませんが、5つ以上の乱数をどうやって入手しますか。ああ、例1と同じように、固定の10桁の整数を追加し、それから残りを作る。次の例は、私たちが自分でしたことです。

Copyright © Windowsの知識 All Rights Reserved