写过的shell脚本

1 集群分发脚本xsync

#!/bin/bash
#1. 判断传入参数的总个数
if [ $# -lt 1 ]
  exit;
fi

#2. 遍历集群所有机器,for循环
for host in hadoop102 hadoop103 hadoop104  #执行第一次host是hadoop102;执行第二次host是hadoop103;执行第三次host是hadoop104
**do**
  echo ====================  $host  ====================  #展示在哪个机器上操作
  #3. 遍历所有目录/文件,挨个发送。 下面是个内循环
  for file in $@  #这里是一个内循环。 循环发多个参数、文件   
  do
    #4. 判断文件是否存在 常用判断条件
    if [ -e $file ] #取file这个变量的值,存在走then逻辑,不存在走else逻辑
    then
      #5. 获取父目录。”;”分号说明一行两个命令。从左往右依次执行。从内往外看
      pdir=$(cd -P $(**dirname** $file); pwd) 
      #6. 获取当前文件的名称
      fname=$(basename $file)
			#7.远程发送
      ssh $host "mkdir -p $pdir" #远程登录,进入到$host里面,执行命令。不管有没有这个$pdir这个目录,都创建出来。 -p保证了不会报错
      **rsync** -av $pdir/$fname $host:$pdir     #假如对方机器没有文件目录,给创造出来再传过去,同时避免对方有文件目录报错的情况。  rsyc这个是底层的核心命令 
    else
      echo $file does not exists!  #展示出来,文件不存在
    fi
  done
**done #这个是最外层的do-done**
pdir=$(cd -P $(dirname $file); pwd)  

解释:
cd -P	跳转到、进入到实际物理路径,而非快捷方式路径/软连接。linux命令
; 分号说明一行有两个命令。先指向cd - P,然后在执行pwd,获取当前文件的父路径
保证逻辑的严谨性
假如hadoop102上的/aaa/a.txt 发送给 hadoop103,但是hadoop103压根就没有/aaa目录,给103先创建目录,然后在把文件发过去

@ ( 功 能 描 述 : 这 个 变 量 也 代 表 命 令 行 中 所 有 的 参 数 , 不 过 @ (功能描述:这个变量也代表命令行中所有的参数,不过 @@把每个参数区分对待)


dirname

1)基本语法

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

2)案例实操

获取banzhang.txt文件的路径 – 就是取出父目录。如果是相对路径,展示的就是一个点.

[atguigu@hadoop101 ~]$ dirname /home/atguigu/banzhang.txt
/home/atguigu


basename

1)基本语法

basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。

选项:

suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

2)案例实操

截取该/home/atguigu/banzhang.txt路径的文件名称

[atguigu@hadoop101 datas]$ basename /home/atguigu/banzhang.txt

banzhang.txt

[atguigu@hadoop101 datas]$ basename /home/atguigu/banzhang.txt .txt

banzhang


mkdir -p 创建多层目录,要创建的目录即使存在也不会保存


rsync远程同步工具

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

(1)基本语法

rsync -av p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost: p d i r / pdir/ pdir/fname

命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称

选项参数说明

Untitled

(2)案例实操

把hadoop102机器上的/opt/software目录同步到hadoop103服务器的/opt/software目录下

[atguigu@hadoop102 opt]$ rsync -av /opt/software/* atguigu@hadoop103:/opt/software


2 jpsall脚本 查看所有进程,并过滤掉jps进程

#!/bin/bash
for host in hadoop102 hadoop103 hadoop104 # for循环
do
        echo =============== $host ===============
        ssh $host jps $@ | grep -v Jps   # 远程登录相应机器,执行jps命令。加上$@是保证,输入jpsall时,后面能够传入参数,不加的话,jpsall后面加上任何参数是无效的。
done

grep 过滤查找及“|”管道符

管道符,“|”,表示将前一个命令的处理结果输出传递给后面的命令处理。类似sql中查询个虚表出来,然后通过where来进行过滤操作。

-v xx 输出除xx之外的所有行


jps 是java自带的查看进程的命令。jps -l 后面跟个参数l,能够查看各个进程的的全称。

3 hadoop机器的群起群停脚本myhadoop.sh

#!/bin/bash
if [ $# -lt 1 ] # -lt 小于(less than)
then
    echo "No Args Input..."
    exit ;
fi

case $1 in  #流程控制,case语句 关键词:确认过眼神,你是对的人  1.case语句为多重匹配语句 2.如果匹配成功,执行相匹配的命令
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh" #远程登录hadoop102,执行命令,启动hdfs
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;; #两个分号代表命令结束
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)  #default,不满足以上模式,默认执行*)下面的语句
    echo "Input Args Error..."
;;
esac  #esac表示case语句结束

4 zk.sh群起脚本

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit 
fi

case $1 in  # 目前这个脚本后面的第一个参数
"start")
    for i in hadoop102 hadoop103 hadoop104
    do
        echo "=====================  $i  ======================="
        ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh start"  #远程登录,到相应目录下执行命令
    done
;;
"stop")
    for i in hadoop102 hadoop103 hadoop104
    do
        echo "=====================  $i  ======================="
        ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh stop"
    done
;;
"status")
    for i in hadoop102 hadoop103 hadoop104
    do
        echo "=====================  $i  ======================="
        ssh $i "/opt/module/zookeeper-3.5.7/bin/zkServer.sh status"
    done
;;
*)
    echo "Input Args Error..."
;;
esac

最后我似乎应该把常用的shell语法写出来,以后经常看看

集群启动停止脚本(Hadoop、 Flume、 Kafka、 Zookeeper)

5 kafka.sh 群起脚本

#!/bin/bash
if [ $# -lt 1 ]
then 
  echo "Input Args Error....."
  exit
fi

for i in hadoop102 hadoop103 hadoop104
do

case $1 in
start)
  echo "==================START $i KAFKA==================="
  ssh $i "/opt/module/kafka_2.11-2.4.1/bin/kafka-server-start.sh -daemon /opt/module/kafka_2.11-2.4.1/config/server.properties"   #使用的都是绝对路径,避免错误的发生
;;
stop)
  echo "==================STOP $i KAFKA==================="
  ssh $i "/opt/module/kafka_2.11-2.4.1/bin/kafka-server-stop.sh stop"
;;

*)
 echo "Input Args Error....."
 exit
;;  
esac

done

不同的代码实现,可以参考下

在这里插入图片描述

基本语法

for 变量 in 值1 值2 值3… 
do 
    程序 
done

6 Shell 中单引号和双引号区别:

1)在/home/atguigu/bin 创建一个 test.sh 文件
[atguigu@hadoop102 bin]$ vim test.sh

在文件中添加如下内容
#!/bin/bash
do_date=$1
echo '$do_date'
echo "$do_date"
echo "'$do_date'"
echo '"$do_date"'
echo `date`

2)查看执行结果
[atguigu@hadoop102 bin]$ test.sh 2019-02-10
$do_date
2019-02-10
'2019-02-10'
"$do_date"
2019 年 05 月 02 日 星期四 21:02:08 CST

3) 总结:
(1)单引号不取变量值
(2)**双引号取变量值**
(3)反引号`,执行引号中命令
(4)双引号内部嵌套单引号,取出变量值
(5)单引号内部嵌套双引号,不取出变量值

7. 数据仓库,用户业务数据采集

#!/bin/bash
if [ $# -lt 1 ]
then
  echo "Usage: f2.sh  {start|stop}"
  exit
fi
case $1 in
start)
    echo "==================== START hadoop104 F2 ===================="
    ssh hadoop104 "**nohup** /opt/module/flume-1.9.0/bin/flume-ng agent -c /opt/module/flume-1.9.0/conf -f /opt/module/flume-1.9.0/gmalljob/kafka-hdfs.conf -n a1 -Dflume.root.logger=INFO,console >/opt/module/flume-1.9.0/logs/flume.log 2>&1 **&**"

;;

stop) 
    echo "==================== STOP hadoop104 F2 ===================="
     ssh hadoop104 "ps -ef | grep kafka-hdfs.conf | grep -v grep | awk '{print \$2}' | xargs -n1 kill -9"
     # ps -ef | awk '/taildir-kafka.conf/ && !/awk/{print $2}' | xargs -n1 kill -9
;;
*)
  echo "Usage: f2.sh  {start|stop}"
  exit
;;
esac
  1. nohup 命令 hub打断,nohup不打断程序的执行。关闭shell窗口的时候,不打断之前在这个窗口执行的命令。但是该xhell窗口中依然会阻塞。

  2. & 命令加在最后 把程序的执行推到后台,在后台执行。就是能够保证我能够在该窗口下继续执行其他的命令。

  3. 标准输出,重定向。>/opt/module/flume-1.9.0/logs/flume.log

  4. /opt/module/flume-1.9.0/logs/flume.log 2>&1,就是把标准错误信息(2)输出到标准正确输出(1)中。

  5. ps -ef ps -ef | grep xxx (功能描述:可以查看子父进程之间的关系)

    ps -ef显示信息说明

    UID:用户ID

    PID:进程ID

    PPID:父进程ID

    C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高

    STIME:进程启动的时间

    TTY:完整的终端名称

    TIME:CPU时间

    CMD:启动进程所用的命令和参数

  6. awk 一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

    前面是正则匹配规则,后面{}是我要做的事。举例:

    awk -F : ‘/^root/{print $1","$7}’ passwd root,/bin/bash 以:为分割符,搜索文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割

  7. xargs命令的作用,是将标准输入转为命令行参数。

$ echo "one two three" | xargs mkdir
上面的代码等同于mkdir one two three。如果不加xargs就会报错,提示mkdir缺少操作参数。

-n 参数 有时用户会在同一行输入多项    指定每次将多少项,作为命令行参数。    
 
  1. \是转义字符
#!/bin/bash
if [ $# -lt 1 ]
then
  echo "Usage: f1.sh  {start|stop}"
  exit
fi

case $1 in
start)
  for i in hadoop102 hadoop103 
  do 
    echo "==================== START $i F1 ===================="
    ssh $i "nohup /opt/module/flume-1.9.0/bin/flume-ng agent -c /opt/module/flume-1.9.0/conf -f /opt/module/flume-1.9.0/gmalljob/taildir-kafka.conf -n a1 -Dflume.root.logger=INFO,console >/opt/module/flume-1.9.0/logs/flume.log 2>&1 &"
  done
;;

stop)
   for i in hadoop102 hadoop103 
   do 
    echo "==================== STOP $i F1 ===================="
     ssh $i "ps -ef | grep taildir-kafka.conf | grep -v grep | awk '{print \$2}' |xargs -n1 kill -9"
     # ps -ef | awk '/taildir-kafka.conf/ && !/awk/{print $2}' |xargs -n1 kill -9
   done
;;
*)
  echo "Usage: f1.sh  {start|stop}"
  exit
;;
esac

8. 业务数据导入HDFS mysql - sqoop - hdfs

#! /bin/bash

sqoop=/opt/module/sqoop/bin/sqoop

if [ -n "$2" ] ;then
    do_date=$2
else
    do_date=`date -d '-1 day' +%F`
fi

import_data(){
$sqoop import \
--connect jdbc:mysql://hadoop102:3306/gmall \
--username root \
--password 123456 \
--target-dir /origin_data/gmall/db/$1/$do_date \
--delete-target-dir \
--query "$2 and  \$CONDITIONS" \
--num-mappers 1 \
--fields-terminated-by '\t' \
--compress \
--compression-codec lzop \
--null-string '\\N' \
--null-non-string '\\N'

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /origin_data/gmall/db/$1/$do_date
}

import_order_info(){
  import_data order_info "select
                            id, 
                            final_total_amount, 
                            order_status, 
                            user_id, 
                            out_trade_no, 
                            create_time, 
                            operate_time,
                            province_id,
                            benefit_reduce_amount,
                            original_total_amount,
                            feight_fee      
                        from order_info
                        where (date_format(create_time,'%Y-%m-%d')='$do_date' 
                        or date_format(operate_time,'%Y-%m-%d')='$do_date')"
}

import_coupon_use(){
  import_data coupon_use "select
                          id,
                          coupon_id,
                          user_id,
                          order_id,
                          coupon_status,
                          get_time,
                          using_time,
                          used_time
                        from coupon_use
                        where (date_format(get_time,'%Y-%m-%d')='$do_date'
                        or date_format(using_time,'%Y-%m-%d')='$do_date'
                        or date_format(used_time,'%Y-%m-%d')='$do_date')"
}

import_order_status_log(){
  import_data order_status_log "select
                                  id,
                                  order_id,
                                  order_status,
                                  operate_time
                                from order_status_log
                                where date_format(operate_time,'%Y-%m-%d')='$do_date'"
}

import_activity_order(){
  import_data activity_order "select
                                id,
                                activity_id,
                                order_id,
                                create_time
                              from activity_order
                              where date_format(create_time,'%Y-%m-%d')='$do_date'"
}

import_user_info(){
  import_data "user_info" "select 
                            id,
                            name,
                            birthday,
                            gender,
                            email,
                            user_level, 
                            create_time,
                            operate_time
                          from user_info 
                          where (DATE_FORMAT(create_time,'%Y-%m-%d')='$do_date' 
                          or DATE_FORMAT(operate_time,'%Y-%m-%d')='$do_date')"
}

import_order_detail(){
  import_data order_detail "select 
                              od.id,
                              order_id, 
                              user_id, 
                              sku_id,
                              sku_name,
                              order_price,
                              sku_num, 
                              od.create_time,
                              source_type,
                              source_id  
                            from order_detail od
                            join order_info oi
                            on od.order_id=oi.id
                            where DATE_FORMAT(od.create_time,'%Y-%m-%d')='$do_date'"
}

import_payment_info(){
  import_data "payment_info"  "select 
                                id,  
                                out_trade_no, 
                                order_id, 
                                user_id, 
                                alipay_trade_no, 
                                total_amount,  
                                subject, 
                                payment_type, 
                                payment_time 
                              from payment_info 
                              where DATE_FORMAT(payment_time,'%Y-%m-%d')='$do_date'"
}

import_comment_info(){
  import_data comment_info "select
                              id,
                              user_id,
                              sku_id,
                              spu_id,
                              order_id,
                              appraise,
                              comment_txt,
                              create_time
                            from comment_info
                            where date_format(create_time,'%Y-%m-%d')='$do_date'"
}

import_order_refund_info(){
  import_data order_refund_info "select
                                id,
                                user_id,
                                order_id,
                                sku_id,
                                refund_type,
                                refund_num,
                                refund_amount,
                                refund_reason_type,
                                create_time
                              from order_refund_info
                              where date_format(create_time,'%Y-%m-%d')='$do_date'"
}

import_sku_info(){
  import_data sku_info "select 
                          id,
                          spu_id,
                          price,
                          sku_name,
                          sku_desc,
                          weight,
                          tm_id,
                          category3_id,
                          create_time
                        from sku_info where 1=1"
}

import_base_category1(){
  import_data "base_category1" "select 
                                  id,
                                  name 
                                from base_category1 where 1=1"
}

import_base_category2(){
  import_data "base_category2" "select
                                  id,
                                  name,
                                  category1_id 
                                from base_category2 where 1=1"
}

import_base_category3(){
  import_data "base_category3" "select
                                  id,
                                  name,
                                  category2_id
                                from base_category3 where 1=1"
}

import_base_province(){
  import_data base_province "select
                              id,
                              name,
                              region_id,
                              area_code,
                              iso_code
                            from base_province
                            where 1=1"
}

import_base_region(){
  import_data base_region "select
                              id,
                              region_name
                            from base_region
                            where 1=1"
}

import_base_trademark(){
  import_data base_trademark "select
                                tm_id,
                                tm_name
                              from base_trademark
                              where 1=1"
}

import_spu_info(){
  import_data spu_info "select
                            id,
                            spu_name,
                            category3_id,
                            tm_id
                          from spu_info
                          where 1=1"
}

import_favor_info(){
  import_data favor_info "select
                          id,
                          user_id,
                          sku_id,
                          spu_id,
                          is_cancel,
                          create_time,
                          cancel_time
                        from favor_info
                        where 1=1"
}

import_cart_info(){
  import_data cart_info "select
                        id,
                        user_id,
                        sku_id,
                        cart_price,
                        sku_num,
                        sku_name,
                        create_time,
                        operate_time,
                        is_ordered,
                        order_time,
                        source_type,
                        source_id
                      from cart_info
                      where 1=1"
}

import_coupon_info(){
  import_data coupon_info "select
                          id,
                          coupon_name,
                          coupon_type,
                          condition_amount,
                          condition_num,
                          activity_id,
                          benefit_amount,
                          benefit_discount,
                          create_time,
                          range_type,
                          spu_id,
                          tm_id,
                          category3_id,
                          limit_num,
                          operate_time,
                          expire_time
                        from coupon_info
                        where 1=1"
}

import_activity_info(){
  import_data activity_info "select
                              id,
                              activity_name,
                              activity_type,
                              start_time,
                              end_time,
                              create_time
                            from activity_info
                            where 1=1"
}

import_activity_rule(){
    import_data activity_rule "select
                                    id,
                                    activity_id,
                                    condition_amount,
                                    condition_num,
                                    benefit_amount,
                                    benefit_discount,
                                    benefit_level
                                from activity_rule
                                where 1=1"
}

import_base_dic(){
    import_data base_dic "select
                            dic_code,
                            dic_name,
                            parent_code,
                            create_time,
                            operate_time
                          from base_dic
                          where 1=1"
}

case $1 in
  "order_info")
     import_order_info
;;
  "base_category1")
     import_base_category1
;;
  "base_category2")
     import_base_category2
;;
  "base_category3")
     import_base_category3
;;
  "order_detail")
     import_order_detail
;;
  "sku_info")
     import_sku_info
;;
  "user_info")
     import_user_info
;;
  "payment_info")
     import_payment_info
;;
  "base_province")
     import_base_province
;;
  "base_region")
     import_base_region
;;
  "base_trademark")
     import_base_trademark
;;
  "activity_info")
      import_activity_info
;;
  "activity_order")
      import_activity_order
;;
  "cart_info")
      import_cart_info
;;
  "comment_info")
      import_comment_info
;;
  "coupon_info")
      import_coupon_info
;;
  "coupon_use")
      import_coupon_use
;;
  "favor_info")
      import_favor_info
;;
  "order_refund_info")
      import_order_refund_info
;;
  "order_status_log")
      import_order_status_log
;;
  "spu_info")
      import_spu_info
;;
  "activity_rule")
      import_activity_rule
;;
  "base_dic")
      import_base_dic
;;

"first")
   import_base_category1
   import_base_category2
   import_base_category3
   import_order_info
   import_order_detail
   import_sku_info
   import_user_info
   import_payment_info
   import_base_province
   import_base_region
   import_base_trademark
   import_activity_info
   import_activity_order
   import_cart_info
   import_comment_info
   import_coupon_use
   import_coupon_info
   import_favor_info
   import_order_refund_info
   import_order_status_log
   import_spu_info
   import_activity_rule
   import_base_dic
;;
"all")
   import_base_category1
   import_base_category2
   import_base_category3
   import_order_info
   import_order_detail
   import_sku_info
   import_user_info
   import_payment_info
   import_base_trademark
   import_activity_info
   import_activity_order
   import_cart_info
   import_comment_info
   import_coupon_use
   import_coupon_info
   import_favor_info
   import_order_refund_info
   import_order_status_log
   import_spu_info
   import_activity_rule
   import_base_dic
;;
esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值