#!/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
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。