shell

作者: 叫兽吃橙子 | 来源:发表于2019-04-03 10:50 被阅读0次
    1.双重循环
    #!/bin/bash
    cd /data/pyspark/program/auto_report/zhengyuan/test
    begin_date="2019-01-01"
    end_date="2019-02-25"
    while [ $begin_date != $end_date ]
    do
    cat dw.dwd_pcrowd_order_di.init.conf | while read line
        do
        stat_type=`echo ${line} | awk -F" " '{print $1}'`
        echo ${stat_type}
        ptype=`echo ${line} | awk -F" " '{print $2}'`
        echo ${ptype}
        stat_value=`echo ${line} | awk -F" " '{print $3}'`
        echo ${stat_value}
        bdate=`echo ${line} | awk -F" " '{print $4}'`
        echo ${bdate}
        ds=$1
        echo ${ds}
        edate=`date -d "1 days ${ds}" +"%Y-%m-%d"`
        echo ${edate}
        /data/pyspark/program/auto_report/tool/cc_hive -f dwd_online_pcrowd_num_di_his.hql -p "stat_type=${stat_type},ptype=${ptype},stat_value=${stat_value},bdate=${bdate},edate=${edate},ds=${begin_date}"
        done
    begin_date=`date -d "1 day $begin_date" +%Y-%m-%d`
    done
    
    2.循环脚本
    #!/bin/bash
    begin_date="2018-10-01"
    end_date="2019-02-01"
    while [ $begin_date != $end_date ]
    do
    begin_date=`date -d "1 month $begin_date" +%Y-%m-%d`
    echo $begin_date
    done
    
    3.循环脚本
    • 代码内容
    #!/bin/bash
    cd /data/pyspark/program/auto_report/zhengyuan/test
    cat dw.dwd_pcrowd_order_di.init.conf | while read line
    do
        stat_type=`echo ${line} | awk -F" " '{print $1}'`
        echo ${stat_type}
        ptype=`echo ${line} | awk -F" " '{print $2}'`
        echo ${ptype}
        stat_value=`echo ${line} | awk -F" " '{print $3}'`
        echo ${stat_value}
        bdate=`echo ${line} | awk -F" " '{print $4}'`
        echo ${bdate}
        ds=$1
        echo ${ds}
        edate=`date -d "1 days ${ds}" +"%Y-%m-%d"`
        echo ${edate}
        /data/pyspark/program/auto_report/tool/cc_hive -f dwd_pcrowd_order_di_his.hql -p "stat_type=${stat_type},ptype=${ptype},stat_value=${stat_value},bdate=${bdate},edate=${edate},ds=${ds}"
    done
    
    • 文件内容
    all d   "all"   2018-10-01
    all w   "all"   2018-10-01
    all m   "all"   2018-10-01
    l1cat d   l1_id   2018-10-01
    l1cat w   l1_id   2018-10-01
    l1cat m   l1_id   2018-10-01
    
    4.Linux shell中2>&1的含义解释 (全网最全,看完就懂)
    3.删除 /data1/airflow/logs 文件下的文件
    #!/bin/bash
    find /data1/airflow/logs  -mtime +30 -name "*.log"|xargs rm -rf
    find /data1/airflow/logs  -mtime +30 -name "201[0-9]*T*"|xargs rm -rf
    
    find 
    -mtime +30    #30天之前修改过的文件
    -name "*.log"    #正则匹配文件名包含 .log 的文件
    |xargs rm -rf    #文件名传入后,一批一批的删除
    
    4.shell中&&和||的使用方法

    1.只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
    2.如果||左边的命令(命令1)未执行成功,那么就执行||右边的命令(命令2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。

    4.wc的使用
    wc 有四个参数可选,分别是l,c,m,w
    wc -l filename    #报告行数
    wc -c filename    #报告字节数
    wc -m filename    #报告字符数
    wc -w filename    #报告单词数
    ps -ef|grep airflow|grep scheduler|wc -l    #结合 grep 使用
    
    5.awk学习
    kill $(ps -ef | grep "airflow scheduler" | awk '{print $2}')   #手动杀死包含“airflow scheduler”的进程
    
    -F指定分隔符
    awk -F":" '{print $1 $3}'  /etc/passwd                       //$1与$3相连输出,不分隔
    awk -F":" '{print $1,$3}'  /etc/passwd                       //多了一个逗号,$1与$3使用空格分隔
    awk -F":" '{print $1 " " $3}'  /etc/passwd                  //$1与$3之间手动添加空格分隔
    awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd       //自定义输出  
    awk -F: '{print NF}' /etc/passwd                                //显示每行有多少字段
    awk -F: '{print $NF}' /etc/passwd                              //将每行第NF个字段的值打印出来
    
    6.awk 进阶
    begin_date=`date -d "-100 day" +%Y-%m-%d`       #外部参数
    hdfs dfs -ls /user/spark/applicationHistory |awk '$6<"'"$begin_date"'" {print "hdfs dfs -rm "$8}'|/bin/bash     #筛选根据空格分隔的 第六列 小于 begin_date 的值,然后把后面的打印出来,传入第八列的值,最后把打印出来的语句使用bash执行
    
    6.外部传入参数执行hive语句
    • 双引号里面的语句是可以传入参数的
    • 传入参数之后还可以进行拼接 {hdb}.{table}_di
    mdb='kaipao'
    hdb='zhengyuan'
    table='water_friend_rel'
    check_col='create_time'
    ds='2019-04-22'
    hive -e "show columns from ${hdb}.${table}_di" |grep -v 'WARN:' > tmp1.txt
    
    7.IF使用——shell判断空值
    tf=`cat ${mdb}.${table}.timestamp`
    if [ -n "${tf}" ]; then
        echo "时间戳长度文件存在"
        l=${#tf}
    else
        echo "时间戳长度文件不存在,需创建"
        mysql -u datateam -pRJ4f84S4RjfRxRMm -h172.16.8.4 -A ${mdb}  -e "select max(${check_col}) from ${mdb}.${table} where ${check_col} >unix_timestamp(date_sub('${ds}', interval 30 day))" |awk 'NR>1' >${mdb}.${table}.timestamp
        tf=`cat ${mdb}.${table}.timestamp`
        l=${#m1}
    fi
    
    8.IF使用——多条件判断和等号
    if [[ ! -n "$a" && l -eq 13 ]]; then
      echo "全量导入"
      #录入全量导入的代码
    elif [[ -n "$a" && l -eq 13 ]]; then
      echo "增量导入,有表结构,历史有数据,本分区有数据"
    elif [[ ! -n "$a" && l -eq 10 ]]; then
      echo "全量导入"
    elif [[ -n "$a" && l -eq 10 ]]; then
      echo "增量导入,有表结构,历史有数据,本分区有数据"
    else
      echo "其他异常"
    fi
    
    9.ncftpget 从服务器下载
    #登录服务器(默认进入服务器的 /date/ftp 文件夹)
    /usr/local/Cellar/ncftp/3.2.6/bin/ncftpget -u devops -p idongjia@123 172.16.7.103
    
    #下载数据 (cd zy) 进入自己的文件夹
    get 文件名
    默认下载到  /usr/local/Cellar/ncftp/3.2.6/bin/ 也就是 ncftpget 命令默认的文件夹
    

    相关文章

      网友评论

          本文标题:shell

          本文链接:https://www.haomeiwen.com/subject/iljabqtx.html