Shell实战案例

本文展示了四个Linux shell脚本案例,包括获取上上月月末日期、集群文件分发、Zookeeper集群管理和Kafka集群启动停止。脚本涵盖了日期运算、SSH远程操作和条件判断等实用技巧,对于Linux系统管理和运维工作具有实际指导价值。
摘要由CSDN通过智能技术生成

案例一:获取上上月月末日期

#!/bin/bash
v_curr_rq=`date +%Y%m%d`
v_rq=`date -d "yesterday" +%Y%m%d`
v_lm=`date +%Y%m01`
v_lm_rq=`date -d "${v_lm} last day" +%Y%m%d`
v_llm_rq=`date -d "${v_lm} last month last day" +%Y%m%d`

#当前日期
echo ${v_curr_rq}

#昨天日期
echo ${v_rq}

#本月月初
echo ${v_lm}

#上个月月初
firstday=`date -d "last month" +%Y%m01`
echo $firstday

#上个月月末
echo ${v_lm_rq}

#上上个月月末
echo ${v_llm_rq}

案例二:Linux集群分发脚本xsync

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
# 也可以采用:
# for host in hadoop{10..12};
for host in hadoop10 hadoop11 hadoop12
do
    echo ====================    $host    ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4 判断文件是否存在
        if [ -e $file ]
        then
            #5. 获取父目录
            pdir=$(cd -P $(dirname $file); pwd)
            echo pdir=$pdir
            
            #6. 获取当前文件的名称
            fname=$(basename $file)
            echo fname=$fname
            
            #7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
            ssh $host "mkdir -p $pdir"
            
			#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
            rsync -av $pdir/$fname $USER@$host:$pdir
        else
            echo $file does not exists!
        fi
    done
done

修改脚本 xsync 具有执行权限

[hadoop@hadoop10 bin]$ chmod 777 xsync

调用脚本形式:xsync 文件名称

[hadoop@hadoop10 bin]$ xsync /home/hadoop/bin

注意:如果将xsync放到/home/zxy/bin目录下仍然不能实现全局使用,可以将xsync移动到/usr/local/bin目录下。

案例三:启动、停止、查看(状态)zookeeper集群脚本

#!/bin/bash

NODENAME_ARR=('hadoop10' 'hadoop11' 'hadoop12')

echo '' > zk.log

if [ $# -eq 0 ]; then
  echo -e "请带参数执行脚本.如:\n    zk.sh start \n    zk.sh status \n    zk.sh stop\n"
  exit 1
fi

if [ $1 == 'start' ] ;then
  for nodename in ${NODENAME_ARR[@]}
  do
    echo -n "${nodename} zk正在启动..."
    echo ${nodename} >> zk.log
    ssh $nodename "source /etc/profile;/home/hadoop/apps/zookeeper/bin/zkServer.sh start" >>zk.log 2>&1    
  if [ $? == 0 ];then
      echo "  ${nodename} zk启动成功"
    else
      echo "  ${nodename} zk启动失败"
    fi
 #   sleep 2s
  done
elif [ $1 == 'stop' ] ;then
  for nodename in ${NODENAME_ARR[@]}
  do
    echo -n "${nodename} zk正在关闭..."
    echo ${nodename} >> zk.log
    ssh $nodename "/home/hadoop/apps/zookeeper/bin/zkServer.sh stop" >>zk.log 2>&1
    if [ $? == 0 ];then
      echo "  ${nodename} zk关闭成功"
    else
      echo "  ${nodename} zk关闭失败"
    fi
  done
elif [ $1 == 'status' ] ;then
  for nodename in ${NODENAME_ARR[@]}
  do
    echo -n "${nodename} zk正在查看状态..."
    ssh $nodename ". /etc/profile;/home/hadoop/apps/zookeeper/bin/zkServer.sh status"
  done
fi

案例四:启动kafka集群

#!/bin/bash
if [ $# -eq 0 ]; then
  echo -e "请带参数执行脚本.如:\n    kafka.sh start \n    kafka.sh stop\n"
  exit 1
fi

case $1 in
"start"){
    for i in hadoop10 hadoop11 hadoop12
    do
        ssh $i "source /etc/profile;/home/hadoop/apps/kafka/bin/kafka-server-start.sh -daemon /home/hadoop/apps/kafka/config/server.properties"
        if [ $? == 0 ];then
            echo "  $i启动成功"
        else
            echo "  $i启动失败"
        fi
    done
};;
"stop"){
    for i in hadoop10 hadoop11 hadoop12
    do
        ssh $i "source /etc/profile;/home/hadoop/apps/kafka/bin/kafka-server-stop.sh /home/hadoop/apps/kafka/config/server.properties"
        if [ $? == 0 ];then
            echo "  $i关闭成功"
        else
            echo "  $i关闭失败"
        fi
    done
};;
esac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据翻身

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值