Shell编程实践之批量安装JDK
实验环境
只有两台机子,一台虚拟机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表示传入函数的第一个参数:服务器ip地址
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- $\r;exp_continue;} #服务器登录密码
eof {exit ;}
}";
}
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..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 > .txt
a
b
c
^C
[root@centos01 tmp]#
3.可以用另外一个输入流(<或<<)来对接到这个输入流上:多行的输入需要一个开始和结束标识:
[root@centos01 tmp]# cat > .txt <<MARK
> hello
> how are you?
> MARK
[root@centos01 tmp]# cat .txt
hello
how are you?
[root@centos01 tmp]#
boot.sh
#!/bin/bash SERVERS="node-3.itcast.cn node-4.itcast.cn"
PASSWORD=
BASE_SERVER=172.16.203.100 auto_ssh_copy_id() {
expect -c "set timeout -1;
spawn ssh-copy-id $;
expect {
*(yes/no)* {send -- yes\r;exp_continue;}
*assword:* {send -- $\r;exp_continue;}
eof {exit ;}
}";
} 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..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. root root 10月 : cgi-bin
drwxr-xr-x. root root 12月 : error
drwxr-xr-x. root root 10月 : html
drwxr-xr-x. root root 12月 : icons
[root@demo www]# cd html/
[root@demo html]# mkdir soft
[root@demo html]# ll
drwxr-xr-x. root root 12月 : soft
sftp> put E:/BaiduNetdiskDownload/jdk-7u80-linux-x64.tar.gz
[root@demo ~]# mv jdk-7u80-linux-x64.tar.gz /var/www/html/soft/
Shell编程实践之批量安装JDK的更多相关文章
- centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课
centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/ind ...
- centos环境自动化批量安装jdk软件脚本
自动化安装jdk软件部署脚本 准备工作: 1.在执行脚本的服务器上生成免密码公钥: 安装expect命令 yum install -y expect ssh-keygen 三次回车 2.将jdk-7u ...
- [读书笔记]Linux命令行与shell编程读书笔记04 安装软件,编辑器注意事项
1. debian以及redhat两种主流的linux发行版用的包管理工具 debian的包管理工具是 dpkg 再现安装的是 apt apt的工具主要有 apt-get apt-cache apti ...
- 初识shell编程
1.shell编程之为什么学.怎么学 为什么学shell编程 Linux系统批量管理 提升工作效率,减少重复工作 学好shell编程所需要的基础知识 熟悉使用vim编辑器 熟悉SSH终端 熟练掌握Li ...
- 一、Vim编辑器 二、用户和组管理 三、软件的安装(jdk,mysql) 四、Shell编程
一.Vim编辑器的使用 1. vim编辑器的运行模式 编辑模式:等待用户编辑命令的输入 插入模式:编辑文本内容 命令模式:执行命令 2. 使用 :vim 文件名 3. 查看当前vim编辑器介绍:vim ...
- centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobackupex/Xtrabackup 第四十节课
centos shell编程6一些工作中实践脚本 nagios监控脚本 自定义zabbix脚本 mysql备份脚本 zabbix错误日志 直接送给bc做计算 gzip innobacku ...
- 暑假第四周总结(HDFS编程实践,安装HBASE)
本周根据书上以及教程的提示,对HDFS进行了编程实践,将教程所给的代码(判断文件是否存在,创建文件,读取文件)进行了应用,根据视频的讲解,对一些简单的语句有了一定的了解,但还是比较生疏.另外还根据提示 ...
- Linux自动安装JDK的shell脚本
Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在 ...
- linux源码安装mysql,shell编程学习,ubuntu
一.mysql安装 以源码安装的方式编译和安装Mysql 5.6. 1.卸载旧版本 rpm -qa | grep mysql 检查是否有旧版本 查询结果:mysql-libs-5.1.73-7.el6 ...
随机推荐
- Java--集合(一)
一.前序 前几篇文章我结合数据结构说了一些常用的集合,但是我感觉那样可能不系统,于是乎想着重写,按照由整体到细节的方式去写,这样才能更好的把握集合,废话不多说开始吧: 二.集合框架 ...
- Java设计模式相关面试
1.接口是什么?为什么要使用接口而不是直接使用具体类? 接口用于定义 API.它定义了类必须得遵循的规则.同时,它提供了一种抽象,因为客户端只使用接口,这样可以有多重实现,如 List 接口,你可以使 ...
- 【转】使用PowerDesigner的建模创建升级管理数据库
使用PowerDesigner的建模创建升级管理数据库 PowerDesigner是一种著名的CASE建摸工具,最开始为数据库建模设计,即物理模型(Physical Data Model)用于生成数据 ...
- 预加载(图片,css ,js)
图片预加载 new Image().src = 'http://img1.t.sinajs.cn/t35/skin/skin_008/skin.css'; //新浪(4) 非ie下预加载(js,css ...
- C++语言中的类型(二)
--分门别类是简化事物最有效的方式. C++语言的强大能力的体现在对程序员自定义数据类型的支持.C++语言主要的一个设计目标就是让程序员自定义的数据类型像内置类型一样好用. 一.自定义数据类型 数据类 ...
- python 批量修改数字类的文件名
今天碰到一个小问题,下载音频的时候,文件名的名字变成了数字,排序呢,是按照数字的大小往下排的. 想自己给它们重新起名字,但是又不打乱音频的顺序.好吧,那就自己写写代码吧. 思路就是遍历音频文件的数字文 ...
- Pyhton编程(五)之基本数据类型-列表、元组、字典
一:列表(list) 列表是由一系列按特定顺序排列的元素组成,可以创建包含字母表中的所有字母.数字.或中文的列表,也可以将任何东西加入列表中,其中的元素之间可以没有任何关系. 在Python中,用方括 ...
- docker-compose v3版本命令详解参考
参考和指南 这些主题描述了Compose文件格式的第3版.这是最新的版本. Compose and Docker 兼容性矩阵 有几个版本的Compose文件格式 - 1,2,2.x和3.x.下表是快速 ...
- 【原创】python爬虫获取网站数据并存入本地数据库
#coding=utf-8 import urllib import re import MySQLdb dbnumber = MySQLdb.connect('localhost', 'root', ...
- http高可用+负载均衡 corosync + pacemaker + pcs
http高可用+负载均衡 corosync + pacemaker + pcsopenstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861. ...