Centos-automount

#!/bin/bash #======================================================================================= # #               FILE:    automount       #              USAGE:    automount [-h] [Copy Bash_Code_Style] #     DESCRIPTION:    Copy bash style guide and coding standard . #            OPTIONS:    see fuction 'usage' below  #    REQUIREMENTS:    --- #               BUGS:    --- #              NOTES:    ---  #             AUTHOR:    Dr.-Vision. Simple(sp). #            COMPANY:    China #            VERSION:    1.0 #            CREATED:    28.09.2016 - 10:15:30 #        REVISION:    28.09.2016 #            PROJECT:    XXX #          COPYRITHT:    Copyright(c)2002-2020 Shell, All Rights Reserved #======================================================================================= #If required, additional information has to be added (e.g copyright note,project assignment). TODAY=`date +%Y-%m-%d` NOW=`date +%H-%M` BASE=$0 BASEDIR=$(dirname $0) USAGE=$(echo -e "${BASE%%.*}") LOG_PATH="${BASEDIR}/proclog/${TODAY}/${USAGE}" mkdir -p ${LOG_PATH} CMD_LOG="${LOG_PATH}/${NOW}_${USAGE}.cmd" INFO_LOG="${LOG_PATH}/${NOW}_${USAGE}.info" ERROR_LOG="${LOG_PATH}/${NOW}_${USAGE}.err" FSTAB_NAME="/etc/fstab" BAK_FSTAB="/etc/fstab.bak" MOUNT_FILE_INFO="/tmp/mount_info" MOUNT_FILE="/tmp/mount_file" SFDISK_FILE_INFO="/tmp/sfdisk_info" DIFF_INFO="/tmp/sfdisk_diff_info" DIFF_FILE="/tmp/sfdisk_diff_file" MOUNT_POINT="/data/dev" MTYPE="ext4" FLAG=0 exec 4>${MOUNT_FILE_INFO} exec 5>${SFDISK_FILE_INFO} exec 6>${DIFF_INFO} #   Function comments #===   FUNCTION     ==================================================================== #          NAME:             #   DESCRIPTION:    Display usage information for this script. #  PARAMETER  1:    --- #======================================================================================= function readme { echo -e '\033[01;33m' cat << EOF ******************************************* Keep Warnning.  ******************************************* Keys:         1.Check /etc/fstab.bak is exists and set up basedir.         2.read /etc/fstab and save in /etc/fstab.bak .         3.get disk device info         4.format and mount disk         5.write /etc/fstab. ******************************************* EOF echo -e '\033[01;0m' read -p "線上設備已經格式化,確認?(y/n)" answer case $answer in     y|Y|yes|Yes|YES)         echo ""         ;;     n|N|no|No|NO)                 rm -rf ${DIFF_INFO} ${MOUNT_FILE_INFO} ${SFDISK_FILE_INFO}          echo "退出腳本!"          exit 0         ;;         *)         echo "退出腳本!"          exit 0         ;; esac } function check_env { #>${INFO_LOG}         # FIRST RUN         if test ! -d "${LOG_PATH}";then                 mkdir -p "${LOG_PATH}"                 exec 2>${ERROR_LOG}                 exec 8>>${CMD_LOG}                 echo -e "################################  1.1 Check Env Start ################################\n" 1>&8         else                 exec 2>${ERROR_LOG}                 exec 8>>${CMD_LOG}                 echo -e "################################  1.1 Check Env Start ################################\n" 1>&8         fi         if [[ -e ${BAK_FSTAB} ]];then                 printf "\e[32m ############# ${NOW} Check File /etc/fstab [ Already Exists ] ############\e[0m\n"                 printf "\e[32m ############# ${NOW} Check File /etc/fstab [ Already Exists ] ############\e[0m\n">${INFO_LOG}                   echo "rm -rf ${DIFF_INFO} ${MOUNT_FILE_INFO} ${MOUNT_FILE} ${SFDISK_FILE_INFO}  ${SFDISK_FILE}\n" 1>&8                 rm -rf ${DIFF_INFO} ${MOUNT_FILE_INFO} ${MOUNT_FILE} ${SFDISK_FILE_INFO}  ${SFDISK_FILE}                 exit 0         else                 exec 3>${BAK_FSTAB}                 FLAG=1                 echo "exec 3>${BAK_FSTAB} FLAG=1"1>&8                 printf "\e[32m ################ First Write /etc/fstab [ Running ] ##############\e[0m\n"                 printf "\e[32m ################ First Write /etc/fstab [ Running ] ##############\e[0m\n">${INFO_LOG}          fi               echo "################################  1.1 Check Env End ################################  " 1>&8 } function read_fstab {         echo "################################  1.2 Read fstab Start ################################  " 1>&8         while read DATA         do                 echo "${DATA}"         done<${FSTAB_NAME}>&3         wait;         printf "\e[32m ################ Read /etc/fstab [ OK ] ##############\e[0m\n"         printf "\e[32m ################ Read /etc/fstab [ OK ] ##############\e[0m\n">>${INFO_LOG}          echo "################################  1.2 Read fstab End ################################  " 1>&8 } function get_device_info() {         #mount_device_info=`df -Th|tail -n +2|awk '{print $1}'|grep -v "tmpfs"|awk '{print substr($0,1,length-1)}'|uniq`         echo "#############################  1.3 Get Device info Start #############################  " 1>&8         mount_device_info=`df -Th|tail -n +2|awk '{print $1}'|grep -v "tmpfs\|sda[0-9]"|uniq`         sfdisk_device_info=`ls /dev/sd*|grep -v "[0-9]\|sda"`         echo "${mount_device_info}">&4         echo "${sfdisk_device_info}">&5         diff_info="`sort ${MOUNT_FILE_INFO} ${SFDISK_FILE_INFO}|uniq`"         echo "diff_info:sort ${MOUNT_FILE_INFO} ${SFDISK_FILE_INFO}|uniq" 1>&8         if [[ ${diff_info} != "" ]];then                 echo  "${diff_info}|tr -d \"[0-9]\"|awk '{if(length !=0) print $0}'>&6 " 1>&8                 echo -e "${diff_info}"|tr -d "[0-9]"|awk '{if(length !=0) print $0}'>&6                 printf "\e[32m ################ Get Device Info [ Success ] ##############\e[0m\n"                 printf "\e[32m ################ Get Device Info [ Success ] ##############\e[0m\n">>${INFO_LOG}          else                 echo "cat /dev/null>&6" 1>&8                 cat /dev/null>&6                 printf "\e[32m ################ Get Device Info [ Failed ] ##############\e[0m\n"                 printf "\e[32m ################ Get Device Info [ Failed ] ##############\e[0m\n">>${INFO_LOG}         fi         echo "#############################  1.3 Get Device info End #############################  " 1>&8 } function write_device_info {         echo "#############################  1.4 Pre Write fstab Start #########################  " 1>&8         echo "#############################  1.4 Pre Write fstab Start #########################  ">>${INFO_LOG}          DIFF_SIZE=$(du ${DIFF_INFO}|awk '{print $1}')         echo -e "################ Write Fstab.bak Start-Time:${TODAY} ################\n">>${BAK_FSTAB}         if [[ -s ${DIFF_INFO} && ${DIFF_SIZE} -ge 4 ]];then                 devices=$(cat ${DIFF_INFO}|wc -l)                 awk '$0=""NR" "$0' ${DIFF_INFO}>${DIFF_FILE}                 if [[ ${DIFF_SIZE} -gt 1 && ${FLAG} != 0 ]];then                         for((id=1;id<=${devices};id++))                         do                                       eval `awk -vid=$id '{if($1==id) print "name="$2";id="$1}' ${DIFF_FILE}`                                 num=$(expr ${id} - 1)                                 #echo "mount -o remount,rw -t ${MTYPE} ${name} ${MOUNT_POINT}${num}" 1>&1|tee ${MOUNT_FILE}>>${FSTAB_NAME}                                 remount=`df -Th|grep "${MOUNT_POINT}${num}"|wc -l`                                 if [[ ${remount} -eq 0 ]];then                                         echo "mount -t ${MTYPE} ${name} ${MOUNT_POINT}${num}" 1>&8                                         mount -t ${MTYPE} ${name} "${MOUNT_POINT}${num}"                                 else                                         echo "mount -o remount,rw -t ${MTYPE} ${name} ${MOUNT_POINT}${num}" 1>&8                                         mount -o remount,rw -t ${MTYPE} ${name} "${MOUNT_POINT}${num}"                                 fi                                  if [ ! -f "${MOUNT_POINT}${num}/${num}" ];then                                         mkdir -p "${MOUNT_POINT}${num}" && touch "${MOUNT_POINT}${num}/${num}"                                         echo "mkdir -p ${MOUNT_POINT}${num} && touch ${MOUNT_POINT}${num}/${num}" 1>&8                                         echo "${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults 0 0 >>${BAK_FSTAB}" 1>&8                                         echo -e "${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults 0 0">>${BAK_FSTAB}                                         printf "\e[32m ################ Disk ${name} is Alread Mount [ OK ] ##############\e[0m\n"                                         printf "\e[32m ################ Disk ${name} is Alread Mount [ OK ] ##############\e[0m\n">>${INFO_LOG}                                 else                                         printf "\e[32m ################ Disk ${name} is Alread Mount [ OK ] ##############\e[0m\n">>${INFO_LOG}                                         printf "\e[32m ################ Disk ${name} is Alread Mount [ OK ] ##############\e[0m\n"                                         echo "${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults 0 0 >>${BAK_FSTAB}" 1>&8                                         echo -e "${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults 0 0">>${BAK_FSTAB}                                 fi                          done                             fi                 echo "rm -rf ${DIFF_INFO} ${MOUNT_FILE_INFO} ${MOUNT_FILE} ${SFDISK_FILE_INFO}  ${SFDISK_FILE}" 1>&8                 rm -rf ${DIFF_INFO} ${MOUNT_FILE_INFO} ${MOUNT_FILE} ${SFDISK_FILE_INFO}  ${SFDISK_FILE}         else                 printf "\e[32m ################ All Disk is Alread Mount [ OK ] ##############\e[0m\n"                 printf "\e[32m ################ All Disk is Alread Mount [ OK ] ##############\e[0m\n" >>${INFO_LOG}         fi               echo -e "################ Write Fstab.bak End-Time:${TODAY} ################\n">>${BAK_FSTAB}         echo "#############################  1.4 Pre Write fstab End #########################  " 1>&8         echo "#############################  1.4 Pre Write fstab End #########################  ">>${INFO_LOG}  } function write_fstab {         echo "#############################  1.5 Write fstab Start #########################  "1>&8         if [[ -f ${BAK_FSTAB} && -f ${FSTAB_NAME} ]];then                 export comm_result="$(comm -3 ${BAK_FSTAB} ${FSTAB_NAME})"         fi         echo -e '\033[01;33m'         cat << EOF >>${INFO_LOG} **************************************************************************************** Write Warnning.  **************************************************************************************** Write Keys:         1.Write mount device info and auto mount.         2.result=$(echo -e "$comm_result") **************************************************************************************** EOF         echo "${comm_result}">>${FSTAB_NAME}         awk '!a[$0]++' ${BAK_FSTAB} >${FSTAB_NAME}         echo "#############################  1.5 Write fstab End #########################  "1>&8 } function main_func {         readme         check_env         read_fstab         get_device_info         write_device_info         write_fstab } #   Section comments #--------------------------------------------------------------------------------------- #   define main. #--------------------------------------------------------------------------------------- main_func  #   line end comments
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章