1.4.9 linux和高并发-shell编程-shell分发脚本

本文介绍了如何在CentOS7环境下,利用bash脚本结合rsync工具进行文件和目录的远程同步。内容包括basename和dirname命令的使用,Shell数组操作,以及rsync的-v和-a选项。提供了详细的脚本源码示例,演示了如何实现对多个节点的文件分发,并给出了测试使用的方法。

目录

1.前置准备

2.简单了解

3.脚本源码

4.测试使用


1.前置准备

CentOS7、jdk1.8

安装rsync:yum install rsync -y   (远程分发)

2.简单了解

  • basename:会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来

  • dirname(父级目录):从给定的包含绝对路径的文件名中去除文件名(非目录部分),然后返回剩下的路径(目录的部分)

  • Shell数组用括号来表示,元素用空格符号分割,Shell中使用@ 或 * 可以获取数组中的所有元素

  • rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能

    -v, --verbose 详细模式输出
    -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

3.脚本源码

等同于:rsync -av /home/hello.txt root@node02:/home

#!/bin/bash
# 传送一个文件或者一个文件夹
USAGE="使用方法:sh distribution.sh /home/xiaokangxxs.txt or sh distribution.sh /opt/software/hadoop-2.7.7"
# 如果输入参数不等于1,将使用方法打印
if [ $# -ne 1 ];then
        echo $USAGE
        exit 1
fi

#获取需要分发的文件名或者目录名
FDNAME=$(basename $1)
#获取需要分发的文件或目录的上级目录
PDIR=$(cd -P $(dirname $1);pwd)
#获取当前使用系统的用户名
USER=$(whoami)
#需要分发到的节点
NODES=("h2node02" "h2node03")
#循环分发
for NODE in ${NODES[*]};do
        echo "--------分发至$NODE--------"
        #如果目标节点的父级目录不存在,则创建出来
        ssh $NODE "
                if [ -d $PDIR ];then
                        . /etc/profile
                else
                        mkdir $PDIR     
                fi"
        rsync -av $PDIR/$FDNAME $USER@$NODE:$PDIR
done

4.测试使用

修改脚本权限:chmod 777 distribution.sh

  • 方式一

 ./distribution.sh zk.sh

  • 方式二

 sh distribution.sh zk.sh 

  • 方式三

# 1.将shell脚本所在目录配置为环境变量(/etc/profile),记得source生效
export SHELL_HOME=/root/bin
export PATH=${JAVA_HOME}/bin:${SHELL_HOME}/:$PATH

source /etc/profile  生效变量
# 2.在任意目录都可以使用自己编写的shell脚本
distribution.sh ~/bigdata_bin/zk.sh 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值