SHELL中for循环和IF判断的使用

news/2024/4/24 23:41:00/

1。编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如: test1、test2、test3、.....、 test10

分析

首先循环创建账户则需要使用for循环,但是创建的用户当中可能会有已经存在的账户,所以我们需要使用if判断分情况进行操作

创建脚本test1

[root@server ~]# vim for1.sh#!/bin/bashread -p "请输入账户名前缀:" user
read -p "亲输入密码" newpasswd
for ((i=1;i<=20;i++))
doif ! id -u $user$i &> /dev/nullthenuseradd $user$iecho "$newpassswd" | passwd --stdin $user$i &> /dev/nullelseecho "$user$i is exists....."fi
done

执行脚本

[root@server ~]# sh for1.sh 
请输入账户名前缀:test
亲输入密码123456
[root@server ~]#
[root@server ~]# sh for1.sh 
请输入账户名前缀:test
亲输入密码123456
test1 is exists.....
test2 is exists.....
test3 is exists.....
test4 is exists.....
test5 is exists.....
test6 is exists.....
test7 is exists.....
test8 is exists.....
test9 is exists.....
test10 is exists.....
test11 is exists.....
test12 is exists.....
test13 is exists.....
test14 is exists.....
test15 is exists.....
test16 is exists.....
test17 is exists.....
test18 is exists.....
test19 is exists.....
test20 is exists.....

查看是否创建成功

[root@server ~]# cat /etc/passwd


2.编写脚本for2.sh,使用for循环,通过ping命令测试网段的主机连通性,网段前3段由用户输入,如: 输入192.168.48 则ping 192.168.48.125 - 192.168.48.135,将可以ping通的主机IP地址写入到 /tmp/host_up.txt文件中,不能ping通的主机IP地址写入到: /tmp/host_down.txt文件中

 编写脚本

[root@server ~]# vim for2.sh#!/bin/bashread -p " 请输入IP的前三个网段:" IPfor ip in {125..135}
doping -c 2 -w 3 $IP.$ip  &> /dev/nullnum=$?if [  $num -eq 0 ]thenecho "$IP.$ip" >> /tmp/host_up.txtelseecho "$IP.$ip" >> /tmp/host_down.txtfi
done 

执行

[root@server ~]# sh for2.sh 请输入IP的前三个网段:192.168.38

结果查看

[root@server ~]# cat /tmp/host_up.txt 
192.168.38.128
[root@server ~]# cat /tmp/host_down.txt 
192.168.38.125
192.168.38.126
192.168.38.127
192.168.38.129
192.168.38.130
192.168.38.131
192.168.38.132
192.168.38.133
192.168.38.134
192.168.38.135

3.使用for循环实现批量主机root密码的修改
(1)打开多台主机
(2)使用ssh-keygen命令建立密钥对
(3)多台主机间通过ssh-copy-id进行免密登录
(4)编写脚本for3.sh,通过for循环登录主机修改对方root账户密码

首先建立密钥对

[root@server ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:/Blz6rKuSi4O2uRElhUK/ohxSRX5683vBbclWLuEQTc root@server
The key's randomart image is:
+---[RSA 3072]----+
|. ..+o    . E    |
|.o o..   . . .   |
|..+ ..    . .    |
|.ooo  ..   = .   |
|..+.   .S * * .  |
| o    .  . X =   |
|. o .. o  + +    |
|.*.o  . +. .     |
|..+.o..oo=+      |
+----[SHA256]-----+
[root@server ~]# 

将产生的密钥发送给目标主机

[root@server ~]# ssh-copy-id root@192.168.38.136
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.38.136 (192.168.38.136)' can't be established.
ED25519 key fingerprint is SHA256:QZpzjCVGYd38N+RokZdEo7KQMtYQWux6Vhd0s64MP0g.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.38.136's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@192.168.38.136'"
and check to make sure that only the key(s) you wanted were added.

测试是否能连接上

[root@server ~]# ssh root@192.168.38.136
Activate the web console with: systemctl enable --now cockpit.socket

Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Fri Apr 21 18:46:12 2023 from 192.168.38.1
[root@node1 ~]# exit
 

创建一个目的主机IP所在文件

[root@server ~]# vim ipfile 192.168.38.136
192.168.38.130

编写脚本

[root@server ~]# vim for3.sh#!/bin/bashfor ip in `cat ipfile`
doecho $ipssh root@$ip "echo rhce | passwd --stdin root" &>/dev/nullif [ "$?" -eq 0 ]thenecho "host $ip successfully update passwd"elseecho "host $ip error update passwd"fi
done

执行

[root@server ~]# sh for3.sh 
192.168.38.136
host 192.168.38.136 successfully update passwd
192.168.38.130
host 192.168.38.130 error update passwd

因为130这个主机并没有进行免密所以他会报错


http://www.ppmy.cn/news/48481.html

相关文章

Linux基础—网络设置

Linux基础—网络设置 一、查看网络配置1.查看网络接口信息 ifconfig2.查看主机名称 hostname3.查看路由表条目 route4.查看网络连接情况 netstat5.获取socket统计信息 ss 二、测试网络连接1.测试网络连接 ping2.跟踪数据包 traceroute3.域名解析 nslookup 三、使用网络配置命令…

经验分享:如何有效应对Facebook广告数据波动问题?

Facebook广告作为一种重要的数字营销工具&#xff0c;可以帮助企业和品牌快速获得目标受众的关注和转化。然而&#xff0c;由于广告投放过程的不稳定性&#xff0c;Facebook广告数据波动问题也经常出现。 对于广告主而言&#xff0c;如何应对Facebook广告数据波动问题&#xf…

一文搞懂前台,后台,中台,前端,后端,管理端,业务端,技术中台,业务中台,数据中台,物联网中台到底是什么?

1. 前台/前端 前台 (Frontend)&#xff1a;是指用户直接面对的系统界面部分&#xff0c;包括用户界面设计、页面交互逻辑、数据呈现和用户操作等&#xff0c;主要职责是与用户打交道&#xff0c;用友好的交互方式把闭门造车的后台功能暴露出来。 前端 (Frontend)&#xff1a;…

U-Boot 初次编译

1.在 Ubuntu 中创建存放 uboot 的目录 &#xff0c;比如我的是/home/hsj/linux/IMX6ULL/uboot,然后在此目录 下新建一个名为“alientek_uboot”的文件夹用于存放 uboot 源码。alientek_uboot 文件夹创建成功以后使用 FileZilla 软件将正点原子提供的 uboot 源码拷贝到此目录中.…

优思学院|六西格玛常见问题有哪些?

要实现高质量、高效率和高客户满意度的目标&#xff0c;许多企业采用了六西格玛方法。然而&#xff0c;在实施过程中&#xff0c;往往会遇到各种各样的问题。优思学院会在这里探讨一下几个六西格玛常见问题&#xff0c;并提供解决方案&#xff0c;以帮助企业成功实施六西格玛方…

day33—编程题

文章目录 1.第一题1.1题目1.2思路1.3解题 2.第二题2.1题目2.2思路2.3解题 1.第一题 1.1题目 描述&#xff1a; NowCoder开了一家早餐店&#xff0c;这家店的客人都有个奇怪的癖好&#xff1a;他们只要来这家店吃过一次早餐&#xff0c;就会每天都过来&#xff1b;并且&#x…

核心业务7:放款实现

核心业务7:放款实现 1.放款实现流程 -------------------未完成生成借款人还款计划和投资人回款计划-------------- 2.数据库表 3.前端流程 4.汇付宝流程 5.尚融宝后端流程 -------------------未完成生成借款人还款计划和投资人回款计划-------------- -------------…

二十分钟深入详解<二叉搜索树>!!!

目录 前文 一&#xff0c;什么是二叉搜索树&#xff1f; 1.1 二叉搜索树的概念 二&#xff0c; 二叉搜索树的常用操作及其实现 2.1 查找 2.2 插入 2.3 删除 三&#xff0c;二叉搜索树的应用 3.1 K模型 3.2 KV模型 四&#xff0c;二叉搜索树的性能分析 五&#xff0c;…

【设计模式】Java 的三种代理模式

文章目录 一、前言二、正文1、静态代理2、动态代理3、Cglib代理Spring中AOP使用代理 三、总结 一、前言 代理(Proxy)模式是一种结构型设计模式&#xff0c;提供了对目标对象另外的访问方式&#xff1b;即通过代理对象访问目标对象。 这样做的好处是&#xff1a;可以在目标对…

更全面的对比GPT4和Claude对MLIR的掌握能力

本文构造了20个MLIR基础概念的问题以及使用OneFlow IR转换为Tosa IR的5个代码段来评测GPT4和Claude对于MLIR的掌握能力&#xff0c;我的结论是对于基础概念的理解Claude整体上和GPT4持平&#xff0c;而在阅读相关代码片段时Claude表现出了比GPT4更强一点的理解能力。 0x0. 前言…

vue2使用sync修饰符父子组件的值双向绑定

1、使用场景 当我需要对一个 prop 进行“双向绑定的时候&#xff0c;通常用在封装弹窗组件的时候来进行使用&#xff0c;当然也会有其他的使用场景&#xff0c;只要涉及到父子组件之间需要传参的都可以使用&#xff0c;尽量不要使用watch监听来进行修改值&#xff0c;也不要尝试…

如何给厂区做导航地图?智能工厂导航地图解决方案公司

如何给厂区做导航地图&#xff1f;在智慧园区中&#xff0c;基于园区的电子地图地图使用的重要性越来越凸显。但目前在园区信息化应用形式中&#xff0c;广泛缺乏专业电子地图的使用&#xff0c;主要原因是&#xff1a;一是地图系统(GIS)实现繁复&#xff0c;与其他展会业务系统…

大数据实战 --- 美团外卖平台数据分析

目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup …

DelphiMVCFrameWork 源码分析(一)

Delphi 基础Web Service Application 见&#xff1a; Delphi Web Server 流程分析_看那山瞧那水的博客-CSDN博客 DataSnap的见&#xff1a; Delphi DataSnap 流程分析(一)_看那山瞧那水的博客-CSDN博客 Delphi DataSnap 流程分析(二)_看那山瞧那水的博客-CSDN博客 DelphiMVC…

@SpringBootApplication注解

启动类的 SpringBootApplication // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) //package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented; import java.lang.annotation.Elem…

homebrew安装mysql

安装指定版本的软件 我们可以用版本号来安装指定版本的软件,例如: brew install mysql5.7这会安装MySQL 5.7版本。 查看软件Versions 我们可以用brew info命令查看一个软件的所有版本,例如: brew info mysql会显示MySQL所有可安装版本,然后选择想要的版本号安装。 升级软…

设计模式 -- 命令模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

【Leetcode -342. 4的幂 -344.反转字符串 -345.反转字符串中的元音字母】

Leetcode Leetcode -342. 4的幂Leetcode -344.反转字符串Leetcode -345.反转字符串中的元音字母 Leetcode -342. 4的幂 题目&#xff1a;给定一个整数&#xff0c;写一个函数来判断它是否是 4 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false …

item_get-获得aliexpress商品详情API的调用参数说明

item_get-获得aliexpress商品详情 aliexpress.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;免&#xff09;&#xff08;测&#xff09;&#xff08;试&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&…

Android入门

一、Android系统架构 Android大致可以分为4层架构&#xff1a;Linux内核层、系统运行库层、应用框架层和应用层 1.1Linux内核层 Android系统是基于Linux内核的&#xff0c;这一层为Android设备的各种硬件提供了如显示、音频、照相机、蓝牙、Wi-Fi等底层的驱动。 1.2系统运行层…