Shell编程
详见之前写的Linux基础(第四章)Shell编程基础
下面是对之前写的内容的补充
进行加减乘除
echo `expr 1 + 2` #加法
echo `expr 1 - 2` #减法
echo `expr 1 \* 2` #乘法
echo `expr 1 / 2` #除法
注意:
1、用``把式子包起来
2、用expr
声明这是一个计算
3、乘法不要直接用*,要用转义符写成\*
case判断
示例:
#!/bin/bash
echo "输入1到5之间的整数"
read aNum #读取输入的内容,相当于java的Scanner.next()或python的input()
case "$aNum" in
1)
echo "你输入的数字是1"
;;
2)
echo "你输入的数字是2"
;;
3)
echo "你输入的数字是3"
;;
4)
echo "你输入的数字是4"
;;
5)
echo "你输入的数字是5"
;;
*)
echo "识别不了!!!"
;;
esac
case判断的注意事项:
1、每个条件完毕后,需要用两个分号;;
来分隔
2、case判断写完后需要用esac
结尾,类似的有if判断写完后用fi结尾
函数
示例:
#!/bin/bash
function hello() #定义函数
{
echo "hello world"
i=0
for s in $@ #获取输入参数的集合
do
i=`expr $i + 1`
echo "穿入的第${i}个参数是${s}"
done
echo "全部参数是$*"
}
hello $@ #调用函数,如果不加$@或$1、$2之类的位置参数,那么函数就不会接收参数
注意:
1、shell语言调用函数不是函数名加括号
2、调用函数如果要接收位置参数,则需要在函数名后写上要接收哪个位置参数
3台虚拟机同步设置
设置3台虚拟机的网络配置
1、分别关闭3台机器的防火墙
service iptables stop #关闭防火墙
chkconfig iptables off #设置防火墙不随开机启动
2、关闭3台机器的selinux
首先,vim /etc/selinux/config
,然后作如图修改
3、更改3台机器的主机名
输入vim /etc/sysconfig/network
在vi界面作修改,第一台改为HOSTNAME=node01.hadoop.com
,第二台改为HOSTNAME=node02.hadoop.com
,第三台改为HOSTNAME=node03.hadoop.com
4、配置3台机器的ip和主机名映射
输入vim /etc/hosts
3台机器都添加如下内容:
192.168.177.100 node01.hadoop.com node01
192.168.177.110 node02.hadoop.com node02
192.168.177.120 node03.hadoop.com node03
5、分别重启,reboot -h now
设置3台机器的免密登录
1、3台机器分别生成公钥和密钥
输入ssh-keygen -t rsa
,需要连续按3下回车才能完成这个命令
2、将3台机器的公钥和私钥都发送给node01
3台机器都执行ssh-copy-id node01.hadoop.com
3、将node01的密钥管理文件拷贝给node02和node03
在node01上执行如下命令:
scp /root/.ssh/authorized_keys node02:/root/.ssh
scp /root/.ssh/authorized_keys node03:/root/.ssh
4、测试免密登录
比如,在node01测试如下命令:
ssh node02 #登录到node02
exit #退出node02的登录,回到本机
设置3台机器时钟同步
时钟同步有两种方式:一是每台机器都向外网的服务器进行时钟校准;二是以集群中的某台机器的时间为准,集群中其他机器向它同步。
示例,通过定时任务向阿里云服务器进行时钟校准:
crontab -e
#编辑定时任务
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com
通过Shell脚本对3台机器安装jdk
1、3台机器都执行
mkdir -p /export/softwares
mkdir -p /export/servers
2、3台机器都执行cd /export softwares
,然后yum -y install lrzsz
,在完成安装lrzsz后,可以将jdk的tar包直接拖到命令窗口即可以把tar包复制到当前目录了
3、在node01创建脚本install_jdk.sh,脚本内容如下:
#!/bin/bash
tar -zxvf /export/softwares/jdk-8u141-linux-x64.tar.gz -C /export/servers #解压jdk的tar包
cd /export/servers/jdk* #把路径切换到解压后的jdk所在的目录
mypath=$(pwd) #获取jdk所在的目录
echo "export JAVA_HOME=${mypath}" >> /etc/profile #将jdk所在目录写为环境变量JAVA_HOME,并加入到/etc/profile
echo "export PATH=:\$PATH:\$JAVA_HOME/bin" >> /etc/profile #将jdk下的bin目录添加到环境变量PATH
for m in 2 3 #利用for循环,对node02和node03安装jdk和配置环境变量
do
scp -r ${mypath} node0${m}:/export/server #使用scp将node01的jdk解压后的目录复制到node02和node03的用于安装软件的目录下
ssh node0${m} "echo 'export JAVA_HOME=${mypath}' >> /etc/profile; echo 'export PATH=:\$PATH:\$JAVA_HOME/bin' >> /ect/profile" #分别登录到node02和node03,并配置环境变量
done
4、3台机器都执行如下命令,以验证是否jdk安装成功
source /etc/profile #启用profile的更改
$JAVA_HOME #访问环境变量JAVA_HOME
注意事项:
echo "xxx" > filename
,是将"xxx"覆盖写入到某文件,echo "xxx" >> filename
,是将"xxx"追加写入到某文件;
“export PATH=:$PATH:$JAVA_HOME/bin” ,在$PATH
和$JAVA_HOME
前添加转义符,是为了不使用path和java_home这两个变量的值,而是直接得到"$PATH:$JAVA_HOME/bin"这个字符串;
在执行脚本前,一定要对3台机器的/etc/profile进行备份。