shell脚本:日志切割与上传

author author     2022-07-31     675

关键词:

脚本说明:


日志切割与上传类脚本的功能:脚本自身的运行日志记录与清理、日志切割与打包、ftp上传、传送失败自动重传、断电自动补传、清理超期旧打包等

--------------------

#!/bin/bash
# Cut and upload aclog log
# by colin
# revision on 2016-06-15
########################################
# 功能说明:该脚本运用于上传aclog日志
#
# 使用说明:
#+ ./aclog_backup_and_upload.sh -f /var/log/host/jnxac.log -t tar -h SDQD-TS-JNX-HLS
# 更新说明:
#
########################################
#sleep 60	    #延时60秒运行
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
RUN_LOG=‘/var/log/cron_scripts_run.log‘
[ ! -f ${RUN_LOG} ] && touch ${RUN_LOG}

echoGoodLog(){
    echo -e "33[32m`date +%F" "%T":"%N` $*33[0m" >> ${RUN_LOG}
}

echoBadLog(){
    echo -e "33[31m`date +%F" "%T":"%N` $*33[0m" >> ${RUN_LOG}
}

echoGoodLog "Now, Script: `basename $0` run."
RUNLOG_MAX_NUM=100000
RUNLOG_MAX_DELNUM=5000
SEND_MAX_TIME=6
SEND_WHILE_SLEEP_TIME=30
BACK_SAVE_MAX_DAY=180
LOG_CUT_MIN=60   # 日志文件30分钟切割一次

cleanRunLog(){
    CLEANLOGFILE=${1?"Usage: $FUNCNAME log_file_name"}
    TEMP_WC=`cat ${CLEANLOGFILE} |wc -l`
    [ "${TEMP_WC}" -gt "${RUNLOG_MAX_NUM}" ] && {
        sed -i "1,${RUNLOG_MAX_DELNUM}d" ${CLEANLOGFILE} && echoGoodLog "Clean up the ${CLEANLOGFILE}..."
    }
    echoGoodLog "Script: `basename $0` run done."
    exit
}

##
# 省份数组
#
PROVINCE=(
    sd
    hlj
    sc
)

##
# 脚本帮助提示函数
#
scriptsHelp(){
    echoBadLog "======================================="
    echoGoodLog "Usage parameters:"
    echoGoodLog "./`basename $0` -f/--file /var/log/host/qfgw.log [-t/--tar tar] [-h/--hostname SDQD-TS-CL-WIN]"
    echoGoodLog "Options:"
        echoGoodLog " -f/--file)"
        echoGoodLog "    必须的参数:需要切割与上传的日志文件"
        echoGoodLog " -t/--tar)"
        echoGoodLog "    可选参数:若需打包,使用方法: -t tar "
        echoGoodLog " -h/--hostname)"
        echoGoodLog "    可选参数:若一个站点存放了多个地方的相同类型日志,此时就需要设定每个日志所属站点"
        echoGoodLog "        比如:昌乐的网关日志,没有HLS,日志存储在青岛北,那加参数如下:-h SDQD-TS-CL-WIN"
        echoGoodLog " -c)"
        echoGoodLog "    可选参数:用于检查日志服务器上是否有存储日志的文件夹,没有就创建,需使用except命令,会自动安装"
        echoGoodLog "        注意:日志服务器必须要开放ssh远程登录,或者防火墙需要放行"
        echoGoodLog "        使用方法:./`basename $0` -c   ;-c后面不需要加选项"
    echoGoodLog "Example:"
    echoGoodLog "./`basename $0` -f /var/log/host/qfgw.log -t tar -h SDQD-TS-CL-WIN"
    echoBadLog "======================================="
}

checkParameter(){
    PARAMETER=${1:-null}
    PARAMETER_STATUS=`echo "${PARAMETER}" |grep "^-"|wc -l`
    if [ "${PARAMETER_STATUS}" -eq 1 -o "${PARAMETER}" = "null" ];then
        scriptsHelp
        echoBadLog "参数错误,请重新输入。"
        exit
    fi
}

##
# 判断是否带参数
#
if [ -z "$*" ];then
   scriptsHelp
   exit
else
    ##
    # 脚本传参数,调用相应的函数功能
    #
    while test -n "$1";do
        case "$1" in
            --file|-f)
                shift
                checkParameter $1
                LOG_NAME=$1
                ;;
            --tar|-t)
                shift
                checkParameter $1
                CTAR=$1
                ;;
            --hostname|-h)
                shift
                checkParameter $1
                CHOSTNAME=$1
                ;;
            -c)
                CCHECK_LOG_SERVER_DIR=$1
                ;;
            *)
                echoBadLog "Unknown argument: $1"
                scriptsHelp
                exit
                ;;
        esac
        shift
    done
fi

##
# 需要切割的日志为必须要的参数
#
checkParameter $LOG_NAME
IS_TAR=${CTAR:-notar}
HOSTNAME=${CHOSTNAME:-`hostname`}
TEMP_PRO=`echo ${PROVINCE[@]} |sed "s/ /|/g"`
STATION=`echo ${HOSTNAME} |awk -F- ‘{print $3}‘|tr [A-Z] [a-z]`
STATION_TYPE=`echo ${HOSTNAME} |awk -F- ‘{print $2}‘|tr [A-Z] [a-z]`
STATION_SITE=`echo ${HOSTNAME} |awk -F- ‘{print $1}‘|tr [A-Z] [a-z] |grep -Eo "${TEMP_PRO}"`

#############################
# define the ftp client
LOG_TYPE="aclog"
LOG_TYPEB="aclog"
LCD_DIR="/data/${STATION}_log/${STATION}_${LOG_TYPE}"
# 日志服务器上的保存文件夹特例
#----------------------------
case ${STATION_SITE}${STATION_TYPE} in
    #sdbs) CD_DIR="/${LOG_TYPEB}/${STATION_SITE}/qdjy/${STATION}/";;
    sdbs) CD_DIR="/${LOG_TYPEB}/${STATION_SITE}/qdjy/";;
    *) CD_DIR="/${LOG_TYPEB}/${STATION_SITE}/${STATION}/";;
esac
#############################
# define the ftp server
FTPSERVER=‘IP地址‘
FTPUSER=‘用户名‘
FTPPASSWD=‘密码‘
SSHPORT=‘端口‘
#############################

T=`echo $(date +%k) |sed ‘s/ //g‘`
#LAST_T=`echo $(date -d "1 hour ago" +%k) |sed ‘s/ //g‘`
DAY_TIME=`date +%Y-%m-%d`
LAST_DAY_TIME=`date -d "yesterday" +%Y-%m-%d`
LAST_HOUR_TIME=`date +%Y-%m-%d-%H`
FILENUM=`expr $(date +%M|sed ‘s/^0//g‘) / ${LOG_CUT_MIN}`
DAY_LOG_TAR_NUM="${FILENUM}"
[[ "${FILENUM}" -eq 0 ]] && {
    FILENUM=`expr 60 / ${LOG_CUT_MIN}`
    LAST_HOUR_TIME=`date -d "1 hour ago" +%Y-%m-%d-%H`
}

##
# 为兼容旧版本,当60分钟切割一次时,就和之前旧版本文件名一样咯
#
if [ ${LOG_CUT_MIN} -eq 60 ];then
    LOG_HOUR_NAME="${LOG_TYPE}${LAST_HOUR_TIME}.txt" 
else
    LOG_HOUR_NAME="${LOG_TYPE}${LAST_HOUR_TIME}-${FILENUM}.txt" 
fi

LOG_DAY_NAME="${LOG_TYPE}${LAST_DAY_TIME}.txt" 
case "${IS_TAR}" in
    "tar")
        PUT_LOG_DAY_NAME="${LOG_DAY_NAME%.txt}.tar.gz"
        PUT_LOG_HOUR_NAME="${LOG_HOUR_NAME%.txt}.tar.gz"
        ;;
    "notar")
        PUT_LOG_DAY_NAME="${LOG_DAY_NAME}"
        PUT_LOG_HOUR_NAME="${LOG_HOUR_NAME}"
        ;;
esac

tarLogFile(){
    TARTONAME=${1?"Usage: $FUNCNAME tar_file_name need_tar_file_name"}
    FROMLOG=$2
    tar -czf ${TARTONAME} --remove-files ${FROMLOG}
    if [ -e ${TARTONAME} ];then
        echoGoodLog "Tar: ${TARTONAME} is successfully."
    else
        echoBadLog "Tar: ${TARTONAME} was failed, Please check..."
    fi
}

checkProgramExist(){
    PROGRAMNAME=${1?"Usage: $FUNCNAME program_install_name"}
    PROGRAMEXIST=`dpkg -l |grep -wo ${PROGRAMNAME}|wc -l`
    if [ "${PROGRAMEXIST}" -ge 1 ];then
        return 0;
    else
        /usr/bin/apt-get install ${PROGRAMNAME} -y        
        if [ $? -eq 0 ];then
            echoGoodLog "Install ${PROGRAMNAME} is successfully."
            return 0;
        else
            echoBadLog "Install ${PROGRAMNAME} was failed, Please check..."
            return 1;
        fi
    fi
}

checkLogServerDir(){
    checkProgramExist expect
    passwd=${FTPPASSWD}
    /usr/bin/expect <<-EOF
set time 1
spawn ssh -p${SSHPORT} ${FTPUSER}@${FTPSERVER}
expect {
    "*yes/no" { send "yes
"; exp_continue }
    "*password:" { send "$passwd
" }
}
expect "*~$"
send "cd /home/upload${CD_DIR}
"
expect {
    "*No such file or directory" { send "mkdir -p /home/upload${CD_DIR}
" }
}
expect "*~$"
send "exit
"
interact
expect eof
EOF
    echo -e "
"
}

[ ! -d ${LCD_DIR} ] && mkdir -p ${LCD_DIR}
##
# 若切割后的日志文件存在时,就退出切割命令等
#
cd ${LCD_DIR} && [ ! -f ${PUT_LOG_HOUR_NAME} ] && {
    if [ -s ${LOG_NAME} ];then
        until [ -f ${LOG_HOUR_NAME} ]
        do
            cp ${LOG_NAME} ${LOG_HOUR_NAME}
        done
        if [ $? -eq 0 -a -f "${LOG_HOUR_NAME}" ];then
            echoGoodLog "Create ${LOG_HOUR_NAME} is successfully."
        else
            echoBadLog "Create ${LOG_HOUR_NAME} was failed, Please check..."
        fi
        [ "${IS_TAR}" = "tar" ] && tarLogFile ${PUT_LOG_HOUR_NAME} ${LOG_HOUR_NAME}        
        if [ "${T}" -eq 0 -a "${DAY_LOG_TAR_NUM}" -eq 0 ];then
            TEMP_CHECK_LOG=`ls -l ${LOG_DAY_NAME} |awk ‘{print $5}‘`
            cat ${LOG_NAME} >> ${LOG_DAY_NAME}
            [ $? -eq 0 ] || cat ${LOG_NAME} >> ${LOG_DAY_NAME}
            CHECK_LOG=`ls -l ${LOG_DAY_NAME} |awk ‘{print $5}‘`
        else
            [ -f ${LOG_TYPE}${DAY_TIME}.txt ] || touch ${LOG_TYPE}${DAY_TIME}.txt
            TEMP_CHECK_LOG=`ls -l ${LOG_TYPE}${DAY_TIME}.txt |awk ‘{print $5}‘`
            cat ${LOG_NAME} >> ${LOG_TYPE}${DAY_TIME}.txt
            [ $? -eq 0 ] || cat ${LOG_NAME} >> ${LOG_TYPE}${DAY_TIME}.txt
            CHECK_LOG=`ls -l ${LOG_TYPE}${DAY_TIME}.txt |awk ‘{print $5}‘`
        fi
        echoGoodLog "CHECK: CHECK_LOG=${CHECK_LOG},TEMP_CHECK_LOG=${TEMP_CHECK_LOG}..."
        if [ "${CHECK_LOG}" -gt "${TEMP_CHECK_LOG}" ];then
            cat /dev/null > ${LOG_NAME}
            [ $? -eq 0 ] && echoGoodLog "Append: ${LOG_HOUR_NAME} to ${LOG_TYPE}_day_log is successfully."
        else
            echoBadLog "Append: ${LOG_HOUR_NAME} to ${LOG_TYPE}_day_log was failed, Please check..."
        fi
        [ "${T}" -eq 0 -a "${IS_TAR}" = "tar" -a "${DAY_LOG_TAR_NUM}" -eq 0 ] && tarLogFile ${PUT_LOG_DAY_NAME} ${LOG_DAY_NAME}
    else
        echoBadLog "Log: ${LOG_NAME} is null or not exist, Please check..."
    fi
}

##
# 检查保存文件夹目录是否存在
#
CHECK_LOG_SERVER_DIR=${CCHECK_LOG_SERVER_DIR:-"f.ck"}
[ "${CHECK_LOG_SERVER_DIR}" = "-c" ] && checkLogServerDir
FTP_LOG_DIR="/tmp/ftp_err"
[ -d ${FTP_LOG_DIR} ] || mkdir -p ${FTP_LOG_DIR}
FTP_ERROR_LOG="${FTP_LOG_DIR}/ftp_temp_${LOG_TYPE}_err$$.log"

##
# FTP自动化上传函数
#
sendLog(){
    SENDLOGFILE=$1
    ftp -ivn ${FTPSERVER} 21 >${FTP_ERROR_LOG} << _EOF_
user ${FTPUSER} ${FTPPASSWD}
passive
bin
lcd ${LCD_DIR}
cd  ${CD_DIR}
put ${SENDLOGFILE}
bye
_EOF_
    ##
    # 统计前面FTP运行输出的错误日志记录行数
    #
    LOG_COUNT=`grep -w "^226" ${FTP_ERROR_LOG}|wc -l`
    if [ "${LOG_COUNT}" -eq 1 ];then
        echoGoodLog "Send: ${SENDLOGFILE} to ftp_server was successfully."
        TEMP_SEND_STATUS=0
        return 0
    else
        echoBadLog "Send: ${SENDLOGFILE} more than $x time."
        TEMP_SEND_STATUS=1
        sleep ${SEND_WHILE_SLEEP_TIME}
        return 1
    fi
}

REUPLOADLIST="/var/log/reupload_list_${LOG_TYPEB}_${STATION}.log"
TEMP_REUPLOADLIST="/var/log/temp_reupload_list_${LOG_TYPEB}_${STATION}.log"
[ -f ${TEMP_REUPLOADLIST} ] && rm ${TEMP_REUPLOADLIST}
runSendLog(){
    SENDLOGNAME=$1
    x=1;i=1
    until [ "$i" -eq 0 ];do
        [ "$x" -gt "${SEND_MAX_TIME}" ] && {
            echoBadLog "Send: ${SENDLOGNAME} to ftp_server was failed, Please check..."
            echo "${LCD_DIR};;${CD_DIR};;${SENDLOGFILE}" >> ${TEMP_REUPLOADLIST}
            break
        }
        sendLog "${SENDLOGNAME}"
        i=`echo $?`
        x=`expr $x + 1`
    done
}

[ "${T}" -eq 0 -a -f "${LCD_DIR}/${PUT_LOG_DAY_NAME}" -a "${DAY_LOG_TAR_NUM}" -eq 0 ] && runSendLog ${PUT_LOG_DAY_NAME}
[ -f "${LCD_DIR}/${PUT_LOG_HOUR_NAME}" ] && runSendLog ${PUT_LOG_HOUR_NAME}

##
# 把上面两种发送成功的记录更新到这个临时文件
#
TEMP_SENDSUCCESFILE="/var/log/temp_send_succes_${LOG_TYPEB}_${STATION}.txt"
SENDSUCCESFILE="/var/log/send_succes_${LOG_TYPEB}_${STATION}.txt"
[ "${TEMP_SEND_STATUS}" -eq 0 ] && echo "${LCD_DIR};;${CD_DIR};;${SENDLOGFILE};;$(date +%s)" > ${TEMP_SENDSUCCESFILE}
[ -e ${SENDSUCCESFILE} ] && {
    LCD_DIR=`cat ${SENDSUCCESFILE}|awk -F";;" ‘{print $1}‘`
    CD_DIR=`cat ${SENDSUCCESFILE}|awk -F";;" ‘{print $2}‘`
    LAST_DATE_SUCCESS=`date -d @"$(cat ${SENDSUCCESFILE}|awk -F";;" ‘{print $4}‘)" +%Y-%m-%d`
    INTERVAL_TIME=`expr $(date +%s) - $(cat ${SENDSUCCESFILE}|awk -F";;" ‘{print $4}‘)`
    LAST_DAY=`echo $(date -d @"$(cat ${SENDSUCCESFILE}|awk -F";;" ‘{print $4}‘)" +%d)|sed ‘s/^0//g‘`
    NOW_DAY=`echo $(date +%d)|sed ‘s/^0//g‘`
    [ "${LAST_DAY}" -ne "${NOW_DAY}" -a "${INTERVAL_TIME}" -gt 7000 ] && {
        if [ "${IS_TAR}" = "tar" ];then
            cd ${LCD_DIR} && {
                TEMP_SEND_FILES="${LOG_TYPE}${LAST_DATE_SUCCESS}.tar.gz"
                [ -e ${TEMP_SEND_FILES} ] || tarLogFile ${TEMP_SEND_FILES} ${LOG_TYPE}${LAST_DATE_SUCCESS}.txt
            }
        else
            TEMP_SEND_FILES="${LOG_TYPE}${LAST_DATE_SUCCESS}.txt"
        fi
        runSendLog ${TEMP_SEND_FILES}
    }
    rm ${SENDSUCCESFILE}
}
[ -f ${TEMP_SENDSUCCESFILE} ] && mv ${TEMP_SENDSUCCESFILE} ${SENDSUCCESFILE}

##
# 重传上次发送失败的文件
#+ 说明:重新上传函数的执行段,最好是放在后面,因为它依赖前面的FTP发送函数生成的TEMP_REUPLOADLIST清单
#
reUploadFile(){
    TEMP_NEED_DO_FILE=$1
    REUPLOADLIST_NUM=`cat ${TEMP_NEED_DO_FILE}|wc -l`
    [ "${REUPLOADLIST_NUM}" -ge 1 ] && {
        while read line
        do
            LCD_DIR=`echo ${line}|awk -F";;" ‘{print $1}‘`
            CD_DIR=`echo ${line}|awk -F";;" ‘{print $2}‘`
            REUPLOADFILENAME=`echo ${line}|awk -F";;" ‘{print $3}‘`
            [ -f "${LCD_DIR}/${REUPLOADFILENAME}" ] && runSendLog ${REUPLOADFILENAME}
        done < ${TEMP_NEED_DO_FILE}
    }
    [ -e ${TEMP_NEED_DO_FILE} ] && rm ${TEMP_NEED_DO_FILE}
}

[ -s ${REUPLOADLIST} ] && reUploadFile ${REUPLOADLIST}
[ -f ${TEMP_REUPLOADLIST} ] && mv ${TEMP_REUPLOADLIST} ${REUPLOADLIST}
[ -f ${FTP_ERROR_LOG} ] && rm ${FTP_ERROR_LOG}

##
# 清理超过90天的备份日志
#
[ -d ${LCD_DIR} ] && cd ${LCD_DIR} && {
    for FILENAME in `find . -type f -ctime +"${BACK_SAVE_MAX_DAY}" | awk -F/ ‘{print $2}‘`
    do
        rm ${FILENAME} && echoGoodLog "Clear: ${LCD_DIR}/${FILENAME}..."
    done
}

cleanRunLog ${RUN_LOG}

--------------------

本文出自 “上山路十八弯” 博客,转载请与作者联系!

日志大了,怎么办?用我的日志切割脚本吧!

分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。特点:1、功能丰富应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大小作切割。2、通用通用于nginx、tengine... 查看详情

日志切割

...  6.效果   7.定时    二:切割程序1.脚本1#!/bin/bash2 查看详情

shell脚本:检查ftp日志存储服务器上的日志是否正常上传

脚本:check_log.sh主要功能:用于检查日志文件是否上传到ftp服务器,若未上传的,则发邮件报警-------------------#!/bin/bash#Auto check log files and notice by email#By colin#Revision on 2015- 查看详情

shell脚本之字符串大截取取与切割

参考技术A本问主要解决以下三个问题:第一问、什么是字符串的截取与切割以及它的作用是什么?第二问、字符串截取大方法有哪些?第三问、字符串截取与切割大实际应用场景有哪些?第一问:什么是字符串的截取与切割以... 查看详情

日志大了,怎么办?用我的日志切割脚本吧!

本文转载自https://www.imooc.com/article/13260分享一个脚本,它配合linux系统的crontab任务,对nginx自动日志切割和清理,分别作用于ACCESS和ERROR的日志。特点:1、功能丰富应有的功能中,不仅支持按天切割,而且支持通过通过设置文件大... 查看详情

linuxshell脚本按日期切割pm2日志

参考技术Alinuxshell脚本按日期切割pm2日志(解决定时任务pm2命令无法执行问题,原因:没有环境变量)首先在输入命令echo$PATH拿到当前系统环境变量然后在/root/.pm2目录新建cutlog.sh文件(注意:第一句一定要有,设置当前shell脚本... 查看详情

nginx日志切割脚本

#!/bin/bash#Author:WangXiaoqiang#ReadMe:Nginxaccesslogsplitscript#crontab-e#5923***sh/script/nginx_split.shLOG_PATH=‘/usr/local/nginx/logs‘LOG_NAME=‘access.log‘BACKUP_DIR=‘/data/backup/baklog‘dir_time 查看详情

日志定时切割,以及定时删除(2种方法)(代码片段)

切割catalian日志的方式有很多种,比如shell脚本的、cronolog或者通过配置log4j等等这些都可以实现。但今天我要介绍是使用logrotate来按日期生成日志。如果catalina.out的大小超过了2G,那么tomcat可能在没有错误提示的情况下崩溃、无... 查看详情

centos下简单实现日志切割,并上传至日志服务器。

#!/bin/bash#大于500M的日志上传至日志服务器并清除count=$[1024*1024*500]#500Mfile_size=`ll/var/log/httpd/access_log|awk‘{print$5}‘` passwd="magedu.com"#注意变量最好在expect外定义,不知道什么原因我在expect里面定义不成功if[$file_size-gt$count 查看详情

nginx日志按天自动切割(代码片段)

...小文件大小,同时也更方便查看日志。实现思路shell脚本+定时任务+nginx信号控制,完成日志定时切割。具体步骤在需要保存日志或者是其他目录,新建一个shell脚本。vim/usr/local/openresty/nginx/logs/log_rotate.sh编辑内... 查看详情

日志文件配置与切割

日志文件配置与切割自定义日志格式http{  server  {    listen     80default;    server_name  _*;    acce 查看详情

shell脚本:mysql全备与binlog增量备份

脚本功能:mysql库备份脚本,全备与binlog日志备份    脚本可以根据指定的参数进行全备,其余时间备份binlog日志---------------#!/bin/bash# description:Trian Server backup databases# revision on  查看详情

shell脚本——日常巡检脚本(代码片段)

日常巡检脚本运维日常巡检脚本Nginx日志每天切割压缩循环探测全网主机并记录Expect实现SSH免交互登陆运维日常巡检脚本#!/bin/bashos_sys()#系统信息os_type=`uname`echo"操作系统的类型:$os_type"os_version=`cat/etc/redhat-rele... 查看详情

日常巡检shell脚本(代码片段)

日常巡检脚本运维日常巡检脚本Nginx日志每天切割压缩循环探测全网主机并记录Expect实现SSH免交互登陆运维日常巡检脚本#!/bin/bashos_sys()#系统信息os_type=`uname`echo"操作系统的类型:$os_type"os_version=`cat/etc/redhat-rele... 查看详情

linux系统下nginx日志每天定时切割的脚本写法

...A  下面是deepvps自己用的自动每天定时切割Nginx日志的`脚本,很方便很好用,推荐给大家使用。本脚本也是参考了张宴老师的文章,再次感谢张宴老师。  1、创建脚本/usr/local/nginx/sbin/cut_nginx_log.sh  vi/usr/local/nginx/sbin/cut_ngi... 查看详情

nginx日志切割

记录这个就是方便自己以后查看!!!nginx按天切割日志脚本示例如下#!/bin/bashlogs_path="/usr/local/openresty/nginx/logs/"pid_path="/usr/local/openresty/nginx/logs/nginx.pid"mv ${logs_path}access.log  ${logs_path}acces 查看详情

shell脚本切割字符串分割字符串(split)(代码片段)

参考文章:【shell】shell字符串分割|文件分割|剪切|截取比如,要将addr:192.168.1.1按:分割,获取后面的ip地址我们ifconfig的结果是:root@xy-virtual-machine:/kyai_nv#root@xy-virtual-machine:/kyai_nv#ifconfigens33Li 查看详情

shell脚本切割字符串分割字符串(split)(代码片段)

参考文章:【shell】shell字符串分割|文件分割|剪切|截取比如,要将addr:192.168.1.1按:分割,获取后面的ip地址我们ifconfig的结果是:root@xy-virtual-machine:/kyai_nv#root@xy-virtual-machine:/kyai_nv#ifconfigens33Li 查看详情