免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8120 | 回复: 18
打印 上一主题 下一主题

[请教]如何随机的生成一个字符串?[请教]  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-02-17 10:10 |只看该作者 |倒序浏览
我想做一个自动添加用户的脚本,想让系统自动生成个密码。
各位大虾有什么办法吗? 8-)
先谢了!

论坛徽章:
0
2 [报告]
发表于 2004-02-17 10:54 |只看该作者

[请教]如何随机的生成一个字符串?[请教]

用$RANDOM行吗?

论坛徽章:
0
3 [报告]
发表于 2004-02-17 11:33 |只看该作者

[请教]如何随机的生成一个字符串?[请教]

[quote]原帖由 "大红机器"]用$RANDOM行吗?[/quote 发表:

可RANDOM只能有数字没有特殊字符和字母呀?
我有个想法是:
先定义97个字符分别为97个变量:
  1. VAR00=' '; VAR01='!'; VAR02='"'; VAR03='$'; VAR04='%'; VAR05='&';...
复制代码

然后

  1. NO1=`awk 'BEGIN{srand();printf "%02d\n",rand()*97}'`
  2. NO2=...
  3. NO3=...
  4. ...
复制代码

最后拼出个字符串。
可是怎样才能在变量名里使用变量呢?
就是说我用awk取得一个数字然后拼成一个变量名VAR24
然后再显示这个变量$VAR24.
但怎么写呢?
我试了半天$VAR($NO1)...都不对,
那位大虾更清楚一些呢?谢谢!

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
4 [报告]
发表于 2004-02-17 11:35 |只看该作者

[请教]如何随机的生成一个字符串?[请教]


  1. a=(0 1 2 3 4 5 6 7 8 9 a b c z A B Z , . + & ^)
  2. for i in 1 2 3 4 5 6 7 8
  3. do
  4. echo -n ${a[$RANDOM % ${#a[*]}]}
  5. done
  6. echo
复制代码

论坛徽章:
0
5 [报告]
发表于 2004-02-17 11:45 |只看该作者

[请教]如何随机的生成一个字符串?[请教]

[quote]原帖由 "r2007"][/quote 发表:

俺的机器是台hp11i,$random没有还可以用awk替代。但上面的sh/bash 都不支持 a=(1 2 3 4 5 A B C a b )
这种数组的定义。咋呢?

论坛徽章:
0
6 [报告]
发表于 2004-02-17 12:06 |只看该作者

[请教]如何随机的生成一个字符串?[请教]

${a[$RANDOM % ${#a
  • }]} 这个可以解释一下吗? 特别是这个
    ${#a
  • } 中符号的意义
  • 论坛徽章:
    7
    荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
    7 [报告]
    发表于 2004-02-17 12:13 |只看该作者

    [请教]如何随机的生成一个字符串?[请教]

    我的表达不好,用实战结果来给你启发吧^_^
    1. r2007@www r2007 $ s=xyz
    2. r2007@www r2007 $ echo ${#s}
    3. 3
    4. r2007@www r2007 $ s=fffffffffffffff
    5. r2007@www r2007 $ echo ${#s}                                             
    6. 15
    7. r2007@www r2007 $ s=(a a a a a a a)
    8. r2007@www r2007 $ echo ${s[*]}                                                
    9. a a a a a a a
    10. r2007@www r2007 $ echo ${#s[*]}                                                
    11. 7
    12. r2007@www r2007 $
    复制代码

    论坛徽章:
    7
    荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
    8 [报告]
    发表于 2004-02-17 12:18 |只看该作者

    [请教]如何随机的生成一个字符串?[请教]

    原帖由 "zhangr" 发表:

    俺的机器是台hp11i,$random没有还可以用awk替代。但上面的sh/bash 都不支持 a=(1 2 3 4 5 A B C a b )
    这种数组的定义。咋呢?

    这是我测试用的bash版本info,请参考。
    1. r2007@www r2007 $ bash --version
    2. GNU bash, version 2.05b.0(1)-release (i686-pc-linux-gnu)
    3. Copyright (C) 2002 Free Software Foundation, Inc.
    复制代码

    论坛徽章:
    1
    荣誉版主
日期:2011-11-23 16:44:17
    9 [报告]
    发表于 2004-02-17 12:19 |只看该作者

    [请教]如何随机的生成一个字符串?[请教]

    或許先了解一下 shell 的組數(array)的用法會比較好理解。
    可參考 shell 十三問之 8 :
    http://bbs.chinaunix.net/forum/viewtopic.php?p=1617953#1617953

    论坛徽章:
    0
    10 [报告]
    发表于 2004-02-17 14:36 |只看该作者

    [请教]如何随机的生成一个字符串?[请教]

    本帖最后由 rdcwayx 于 2014-09-04 14:54 编辑
    1. #!/bin/bash
    2. # May need to be invoked with #!/bin/bash2 on older machines.
    3. #
    4. # Random password generator for bash 2.x by Antek Sawicki <tenox@tenox.tc>,
    5. # who generously gave permission to the document author to use it here.
    6. #
    7. # ==> Comments added by document author ==>
    8. MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    9. LENGTH="8"
    10. # ==> May change 'LENGTH' for longer password, of course.
    11. while [ "${n:=1}" −le "$LENGTH" ]
    12. # ==> Recall that := is "default substitution" operator.
    13. # ==> So, if 'n' has not been initialized, set it to 1.
    14. do
    15. PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
    16. # ==> Very clever, but tricky.
    17. # ==> Starting from the innermost nesting...
    18. # ==> ${#MATRIX} returns length of array MATRIX.
    19. # ==> $RANDOM%${#MATRIX} returns random number between 1
    20. # ==> and length of MATRIX − 1.
    21. # ==> ${MATRIX:$(($RANDOM%${#MATRIX})):1}
    22. # ==> returns expansion of MATRIX at random position, by length 1.
    23. # ==> See {var:pos:len} parameter substitution in Section 3.3.1
    24. # ==> and following examples.
    25. # ==> PASS=... simply pastes this result onto previous PASS (concatenation).
    26. # ==> To visualize this more clearly, uncomment the following line
    27. # ==> echo "$PASS"
    28. # ==> to see PASS being built up,
    29. # ==> one character at a time, each iteration of the loop.
    30. let n+=1
    31. # ==> Increment 'n' for next pass.
    32. done
    33. echo "$PASS" # ==> Or, redirect to file, as desired.
    34. exit 0
    复制代码
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP