#!/bin/bash#=======================================================================================##FILE:automount#USAGE:automount[-h][CopyBash_Code_Style]#DESCRIPTION:Copybashstyleguideandcodingstandard.#OPTIONS:seefuction'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-2020Shell,AllRightsReserved#=======================================================================================#Ifrequired,additionalinformationhastobeadded(e.gcopyrightnote,projectassignment).TODAY=`date+%Y-%m-%d`NOW=`date+%H-%M`BASE=$0BASEDIR=$(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=0exec4>${MOUNT_FILE_INFO}exec5>${SFDISK_FILE_INFO}exec6>${DIFF_INFO}#Functioncomments#===FUNCTION====================================================================#NAME:#DESCRIPTION:Displayusageinformationforthisscript.#PARAMETER1:---#=======================================================================================functionreadme{echo-e'\033[01;33m'cat<<EOF*******************************************KeepWarnning.*******************************************Keys:1.Check/etc/fstab.bakisexistsandsetupbasedir.2.read/etc/fstabandsavein/etc/fstab.bak.3.getdiskdeviceinfo4.formatandmountdisk5.write/etc/fstab.*******************************************EOFecho-e'\033[01;0m'read-p"线上设备已经格式化,确认?(y/n)"answercase$answeriny|Y|yes|Yes|YES)echo"";;n|N|no|No|NO)rm-rf${DIFF_INFO}${MOUNT_FILE_INFO}${SFDISK_FILE_INFO}echo"退出脚本!"exit0;;*)echo"退出脚本!"exit0;;esac}functioncheck_env{#>${INFO_LOG}#FIRSTRUNiftest!-d"${LOG_PATH}";thenmkdir-p"${LOG_PATH}"exec2>${ERROR_LOG}exec8>>${CMD_LOG}echo-e"################################1.1CheckEnvStart################################\n"1>&8elseexec2>${ERROR_LOG}exec8>>${CMD_LOG}echo-e"################################1.1CheckEnvStart################################\n"1>&8fiif[[-e${BAK_FSTAB}]];thenprintf"\e[32m#############${NOW}CheckFile/etc/fstab[AlreadyExists]############\e[0m\n"printf"\e[32m#############${NOW}CheckFile/etc/fstab[AlreadyExists]############\e[0m\n">${INFO_LOG}echo"rm-rf${DIFF_INFO}${MOUNT_FILE_INFO}${MOUNT_FILE}${SFDISK_FILE_INFO}${SFDISK_FILE}\n"1>&8rm-rf${DIFF_INFO}${MOUNT_FILE_INFO}${MOUNT_FILE}${SFDISK_FILE_INFO}${SFDISK_FILE}exit0elseexec3>${BAK_FSTAB}FLAG=1echo"exec3>${BAK_FSTAB}FLAG=1"1>&8printf"\e[32m################FirstWrite/etc/fstab[Running]##############\e[0m\n"printf"\e[32m################FirstWrite/etc/fstab[Running]##############\e[0m\n">${INFO_LOG}fiecho"################################1.1CheckEnvEnd################################"1>&8}functionread_fstab{echo"################################1.2ReadfstabStart################################"1>&8whilereadDATAdoecho"${DATA}"done<${FSTAB_NAME}>&3wait;printf"\e[32m################Read/etc/fstab[OK]##############\e[0m\n"printf"\e[32m################Read/etc/fstab[OK]##############\e[0m\n">>${INFO_LOG}echo"################################1.2ReadfstabEnd################################"1>&8}functionget_device_info(){#mount_device_info=`df-Th|tail-n+2|awk'{print$1}'|grep-v"tmpfs"|awk'{printsubstr($0,1,length-1)}'|uniq`echo"#############################1.3GetDeviceinfoStart#############################"1>&8mount_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}">&4echo"${sfdisk_device_info}">&5diff_info="`sort${MOUNT_FILE_INFO}${SFDISK_FILE_INFO}|uniq`"echo"diff_info:sort${MOUNT_FILE_INFO}${SFDISK_FILE_INFO}|uniq"1>&8if[[${diff_info}!=""]];thenecho"${diff_info}|tr-d\"[0-9]\"|awk'{if(length!=0)print$0}'>&6"1>&8echo-e"${diff_info}"|tr-d"[0-9]"|awk'{if(length!=0)print$0}'>&6printf"\e[32m################GetDeviceInfo[Success]##############\e[0m\n"printf"\e[32m################GetDeviceInfo[Success]##############\e[0m\n">>${INFO_LOG}elseecho"cat/dev/null>&6"1>&8cat/dev/null>&6printf"\e[32m################GetDeviceInfo[Failed]##############\e[0m\n"printf"\e[32m################GetDeviceInfo[Failed]##############\e[0m\n">>${INFO_LOG}fiecho"#############################1.3GetDeviceinfoEnd#############################"1>&8}functionwrite_device_info{echo"#############################1.4PreWritefstabStart#########################"1>&8echo"#############################1.4PreWritefstabStart#########################">>${INFO_LOG}DIFF_SIZE=$(du${DIFF_INFO}|awk'{print$1}')echo-e"################WriteFstab.bakStart-Time:${TODAY}################\n">>${BAK_FSTAB}if[[-s${DIFF_INFO}&&${DIFF_SIZE}-ge4]];thendevices=$(cat${DIFF_INFO}|wc-l)awk'$0=""NR""$0'${DIFF_INFO}>${DIFF_FILE}if[[${DIFF_SIZE}-gt1&&${FLAG}!=0]];thenfor((id=1;id<=${devices};id++))doeval`awk-vid=$id'{if($1==id)print"name="$2";id="$1}'${DIFF_FILE}`num=$(expr${id}-1)#echo"mount-oremount,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}-eq0]];thenecho"mount-t${MTYPE}${name}${MOUNT_POINT}${num}"1>&8mount-t${MTYPE}${name}"${MOUNT_POINT}${num}"elseecho"mount-oremount,rw-t${MTYPE}${name}${MOUNT_POINT}${num}"1>&8mount-oremount,rw-t${MTYPE}${name}"${MOUNT_POINT}${num}"fiif[!-f"${MOUNT_POINT}${num}/${num}"];thenmkdir-p"${MOUNT_POINT}${num}"&&touch"${MOUNT_POINT}${num}/${num}"echo"mkdir-p${MOUNT_POINT}${num}&&touch${MOUNT_POINT}${num}/${num}"1>&8echo"${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults00>>${BAK_FSTAB}"1>&8echo-e"${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults00">>${BAK_FSTAB}printf"\e[32m################Disk${name}isAlreadMount[OK]##############\e[0m\n"printf"\e[32m################Disk${name}isAlreadMount[OK]##############\e[0m\n">>${INFO_LOG}elseprintf"\e[32m################Disk${name}isAlreadMount[OK]##############\e[0m\n">>${INFO_LOG}printf"\e[32m################Disk${name}isAlreadMount[OK]##############\e[0m\n"echo"${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults00>>${BAK_FSTAB}"1>&8echo-e"${name}\t\t${MOUNT_POINT}${num}\t\t${MTYPE}\tdefaults00">>${BAK_FSTAB}fidonefiecho"rm-rf${DIFF_INFO}${MOUNT_FILE_INFO}${MOUNT_FILE}${SFDISK_FILE_INFO}${SFDISK_FILE}"1>&8rm-rf${DIFF_INFO}${MOUNT_FILE_INFO}${MOUNT_FILE}${SFDISK_FILE_INFO}${SFDISK_FILE}elseprintf"\e[32m################AllDiskisAlreadMount[OK]##############\e[0m\n"printf"\e[32m################AllDiskisAlreadMount[OK]##############\e[0m\n">>${INFO_LOG}fiecho-e"################WriteFstab.bakEnd-Time:${TODAY}################\n">>${BAK_FSTAB}echo"#############################1.4PreWritefstabEnd#########################"1>&8echo"#############################1.4PreWritefstabEnd#########################">>${INFO_LOG}}functionwrite_fstab{echo"#############################1.5WritefstabStart#########################"1>&8if[[-f${BAK_FSTAB}&&-f${FSTAB_NAME}]];thenexportcomm_result="$(comm-3${BAK_FSTAB}${FSTAB_NAME})"fiecho-e'\033[01;33m'cat<<EOF>>${INFO_LOG}****************************************************************************************WriteWarnning.****************************************************************************************WriteKeys:1.Writemountdeviceinfoandautomount.2.result=$(echo-e"$comm_result")****************************************************************************************EOFecho"${comm_result}">>${FSTAB_NAME}awk'!a[$0]++'${BAK_FSTAB}>${FSTAB_NAME}echo"#############################1.5WritefstabEnd#########################"1>&8}functionmain_func{readmecheck_envread_fstabget_device_infowrite_device_infowrite_fstab}#Sectioncomments#---------------------------------------------------------------------------------------#definemain.#---------------------------------------------------------------------------------------main_func#lineendcomments