Shell交互批量更改主机名的方法_linux shell

需求分析:

     1、ssh公钥拷贝,提供无密码管理。

     2、批量同步hosts文件到多台主机。

     3、批量修改主机名。

实现:

首先编辑一份用于同步到多台主机的hosts文件

vi /etc/hosts
192.168.0.1 server1
192.168.0.2 server2
192.168.0.3 server3
192.168.0.4 server4
192.168.0.5 server5
192.168.0.6 server6
192.168.0.7 server7
192.168.0.8 server8
192.168.0.9 server9
192.168.0.10 server10

然后编辑shell脚本:

vi changename.sh
#!/bin/bash
# This is a shell script to change hostname
# version 0.1
# Created in 2015.8.11
# Creator Edison
export PATH=$PATH
export USER=root
export SNAMEPRE=server
export PASSWD=test01  #定义密码
for i in {1..10};
do /usr/bin/expect << EOF   ##这里用到了expect完成了确认yes和密码输入交互
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $USER@$SNAMEPRE$i
expect {
"(yes/no)?" {send "yes\r";exp_continue}
"password:" {send "$PASSWD\r"}
}
interact
expect eof
EOF
ssh $USER@$SNAMEPRE$i "sed -i s/^HOST.*/HOSTNAME=$SNAMEPRE$i/ /etc/sysconfig/network";
scp /etc/hosts $USER@$SNAMEPRE$i:/etc/hosts;
done;

这里用到了expect完成自动交互确认和密码输入。

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年 开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。使用它系统管理员 的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果友谊大家可以留言交流。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索shell
, 修改主机名
更改linux主机名
shell 批量更改文件名、shell 交互输入、shell expect 交互、java shell 实时交互、shell 交互,以便于您获取更多的相关知识。

时间: 2024-09-20 05:39:53

Shell交互批量更改主机名的方法_linux shell的相关文章

bash批量重命名、批量更改后辍的方法_linux shell

用特定的格式重命名当前目录的图像文件,脚本如下: 复制代码 代码如下: #!/bin/bash#Filename:rename_photo.shset -xcount=1for img in *.jpg *.pngdonew=image-$count.${img##*.}mv "$img" "$new" 2> /dev/nullif [ $? -eq 0 ]thenecho "Renameing $img to $new"let count

shell中的各种括号的使用方法_linux shell

在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string},${var:=string},${var:?string} 5.$((exp)) 6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern) 现在分述如下: 1.Shell中变量的原形:${var}大家常见的变量形式都是$var

Shell脚本中获取进程ID的方法_linux shell

提问: 我想要知道运行中脚本子shell的进程id.我该如何在shell脚本中得到PID. 当我在执行shell脚本时,它会启动一个叫子shell的进程.作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为"批处理进程"). 在某些情况下,你也许想要知道运行中的子shell的PID.这个PID信息可以在不同的情况下使用.比如,你可以使用shell脚本的PID在/tmp下创建一个唯一的临时文件.有时侯脚本需要检测所有运行的进程,它可以从进程列表中排除自身

使用Bash Shell获取文件名和目录名的简单方法_linux shell

前言还是今天再写一个自动化打包脚本,用到了从路径名中获取最后的文件名.这里记录一下实现过程.当然,最后我也会给出官方的做法.(ps:很囧,实现完了才发现原来Bash Shell有现成的函数) 获取文件名假设给定的路径名为: /tmp/csdn/zhengyi/test/zhengyi.txt awk解法用"/"做分隔符,然后打印出最后的那一部分.实现代码如下: resFile=`echo /tmp/csdn/zhengyi/test/adb.log | awk -F "/&q

Shell逐行读取文件的4种方法_linux shell

在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法.为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率. 方法1:while循环中执行效率最高,最常用的方法. 复制代码 代码如下: function while_read_LINE_bottm(){ While read LINE do echo $LINE done  < $FILENAME } 注释:我习惯把这种方式叫做read釜底抽薪,因为这种方

Shell脚本判断IP地址是否合法的方法_linux shell

使用shell校验IP地址合法性 使用方法: 复制代码 代码如下: [root@yang python]# bash check_ip.sh IP地址 执行结果:返回值0校验合法,非0不合法.shell代码: 复制代码 代码如下: [root@yang python]# vi check_ip.sh #!/usr/bin/shCheckIPAddr(){echo $1|grep "^[0-9]\{1,3\}\.\([0-9]\{1,3\}\.\)\{2\}[0-9]\{1,3\}$"

Shell处理带空格的文件名的方法_linux shell

现在很多人命名的时候都喜欢用空格,例如"An Introduction.doc".但是这种命名方式给Linux命令行工具和Shell带来了困扰,因为大多数命令中,都是默认以空格做为值与值之间的分隔符,而不是做为文件名的一部分. 看下面的脚本,我们可以了解的更清楚: 执行的结果如下: 实际上,当前目录的文件只有两个: 对于简单的文件名,如上例中,我们也可以通过 for i in *doc 这样简单的方法来获得文件列表.但是对于复杂的环境,如下图,我们如何获得这些列表呢? 有一个办法,通过

Bash Shell 注释多行的几种方法_linux shell

1.最简单方法 复制代码 代码如下: :<<BLOCK ....注释内容 BLOCK 把输入重定义到前面的命令,但是 : 是空命令,所以就相当于注释了. 如果注释中有反引号的命令就会报错,反引号部分不会被注释掉,例如 var=`ls -l` 就不会被注释掉. 2.解决注释中有反引号的问题 A.方法一 复制代码 代码如下: :<<BLOCK' ....注释内容 'BLOCK B.方法二 复制代码 代码如下: :<<'BLOCK ....注释内容 BLOCK' C.方法三

Python多线程及多线程应用实例:使用多线程批量修改主机名

python实现多线程 python中关于多线程的操作可以使用thread和threading模块来实现,其中thread模块在Py3中已经改名为_thread,不再推荐使用.而threading模块是在thread之上进行了封装,也是推荐使用的多线程模块,本文主要基于threading模块进行介绍.在某些版本中thread模块可能不存在,要使用dump_threading来代替threading模块. 线程创建 threading模块中每个线程都是一个Thread对象,创建一个线程有两种方式,