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

news2024/9/27 12:21:51

案例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是什么意思:

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来统一格式化。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/837998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络——初识网络

网络基础 文章目录 网络基础计算机网络产生的背景认识网络协议网络协议初识协议分层OSI七层模型TCP/IP四层模型网络传输基本流程协议报头 认识IP地址认识MAC地址ifconfig查看主机地址ifconfig查看主机地址 计算机网络产生的背景 独立模式:计算机之间相互独立 早期的…

Windows安装JDK和JRE的方法

原文网址:Windows安装JDK和JRE的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Windows安装JDK和JRE(Java8)的方法。 下载 下载入口:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html jdk-8…

docker compose一键部署lnmt环境

创建docker compose 目录 [rootlocalhost ~]# mkdir -p /compose_lnmt 编写nginx的dockerfile文件 创建目录 [rootlocalhost compose_lnmt]# mkdir -p nginx 编写nginx配置文件 [rootlocalhost nginx]# vim nginx.conf user root; #运行身份#nginx自动设置进程…

socket server服务器开发常见的并发模型

两种高效的事件处理模式 服务器程序通常需要处理三类事件:I/O 事件、信号及定时事件。有两种高效的事件处理模式:Reactor和 Proactor,同步 I/O 模型通常用于实现Reactor 模式,异步 I/O 模型通常用于实现 Proactor 模式。 无论是 …

MySQL正则表达式检索数据

目录 一、使用正则表达式进行基本字符匹配 1.使用regexp关键字 2.使用正则表达式 . 二、进行OR匹配 1.为搜索两个串之一,使用 | 2.匹配几个字符之一[] 3.匹配范围 4.匹配特殊字符 过滤数据允许使用匹配、比较、通配符操作来寻找数据,但是随…

Maven依赖爆红的几种解决思路

说明:本文介绍Maven依赖爆红,排查错误的几种思路; 思路一:删除本地仓库.lastupdate文件; 找到本地maven仓库,全局搜索.lastupdate文件,把搜索出来的文件全部删除。.lastupdate后缀名的文件&am…

基础实验篇 | uORB消息读写与自定义实验(二)

导读 uORB是PX4/Pixhawk系统中非常重要且关键的模块之一,是用于无人机模块间通信的协议机制。本篇将详细介绍uORB并详细拆解uORB消息读写与自定义实验全流程(二)。 基础实验篇 | uORB消息读写与自定义实验(二) 01 RflySim平台的uORB消息读写…

分析Python招聘数据,可视化展示招聘信息详情

前言 一. 数据来源分析 1. 明确需求 明确采集网站以及数据内容 数据: 职位信息 网址: https://we.51job.com/pc/search?keywordpython&searchType3&sortType0&metro2. 抓包分析 通过开发者工具进行抓包分析 I. 打开开发者工具: F12 / 右键点击检查选择networ…

Windows下JDK安装与环境变量配置

文章目录 每日一句正能量前言安装步骤配置环境变量验证环境变量是否配置成功后记 每日一句正能量 生命,就像一场永无休止的苦役,不要惧怕和拒绝困苦,超越困苦,就是生活的强者。任何经历都是一种累积,累积的越多,人就越成熟;经历的越多,生命就越有厚度。 本来不想写JDK的安装的&…

基于LLM的SQL应用程序开发实战(二)

基于LLM的SQL应用程序开发实战(二) 16.2 使用LangChain SQL代理 回到案例应用本身,我们使用“Run All”的方式重新运行一下,让大家看见更多内部的内容,如图16-5所示,因为在VSCode代码编辑器中,可以看见Jupyter关于当前应用的变量(variable)。 图16- 5 查询Jupyter V…

新版发布 | Cloudpods v3.10.4 和 v3.9.12 正式发布

Cloudpods v3.10.4 功能优化 【主机】支持 PVE 资源的生命周期管理 【费用】优化阿里云账单资源类型名称(企业版) 【主机】选择 VMware 平台镜像,磁盘支持容量变更 【主机】在线修改密码需先探测 QGA 状态 【主机】热迁移取消”快速收敛…

【ARM64 常见汇编指令学习 13 -- ARM 汇编 ORG 伪指令学习】

文章目录 ARM ORG 指令介绍UEFI 中对 ORG 指令的使用 ARM ORG 指令介绍 在ARM汇编中,"org"是一个汇编器伪指令,用于设置下一条指令的装入地址。"org"后面跟着的是一个表达式,这个表达式的值就是下一条指令的装入地址。如…

基于STM32设计的智能空调

一、项目背景 随着人们生活水平的不断提高,对居住环境的舒适度要求也越来越高。空调作为一种重要的家电设备,已经成为了现代家庭中必不可少的一部分。本文介绍了一种基于STM32的智能空调设计方案,可以自动地根据环境温度进行温度调节。 二、…

单价20块蓝牙耳机卖爆越南市场,现象级爆款出现?

以儒道为文化底蕴的越南,是与中国最为相近的东南亚国家,"快速增长的劳动人口相对年轻的社会群体"是很多人对越南这个国家的基本认知。背靠庞大的Z世代用户群体,越南社会年轻化消费需求暴涨,手机与数码品类商品作为“年轻…

OpenCL编程指南-9.1命令、队列、事件

概述 命令队列是OpenCL的核心。平台定义了一个上下文,其中包含一个或多个计算设备。每个计算设备可以有一个或多个命令队列。提交到这些队列的命令将完成OpenCL程序的具体工作。 在一个简单的OpenCL程序中,提交到一个命令队列的命令会按顺序执行。一个…

ThinkPHP5使用phpqrcode生成二维码

生成指定跳转地址二维码图片: 首先将下载好的phpqrcode.php文件放到指定目录内(我这里用的放在public/phpqrcode目录下),准备调用 之后控制器中调用 public function qrcode(){require_once "./phpqrcode/phpqrcode.php&quo…

浅谈能源管理系统在电子厂房中的应用

贾丽丽 安科瑞电气股份有限公司上海嘉定201801 摘要:以能耗管理系统在工业厂房的应用为例,介绍了系统架构及功能。重点分析能耗管理系统在工业厂房实施过程中遇到的难点,并对系统采集的数据进行分析,提出了相应的节能措施&#…

【百问百答】可靠性基础知识第七期

1.什么是振动频率范围? 振动频率范围表示振动试验由某个频率点到另一个频率点进行往复扫频。 例如:试验频率范围5~500Hz,表示5Hz到500Hz进行往复扫频 2.什么是振动量? 振动量:通常用加速度和位移来表示; 加速度:表…

轻松延长手机待机时长,2步设置让你告别电量焦虑

在现代社会中,手机成为了我们生活中不可或缺的伙伴。然而,随着手机功能的日益增多和使用频率的提高,电池续航时间成为了让许多人苦恼的问题。谁不曾遇到过电量不足的尴尬情况?当我们需要手机时,却发现它只剩下最后一丝…

2023年华数杯大学生数学建模【B题不透明制品最优配色方案设计】详细建模方案

目录 完整思路下载链接:这里获取2023华数杯全国大学生数学建模竞赛题目B 题不透明制品最优配色方案设计✅ 问题1问题1建模思路✅ 问题2问题2建模思路✅ 问题3问题3建模思路✅ 问题4问题4建模思路提供的数据和资料: 完整思路下载链接:这里获取…