Shell编程实践之批量安装JDK

news/2024/7/7 21:10:01

实验环境

 只有两台机子,一台虚拟机192.168.1.200,另外一台物理机192.168.1.201。

目标

执行一个shell脚本,给这两台机子自动安装jdk。

 

实验步骤

1.自动设置ssh免密码登录

执行脚本之后,遍历服务器ip,对每一个服务进行如下操作

2.每台服务器自动从数据服务器(http服务器,提供jdk安装包下载)上下载jdk

3.下载jdk后进行解压,并设置环境遍历

 

关键点

1.设置ssh免密码登录时需要输入密码,这里使用expect来自动输入密码:

复制代码
auto_ssh_copy_id() {
    expect -c "set timeout -1;
        spawn ssh-copy-id $1;  #$1表示传入函数的第一个参数:服务器ip地址
        expect {
            *(yes/no)* {send -- yes\r;exp_continue;}  
            *assword:* {send -- $2\r;exp_continue;} #服务器登录密码
            eof        {exit 0;}
        }";
}
复制代码

 

2.登录到服务器上后自动执行脚本:

复制代码
for SERVER in $SERVERS
do
    scp install.sh root@$SERVER:/root
    ssh root@$SERVER /root/install.sh
done
复制代码

 

3.追加内容到某一个文件

cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.7.0_45
export PATH=\$PATH:\$JAVA_HOME/bin
EOF

 

> & >>的区别

1.当文件不存在是> 和>>都可以自动生成文件;

2.如果文件存在,>表示覆盖,>>则是追加

这里使用了重定向来将内容追加打了/etc/profile中。

cat >> /etc/profile 是一个命令,是说要把cat得到的内容追加到后面的文件中,那么cat的是什么内容呢?
1.可以是某个文件,可以在后面指定 例如:cat >> /etc/profile/ a.txt
2.如果后面不指定文件,那cat的输入流默认的就是键盘,可以用ctrl+c或ctrl+d来结束输入:
复制代码
[root@centos01 tmp]# cat > 1.txt
a
b
c
^C
[root@centos01 tmp]# 
复制代码

 

  3.可以用另外一个输入流(<或<<)来对接到这个输入流上:多行的输入需要一个开始和结束标识:

复制代码
[root@centos01 tmp]# cat > 1.txt <<MARK
> hello
> how are you?
> MARK
[root@centos01 tmp]# cat 1.txt
hello
how are you?
[root@centos01 tmp]# 
复制代码

 

boot.sh

复制代码
#!/bin/bash

SERVERS="node-3.itcast.cn node-4.itcast.cn"
PASSWORD=123456
BASE_SERVER=172.16.203.100

auto_ssh_copy_id() {
    expect -c "set timeout -1;
        spawn ssh-copy-id $1;
        expect {
            *(yes/no)* {send -- yes\r;exp_continue;}
            *assword:* {send -- $2\r;exp_continue;}
            eof        {exit 0;}
        }";
}

ssh_copy_id_to_all() {
    for SERVER in $SERVERS
    do
        auto_ssh_copy_id $SERVER $PASSWORD
    done
}

ssh_copy_id_to_all


for SERVER in $SERVERS
do
    scp install.sh root@$SERVER:/root
    ssh root@$SERVER /root/install.sh
done
复制代码

install.sh

复制代码
#!/bin/bash

BASE_SERVER=172.16.203.100
yum install -y wget
wget $BASE_SERVER/soft/jdk-7u80-linux-x64.tar.gz
tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.7.0_80
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
复制代码

 

 

安装httpd服务

在192.168.1.200上安装httpd,并准备好jdk文件。

yum -y install httpd
复制代码
[root@demo ~]# cd /var/www/
[root@demo www]# ll
drwxr-xr-x. 2 root root 4096 10月 20 00:40 cgi-bin
drwxr-xr-x. 3 root root 4096 12月  4 00:36 error
drwxr-xr-x. 2 root root 4096 10月 20 00:40 html
drwxr-xr-x. 3 root root 4096 12月  4 00:36 icons
[root@demo www]# cd html/
[root@demo html]# mkdir soft
[root@demo html]# ll
drwxr-xr-x. 2 root root 4096 12月  4 00:39 soft
复制代码

 

 

sftp> put E:/BaiduNetdiskDownload/jdk-7u80-linux-x64.tar.gz
[root@demo ~]# mv jdk-7u80-linux-x64.tar.gz /var/www/html/soft/

 


http://www.niftyadmin.cn/n/2822983.html

相关文章

不用写Windows服务实现定时器功能(FluentScheduler )

MacBook Pro 只有四个 USB Type-C 接口是否错了&#xff1f; 一项新技术的诞生总会对已存在的事物造成冲击或影响&#xff0c;如果大家都害怕冲击与影响&#xff0c;那这个世界永远像现在不变就行了&#xff0c;大家都好好的&#xff0c;待在自己的舒适区&#xff0c;社会丝毫…

设备维修管理系统 php,设备维修管理系统V2.0.2

【实例简介】上次上传的版本文件不完整无法安装&#xff0c;现在重新添加上传。【实例截图】【核心代码】设备维修管理系统V2.0修订版└── 设备维修管理系统V2.0修订版├── DATA│ ├── DevWXGL_log.ldf│ ├── DevWXGL.mdf│ └── DevWXGL.sql├── 安装说明…

树莓派centos7.9编译安装cmake .2023-02-18

准备: 以cmake的3.7.2版本为例 切换gcc环境: 树莓派centos7.9(aarch64)安装并切换GCC-7版本. 2023-02-20_mklpo147的博客-CSDN博客 树莓派centos7.9(armv7hl)安装并切换GCC-6版本. 2023-2-18_mklpo147的博客-CSDN博客 yum install -y make 1.下载 wget https://cmake.org/…

NetScaler 官网文档资源导航

NetScaler部署指南&#xff0c;包含微软&#xff0c;思科&#xff0c;Oracle&#xff0c;PaloAlto&#xff0c;AWS等等众多部署指南&#xff0c;不断增加https://www.citrix.com/products/netscaler-adc/resources/deploy.html “怎样做” 指南&#xff0c;各种项目后总结的HOW…

vue-cli 3.x 引入ts下默认配置jssdk 调用 没法直接使用wx

直接在 class中使用 wx 打包的时候报错 找不到微信对象 于是迂回了一下解决了这个问题 在需要使用的 class中申明一下 public Wi: any window;public Wx: any this.Wi.wx; 转载于:https://www.cnblogs.com/lurenjiazrj/p/9717075.html

U3D 动画帧事件问题

测试版本U3D5.4。 1&#xff0c;为一个模型导入外部动画。为动画剪辑attack在某帧添加event&#xff0c;事件为 public void OnAttackEvent(){}&#xff0c;函数体不做任何事情。 结果发现&#xff0c;在动画帧末尾添加事件&#xff0c;播放时两个动画的过渡效果没有了&#xf…

第三章:数据解析-常见的四种对象

直接学习&#xff1a;https://edu.csdn.net/course/play/24756/280698 常见的四种对象&#xff1a; 1、Tag : BeautifulSoup 中所有的标签都是Tag类&#xff0c;并且BeautifulSoup的对象其实本质上也是一个Tag类型。所以其实有些方法比如find&#xff0c;find_all 并不是Beauti…

树莓派centos7.9(armv7hl)安装最新版宝塔linux面板 2023-02-19

1.更新系统 yum update 2.启用 EPEL 软件源 树莓派安装centos7.9(armv7hl)以及宝塔linux面板. 2023-2-16_mklpo147的博客-CSDN博客 4.安装nano 和 wget 等 yum install -y nano make wget postgresql-devel 5.下载,修改,安装 脚本 下载最新版安装脚本 wget -O install.sh ht…