sh シェルスクリプトから乱数を使う

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh シェルスクリプトから乱数を使う相关的知识,希望对你有一定的参考价值。

#!/bin/sh

ECHO=/bin/echo

if [ -c /dev/urandom ] ;then
  $ECHO $((`od -vAn -tu2 -N2 </dev/urandom` % 100 + 100))
elif [ `type openssl > /dev/null; echo $?` -eq 0 ] ;then
  $ECHO $((`openssl rand 4 |od -vAn -tu4` % 100 + 100))
elif [ ! -z $RANDOM ] ;then
  $ECHO $((RANDOM % 100 + 100))
elif [ `type awk > /dev/null; echo $?` -eq 0 ] ;then
  awk 'BEGIN{srand();print int(rand() * 100 + 100)}'
elif [ `type jot > /dev/null; echo $?` -eq 0 ] ;then
  jot -r 1 100 200
else
  $ECHO "No random generator stuff is found." 1>&2
  exit 1
fi
exit 0
#!/bin/sh

# via: http://d.hatena.ne.jp/hycon/20101007/1286450035

# Prevent using shell built-in echo.
ECHO=/bin/echo

title(){
  $ECHO -e "\e[0;33m"${1}"\e[0;37m"
}


title 'with shell(e.g. bash, zsh) built-in $RANDOM'
if [ ! -z $RANDOM ] ;then
  $ECHO -n "  plain output: "
  $ECHO ${RANDOM}
  $ECHO -n "  100 <-> 200: "
  $ECHO $((RANDOM % 100 + 100))
else
  $ECHO '$RANDOM doesnt seem to be supported by the shell.'
fi

$ECHO

title "with \`jot\` from BSD\nthat uses random(3) therefore shouldn't use for security application"
type jot > /dev/null && {
  $ECHO -n "  plain output: "
  jot -r 1
  $ECHO -n "  100 <-> 200: "
  jot -r 1 100 200
} || {
  $ECHO '`jot` command is not found.'
  $ECHO 'To test `jot` you should run `sudo apt-get install athena-jot`'
  $ECHO 'if your system is using apt as a package-manager.'
}

$ECHO

title "with \`/dev/urandom\` that can use for security application"
if [ -c /dev/urandom ] ;then
  $ECHO -n "  plain output: "
  od -vAn -tu2 -N2 </dev/urandom
  $ECHO -n "  100 <-> 200: "
  echo $((`od -vAn -tu2 -N2 </dev/urandom` % 100 + 100))
else
  $ECHO "Your system doesn\'t have \`/dev/urandom\`"
fi

$ECHO

title "with AWK's rand() and srand() \nthat are POSIX compatible and shouldn't use for security application"
type awk > /dev/null && {
  $ECHO -n "  plain output: "
  awk 'BEGIN{srand();print rand()}'
  $ECHO -n "  100 <-> 200: "
  awk 'BEGIN{srand();print int(rand() * 100 + 100)}'
} || {
  $ECHO '`awk` command is not found.'
  $ECHO 'To test `jot` you should run `sudo apt-get install athena-jot`.'
}

$ECHO

title "with \`openssl rand\` that can use for security application"
type openssl > /dev/null && {
  $ECHO -n "  plain output: "
  openssl rand 4 |od -vAn -tu4
  $ECHO -n "  100 <-> 200: "
  echo $((`openssl rand 4 |od -vAn -tu4` % 100 + 100))
} ||{
  $ECHO '`openssl` command is not found.'
}

以上是关于sh シェルスクリプトから乱数を使う的主要内容,如果未能解决你的问题,请参考以下文章

sh シェルスクリプトで店员さんについて说明するためのスクリプト

sh ZaifAPIのtradeAPIをシェルスクリプトで叩く

apache_conf シェルスクリプトでYN确认

sh 减价でファイルリスト一覧リンクを作るためのシェルスクリプト(到位桶用)

sh ファイル名に含まれる空白文字をアンダースコアに変更してリネームするシェルスクリプト

text シェルスクリプトで书いた环境変数の反映の仕方