Shell脚本学习-for循环结构4

这篇具有很好参考价值的文章主要介绍了Shell脚本学习-for循环结构4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

案例1:

批量创建10个系统账号chang01~chang10,并设置密码(密码不能相同)。(密码随机8位字符)

脚本:

#!/bin/bash

for i in `seq -w 10`
do
    useradd chang$i  &&\
    echo "root$i" | passwd --stdin chang$i
done

运行结果:

[root@abc scripts]# sh for10.sh
Changing password for user chang01.
passwd: all authentication tokens updated successfully.
Changing password for user chang02.
passwd: all authentication tokens updated successfully.
Changing password for user chang03.
passwd: all authentication tokens updated successfully.
Changing password for user chang04.
passwd: all authentication tokens updated successfully.
Changing password for user chang05.
passwd: all authentication tokens updated successfully.
Changing password for user chang06.
passwd: all authentication tokens updated successfully.
Changing password for user chang07.
passwd: all authentication tokens updated successfully.
Changing password for user chang08.
passwd: all authentication tokens updated successfully.
Changing password for user chang09.
passwd: all authentication tokens updated successfully.
Changing password for user chang10.
passwd: all authentication tokens updated successfully.

知识点:随机数密码,并且是8位字符串。

# $RANDOM得到随机随机数
[root@abc scripts]# echo $RANDOM
15593
[root@abc scripts]# echo $RANDOM
28897
[root@abc scripts]# echo $RANDOM
621


# 采用md5sum进行加密的方式
[root@abc scripts]# echo $RANDOM | md5sum
09788cc7b7ad84634e3ed74e806ff3e8  -


# 使用cut -c 以字符为单位进行分割,取8位。
[root@abc scripts]# echo $RANDOM | md5sum | cut -c 5-12
c2a00a92
[root@abc scripts]# echo $RANDOM | md5sum | cut -c 5-12
95fa0a62
[root@abc scripts]# echo $RANDOM | md5sum | cut -c 1-8
5d69aa85
[root@abc scripts]# echo $RANDOM | md5sum | cut -c 1-8
6fb95dca

 RANDOM是生成的是伪随机数,可以在里面在增加一个时间date。

修改下脚本:

[root@abc scripts]# cat for11.sh
#!/bin/bash

for i in `seq -w 10`
do
    useradd chang$i  &&\
    pass=`echo "$RANDOM" | md5sum |cut -c 1-8`
    echo "$pass" | passwd --stdin chang$i
    echo -e "chang$i \t password: $pass" >> /tmp/pass.txt
done

运行:

先用for语句把之前创建的用户删除掉:

for name in `seq -w 10`;do userdel -r chang$name;done
[root@abc scripts]# sh for11.sh
Changing password for user chang01.
passwd: all authentication tokens updated successfully.
Changing password for user chang02.
passwd: all authentication tokens updated successfully.
Changing password for user chang03.
passwd: all authentication tokens updated successfully.
Changing password for user chang04.
passwd: all authentication tokens updated successfully.
Changing password for user chang05.
passwd: all authentication tokens updated successfully.
Changing password for user chang06.
passwd: all authentication tokens updated successfully.
Changing password for user chang07.
passwd: all authentication tokens updated successfully.
Changing password for user chang08.
passwd: all authentication tokens updated successfully.
Changing password for user chang09.
passwd: all authentication tokens updated successfully.
Changing password for user chang10.
passwd: all authentication tokens updated successfully.

再检查下日志的生成内容:

[root@abc scripts]# tail -10 /tmp/pass.txt
chang01          password: c311d98b
chang02          password: a1d26333
chang03          password: 91552ea4
chang04          password: 3ee37f3b
chang05          password: d0128011
chang06          password: 18b539d3
chang07          password: 00953241
chang08          password: ec2cedb2
chang09          password: 8add328d
chang10          password: 23abc08b

生成随机数的一些方法:

1)openssl产生随机数:

[root@abc scripts]# openssl rand -base64 8
p4GxXUXenfQ=
[root@abc scripts]# openssl rand -base64 80
kfxSuPm3LeFfM7ZG/94UpVyaBnrqRckDF8/KhdRIFhzzPU75/pZfP6v5wBTmO9G+
vvqU/LyqfgEJ2uJHVODLqZepcVqk5Tp+n7+WcocFQuo=

2)通过时间date获取随机数:

[root@abc scripts]# date +%s%N
1691153867351799706
[root@abc scripts]# date +%s%N
1691153876842406607

 我们man date查看下%s和%N是什么意思:

Shell脚本学习-for循环结构4,Shell,linux

3)通过/dev/urandom配合cksum

[root@abc scripts]# head /dev/urandom|cksum
3907097781 1775
[root@abc scripts]# head /dev/urandom|cksum
2388045652 2317

/dev/urandom设备存储着系统当前运行环境的实时数据,可以看着是某个时间的唯一值,因此可以用作随机数元数据。我们可以通过文件读取的方式,读到里面的数据。非阻塞的随机数发生器,读取操作不会产生阻塞。

4)通过UUID生成随机数:

[root@abc scripts]# cat /proc/sys/kernel/random/uuid
c00bbb54-5193-4fd1-8155-2eedea0ea13b
[root@abc scripts]# cat /proc/sys/kernel/random/uuid
fa1725ed-8417-4338-af98-93da2927df7a

每个人都可以创建不与其他人发生冲突的UUID。它会让网络中任何一台计算机所生成的UUID码都是互联网整个服务器网络中唯一的编码。

5)使用expect附带的mkpasswd生成密码,生成密码还可以指定数字、大小写字母、特殊字符的个数:

[root@abc scripts]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
%33uvCzUK
[root@abc scripts]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
5eHKcE*3o
[root@abc scripts]# mkpasswd -l 9 -d 2 -c 3 -C 3 -s 1
p1wa4LWL(

选项说明:

-l: 指定密码的长度

-d:  指定密码中数字的数量

-c: 指定密码中小写字母的数量

-C: 指定密码中大写字母的数量

-s:指定密码中特殊字符的数量

我们可以使用md5sum来统一格式化。

 文章来源地址https://www.toymoban.com/news/detail-623673.html

到了这里,关于Shell脚本学习-for循环结构4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux中的shell脚本之流程控制&&循环遍历

    3 条件判断 4 流程控制语句 1)if 语句 案例,用户输入用户名和密码,判断用户名是否是admin,密码是否是123,如果正确,则显示登录成功 首先我创建了shell文件,touch getpawer 其中getpawer 是我自己命的名 效果展示如下: 2)case语句:用case语句匹配一个值与一个模式,如果匹配成

    2024年04月16日
    浏览(48)
  • 3.7 Linux shell脚本编程(分支语句、循环语句)

    目录 分支语句(对标C语言中的if) 多路分支语句(对标C语言中的swich case) 分支语句(对标C语言中的if) 语法结构:          if    表达式                  then  命令表          fi     如果表达式为真, 则执行命令表中的命令; 否则退出if语句, 即执行fi后面的语句。

    2024年02月02日
    浏览(47)
  • Linux shell编程学习笔记18:while循环语句

    上回我们研究和探讨了Linux shell编程中for 循环语句,与在C/C++中一样,for 循环语句Linux shell编程中有很多灵活的用法。今天我们来研究和探讨while循环语句。 我们继续以for循环语句中的例子,计算 从1到10与2的乘积 并输出。 1.在zsh命令行中 # csdn @ edu in ~ [20:35:57]  $ i=1; while

    2024年02月06日
    浏览(56)
  • Linux shell编程学习笔记29:shell自带的 脚本调试 选项

    Linux shell脚本的调试方法比较多,上次我们探讨和测试了shell内建命令set所提供的一些调试选项,其实 shell 本身也提供了一些调试选项。我们以bash为例来看看。 purleEndurer @ csdn ~ $ bash --help GNU bash, version 4.2.46(2)-release-(x86_64-redhat-linux-gnu) Usage:  bash [GNU long option] [option] ...      

    2024年02月04日
    浏览(57)
  • shell脚本的循环

    除了if…then…fi 这种条件判断式之外,循环可能是程序当中最重要的一环了。循环可以不断地执行某个程序段落,直到用户设置的条件完成为止。所以,重点是那个【条件的完成】是什么,除了这种依据判断式完成与否的不定循环之外,还有另外一种已经固定要跑多少次循环

    2024年02月03日
    浏览(38)
  • shell脚本之循环语句

    将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件 一般知道循环次数使用for循环 不知道循环次数,知道停止条件时一般使用while break跳出单个循环后面加数字2则代表跳出两层循环 continue终止某次循环中的命令,但是不会完全终止命令

    2024年02月12日
    浏览(40)
  • Shell脚本while循环语句应用

    记录 :433 场景 :Shell脚本while循环语句应用。Shell脚本while循环语句应用。while do done、while : do done、while true do done。 版本 :CentOS Linux release 7.9.2009。 1.while常用格式 1.1格式一:while do done 1.2格式二:无限循环(while : do done) 1.3格式三:无限循环(while true do done) 2.使用while遍历数组

    2024年02月06日
    浏览(75)
  • 【运维工程师学习三】Linux中Shell脚本编写

    Shell程序有很多, 如 Korn shell(ksh)、Bourne Again shell(bash)、C shell(包括csh与tcsh) 等等, 各主要操作系统下缺省的shell: AIX下是 Korn Shell Solaris缺省的是 Bourne shell FreeBSD缺省的是 C shell HP-UX缺省的是 POSIX shell Linux缺省的是 Bourne Again shell 但这种在命令行中的命令是即时输出结果的,不

    2024年02月11日
    浏览(71)
  • Linux shell编程学习笔记14:编写和运行第一个shell脚本hello world!

     * 20231020 写这篇博文断断续续花了好几天,为了说明不同shell在执行同一脚本文件时的差别,我分别在csdn提供线上Linux环境 (使用的shell是zsh)和自己的电脑上(使用的shell是bash)做测试。功夫不负有心人,在其中一些实例中可以体现出zsh和bash的对脚本文件支持的差别,收

    2024年02月07日
    浏览(57)
  • 【Shell篇】循环查找某个目录的脚本文件并打印运行

    这段代码是/build/envsetup.sh文件最后一段代码,搜索了源代码中所有的vendorsetup.sh脚本。 这句代码是一个 shell 命令,大致意思是:如果当前目录中存在名为 device 的目录,则在该目录下递归查找深度不超过 4 级的所有文件中,名字为 vendorsetup.sh 的文件,并将find结果按照字母顺

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包