shell 脚本 初始化环境脚本

初始化环境脚本

更改网络,更改yum源,更改环境

前言

做了一个初始化环境的脚本,脚本目前有这几个功能:

  1. 更改自己网卡为eth 0 开头(会重启只能单独选择)
    思路:1,判断 网卡名是否已经更改了。2,判断文件是否已经更改了,如果已经更改,提示是否加载配置。3,如果文件未更改,就执行更改,加载配置,并提示是否重启
  2. 更改ip地址
    思路:1,查看自己所拥有的网卡名。2,询问是输入静态ip地址,还是dhcp 如果是dhcp 则不询问 后续的IP地址。3,按照提示输入ip,网关,dns ,可选的可以不输入。4,通过nmcli 创建5,待解决 未检查网关和dns是否合法
  3. 关闭防火墙
    思路:查看selinux 当前状态,如果开启, 则临时关闭,并修改文件。关闭Firewall。
  4. 配置阿里的yum源
    仅支持 centos 6 7 8
  5. 安装常用软件
    用于最小化安装的系统,来安装常用包,做了判断是否安装
    vim,bash-completion(补全命令)autofs(自动挂载镜像) lrzsz(rz,sz传文件)
  6. 更改环境颜色
    使用source运行脚本,并且正常按9退出。即可
  7. 更改别名
    使用source运行脚本,并且正常按9退出。即可,新增了是否已存在别名。
  8. 扫描磁盘,列出当前磁盘
    仅支持扫描scsi硬盘。nvme仅能列出。
  9. 退出exit
碰到问题

1, 等号后面有个空格会把后面变成命令

lhnmcli="${lhnmcli} ipv4.gateway ${wg}" 
lhnmcli= "${lhnmcli} ipv4.gateway ${wg}"  

2, read dnsdz 判断是否输入内容
[ -n $dnsdz ] 这个是判断不出来是否输入没输入的,按道理n代表是否不为空,但是如果read 直接回车,也不属于空,这里用-z 比较好

3, 双引号解释变量,用大括号限定变量的名称

lhnmcli="nmcli connection add con-name ${wkname}-lh type ethernet ifname ${wkname} ip4 192.168.31.22/24 gw4 192.168.31.1"   

4, cat << eof 在shell里用cat 这样读取的话,结束的eof 前面不能用空格

5, 取网卡的前缀

sed -nr 's/^([[:alpha:]]{1,99})[[:digit:]]{1,99}/\1/p'  

查看拥有的除了lo以外的网卡名

ip a | grep  "^[[:digit:]]\?:" | tr " " ":" | cut -d":" -f3 | grep "[[:alpha:]]\{1,99\}[[:digit:]]"  

查看所有网卡

ip a | grep  "^[[:digit:]]\?:" | tr " " ":" | cut -d":" -f3

6, 更改颜色
PS1=’[\e[32m]    [\u@\h \W]$   [\e[0m]’ 绿色
   颜色开始           颜色结束
PS1=’\e[33m   [\u@\h \W]$  \e[0m’
两个效果相等,一个是使用了中括号,一个是没有使用

7, sed追加变量内容有空格
往里面追加的时候, 由于sed由于变量里面有空格所以不行
变量用单引号套起来,外面用双引号,可以
cat .bashrc | sed ‘/# Source/ihallo’
cat .bashrc | sed ‘/# Source/a’’’$col’’’’
cat .bashrc | sed “/# Source/a’$col’”(外面双引号,里面单引号是可以的,上面两种不行)

8,sed搜索替换时 ,在搜索项要加\转义,替换项不需要
sed s/a.sh/b.sh

9,关于$?
abc=cat /etc/passwd | grep "rootsdf"
echo $?

赋值不影响$?的判断。$?是判断上一次的执行结果
$?如果不是零的话,set -ue 就会停止,所以慎用

10,使用source 运行脚本,就可以运行PS1直接生效,但是需要在脚本退出时把所有变量删除了。

11,在xshell 里 如果删除键不好用,则需要在 文件-属性-终端-键盘的 delete序列 和backspace 序列 都选择 ASCII 127 即可

12,筛选变量

[root@localhost ~]#cat wangka.sh | grep -o "\$[[:alpha:]]\+" |sort|uniq -c|sort -r
      7 $releasever
      7 $colend
      7 $col
      5 $banben
      4 $lhnmcli
      4 $basearch
      3 $ipdz
      2 $yorn
      1 $yanma
      1 $wkname
      1 $wg
      1 $usewk
      1 $seli
      1 $PS
      1 $ippd
      1 $dnsdz
      1 $colq
      1 $ans
[root@localhost ~]#cat wangka.sh | grep -o "\$[[:alpha:]]\+" |sort| uniq | tr '$' ' ' >> wangka.sh 

脚本效果

实现了二级菜单

[root@localhost ~]#sh init_env_191107.sh 
 你的centos版本是7 
 请选择你要更改的项目: 
 1.网络管理 
 2.软件管理 
 3.环境管理 
 4.扫描磁盘,列出当前磁盘 
 5.运维管理 
 8.查看此脚本所有功能 
 9.退出exit 
你的选择是:8
1.网络管理
	2.1 更改网卡
	2.2 更改ip
	2.3 关闭防火墙
	2.4 返回上一级
2.软件管理
	3.1 配置yum源
	3.2 配置光盘源
	3.3 安装常用软件
	3.4 返回上一级
3.环境管理
	4.1 更改环境颜色
	4.2 更改别名
	4.3 更改vim
	4.4 返回上一级

脚本源码如下

#!/bin/bash
#
#********************************************************************
#Author:		youyoul
#QQ: 			1921160095
#Date: 			2019-10-11
#FileName:		wangka.sh
#Description:		The test script
#Copyright (C): 	2019 All rights reserved
#********************************************************************
#默认函数
sayhello(){
  echo "Hello,World"
}
#修改网卡名称
net_card_name(){
    # 判断网卡名是否已经是eth
    `ip a | grep "eth0"  > /dev/null` && { echo 网卡名已经更改 ; continue ; }
	#判断版本是否等于7,后续写别的
    if [ `version` -ge 7 ]; then
		if `cat /etc/default/grub  | grep ifnames=0 > /dev/null` ; then
			echo 配置文件已存在;
			read -p "是否重新加载配置:yes or no ?" yorn
			if [[ $yorn =~ [yY]([Ee][Ss])?  ]] ; then
				grub2-mkconfig -o /etc/grub2.cfg 
	        	reboot
	        fi
			unset yorn 
		else
			sed -ri '/CMDLINE/s#^(.*)"#\1 net.ifnames=0 "#' /etc/default/grub
			grub2-mkconfig -o /etc/grub2.cfg 
			read -p "是否重启:yes or no ?" yorn
			if [[ $yorn =~ [yY]([Ee][Ss])?  ]] ; then
				reboot
			fi
			unset yorn 
		fi
    fi
}
#修改IP地址
ip_config(){
	local usewk=`ip a | grep  "^[[:digit:]]\?:" | tr " " ":" | cut -d":" -f3 | tr "\n" " "`
	echo "你拥有的网卡:$usewk"
	read -p "请输入要配置的网卡名:" wkname
	read -p "请输入一个合法ip地址或输入(dhcp)自动获取:" ipdz
	local ippd="(\<([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.){3}\<([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
	if [[ $ipdz =~ $ippd ]]; then
		read -p "请输入掩码(1-32):" yanma
		local lhnmcli="nmcli connection add con-name ${wkname} type ethernet ifname ${wkname} ip4 $ipdz/$yanma "
		#判断是否输入网关
		read -p "(可选)请输入网关:" wg
		if [ -z $wg  ]; then 
			 echo gateway is empty 
		else
			 lhnmcli="${lhnmcli} ipv4.gateway ${wg}"
			 echo $lhnmcli
		fi
		#判断是否输入DNS
		read -p "(可选)请输入dns:" dnsdz
		if [ -z $dnsdz ]; then
			 echo dns is empty 
		else
			 lhnmcli="${lhnmcli} ipv4.dns ${dnsdz}"
			 echo $lhnmcli; 
		fi
		#判断是否已经存在这个网卡的配置如果有,先删除。
	        if `nmcli connection | grep ${wkname}`;then
			nmcli connection del ${wkname} &> /dev/null
		fi
		$lhnmcli
		echo $lhnmcli
		nmcli connection up ${wkname}
	elif [ $ipdz=dhcp ]; then
		#判断是否已经存在这个网卡的配置如果有,先删除。
	        if `nmcli connection | grep ${wkname}`;then
			nmcli connection del ${wkname} &> /dev/null
		fi
		nmcli connection add con-name ${wkname} type ethernet ifname $wkname ipv4.method auto
		nmcli connection up ${wkname}
	else
		echo 输入静态ip或者dhcp
		continue
	fi
	unset wkname
	unset ipdz
	unset yanma
	unset wg
	unset dnsdz
}
#关闭防火墙
stop_firewall(){
	local seli=`getenforce`
	[ $seli="Enforcing" ] && setenforce 0
	if `cat /etc/selinux/config  | grep SELINUX=disabled`; then
		echo 已更改
	else
		sed -ri '/^SELINUX=/s#enforcing#disabled#p' /etc/selinux/config 
	fi
	systemctl stop firewalld.service 
	systemctl disable firewalld.service 
}
#配置阿里镜像源
pz_yum_ali(){
	if [ `version` -eq 7 -o `version` -eq 6 ]; then  
		rm -f /etc/yum.repos.d/C* > /dev/null
cat << ceshi > /etc/yum.repos.d/youyou.repo
[base]
name=CentOS-\$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/\$releasever/os/\$basearch/
enable=1
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/\$releasever/os/\$basearch/RPM-GPG-KEY-CentOS-7
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
enable=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7

ceshi
	elif [ `version` -eq 8 ];then
		rm -f /etc/yum.repos.d/C* > /dev/null
cat << ceshi > /etc/yum.repos.d/youyou.repo
[base]
name=CentOS-\$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/\$releasever/BaseOS/\$basearch/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[App]
name=CentOS-\$releasever - App
baseurl=http://mirrors.aliyun.com/centos/\$releasever/AppStream/\$basearch/os/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
enable=1
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
enable=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-8
ceshi
	else
		echo 此脚本仅支持6,7,8三个版本
	fi
	yum repolist
}
#配置光盘源
pz_yum_iso(){
	if `lsblk|grep 'sr0' &> /dev/null`; then
        mkdir /youyou_iso &> /dev/null
        mount /dev/sr0 /youyou_iso &> /dev/null
        [ -f /etc/yum.repos.d/youyou.repo ] && rm -f /etc/yum.repos.d/C* > /dev/null
		[ -f /etc/yum.repos.d/youyou_iso.repo ] || rm -f /etc/yum.repos.d/C* > /dev/null
cat << ceshi > /etc/yum.repos.d/youyou_iso.repo
[base]
name=CentOS-iso
baseurl=file:///youyou_iso
enable=1
gpgcheck=0
#gpgcheck=1
#gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
ceshi
        yum repolist
else
        echo 请连接光盘 
fi

}
#安装常用软件
install_app(){
	rpm -q vim &> /dev/null || yum install -y vim
	rpm -q bash-completion &> /dev/null || yum install -y bash-completion
	rpm -q autofs &> /dev/null || yum install -y autofs
	rpm -q lrzsz &> /dev/null || yum install -y lrzsz
	systemctl enable autofs
	systemctl start autofs
}
#更改PS1 命令提示符颜色
change_ps1(){
	echo -e "$col1 1.请选择你的颜色$colend"
	echo -e "$col2 2.请选择你的颜色$colend"
	echo -e "$col3 3.请选择你的颜色$colend"
	echo -e "$col4 4.请选择你的颜色$colend"
	echo -e "$col5 5.请选择你的颜色$colend"
	echo -e "$col6 6.请选择你的颜色$colend"
	echo -e "$col7 7.请选择你的颜色$colend"
	read -p "输入你的选择:" colchoice
	if [[ $colchoice =~ [1-7] ]]; then
		PS1="\[\e[3${colchoice}m\][\u@\h \W]\\\$\[${colend}\]"
	else
		echo 输入有误
	fi
	echo PS1=\'$PS1\' > /etc/profile.d/env.sh
	chmod +x /etc/profile.d/env.sh
	unset colchoice
	echo "请自己执行:source /etc/profile.d/env.sh"
	source /etc/profile.d/env.sh
#	sed -i "/# Source/asource /etc/profile.d/env.sh" /root/.bashrc
}
#扫描磁盘
scan_disk(){
	local sd=`lsblk | grep -v "^sr.*" | grep "^s.*" | cut -d' ' -f1 | tr '\n' ' '`
	if [ $? -eq 0 ] ; then
		host=`ls -l /sys/block/sda | grep -o "host[[:digit:]]\+"`
		echo '- - -' > /sys/class/scsi_host/${host}/scan
		sd=`lsblk | grep -v "^sr.*" | grep "^s.*" | cut -d' ' -f1 | tr '\n' ' '`
	fi
	local hd=`lsblk | grep -v "^sr.*" | grep "^h.*" | cut -d' ' -f1 | tr '\n' ' '`
	local nv=`lsblk | grep -v "^sr.*" | grep "^n.*" | cut -d' ' -f1 | tr '\n' ' '`
	local cipan="$sd$hd$nv"
	echo -e "$col1 磁盘是:$cipan$colend"
}
#更改别名
change_alias(){
	cat /root/.bashrc | grep "alias vi" &> /dev/null || sed -i "/# Source/ialias vi='vim'" /root/.bashrc
	cat /root/.bashrc | grep "alias yy" &> /dev/null || sed -i "/# Source/ialias yy='yum install -y'" /root/.bashrc
}
#删除变量
unset_bianlian(){
	unset col1
	unset col2
	unset col3
	unset col4
	unset col5
	unset col6
	unset col7
	unset colend
}
#查看操作版本
version(){
	echo `sed -nr 's/^.* ([0-9]+)\..*/\1/p' /etc/redhat-release`

}
#定义颜色
color(){
	col1='\e[31m'
	col2='\e[32m'
	col3='\e[33m'
	col4='\e[34m'
	col5='\e[35m'
	col6='\e[36m'
	col7='\e[37m'
	colend='\e[0m'
}
#修改vim环境
change_vimrc(){
		if [ ! -f /root/.vimrc ];then
cat << vimr > /root/.vimrc
set ignorecase
set cursorline
set autoindent
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call setline(1,"#!/bin/bash") 
call setline(2,"#") 
call setline(3,"#********************************************************************") 
call setline(4,"#Author:		liuhao") 
call setline(5,"#QQ: 			1921160095") 
call setline(6,"#Date: 			".strftime("%Y-%m-%d"))
call setline(7,"#FileName:		".expand("%"))
call setline(8,"#Description:		The test script") 
call setline(9,"#Copyright (C): 	".strftime("%Y")." All rights reserved")
call setline(10,"#********************************************************************") 
call setline(11,"") 
endif
endfunc
autocmd BufNewFile * normal G
vimr
		else
			echo ".vimrc exist"
		fi
		echo "请自己执行:source /root/.bashrc"
		#	source /root/.bashrc
}
#二级菜单-网络管理
networkManager(){
        while true;do
cat<< eof
网络管理:
请选择你要更改的项目:
1. 更改自己网卡为eth 0 开头(会重启只能单独选择)
2. 更改ip
3. 关闭防火墙
4. 返回上一级
eof
		read -p "你的选择是:"  ans
		case $ans in 
		1)
			net_card_name
			;;
		2)
			ip_config
			;;
		3)
			stop_firewall
			;;
		4)
			echo "exit"
			break
			;;
		*)
			echo $ans
			sayhello
		esac
        done
		unset ans
}
#二级菜单-软件管理
APPmanager(){
        while true;do
cat<< eof
软件管理:
1. 配置yum源
2. 配置光盘源
3. 安装常用软件
4. 返回上一级
eof
		read -p "你的选择是:"  ans
		case $ans in 
		1)
			pz_yum_ali
			;;
		2)
			pz_yum_iso
			;;
		3)
			install_app
			;;
		4)
			echo "exit"
			break
			;;
		*)
			echo $ans
			sayhello
		esac
        done
		unset ans
}
#二级菜单-环境管理
init_env(){
        while true;do
cat<< eof
环境管理:
1. 更改环境颜色
2. 更改别名
3. 更改vim
4. 返回上一级
eof
		read -p "你的选择是:"  ans
		case $ans in 
		1)
			change_ps1
			;;
		2)
			change_alias
			;;
		3)
			change_vimrc
			;;
		4)
			echo "exit"
			break
			;;
		*)
			echo $ans
			sayhello
		esac
        done
		unset ans
}

display_menu(){
cat<< eof
1.网络管理
	2.1 更改网卡
	2.2 更改ip
	2.3 关闭防火墙
	2.4 返回上一级
2.软件管理
	3.1 配置yum源
	3.2 配置光盘源
	3.3 安装常用软件
	3.4 返回上一级
3.环境管理
	4.1 更改环境颜色
	4.2 更改别名
	4.3 更改vim
	4.4 返回上一级
eof
}



# main 主程序开始
# main 主程序开始
# main 主程序开始
color
echo -e ${col4} 你的centos版本是`version` ${colend}

while true
do
cat<< eof
`echo -e ${col4} 请选择你要更改的项目: ${colend}`
`echo -e ${col6} 1.网络管理 ${colend}`
`echo -e ${col6} 2.软件管理 ${colend}`
`echo -e ${col6} 3.环境管理 ${colend}`
`echo -e ${col6} 4.扫描磁盘,列出当前磁盘 ${colend}`
`echo -e ${col6} 5.运维管理 ${colend}`
`echo -e ${col6} 8.查看此脚本所有功能 ${colend}`
`echo -e ${col1} 9.退出exit ${colend}`
eof
read -p "你的选择是:" choice
case $choice in 
1)
	networkManager
	;;
2)
	APPmanager
	;;
3)
	init_env
	;;
4)
	scan_disk
	;;
5)
	scan_disk
	;;
8)
	display_menu
	;;
9)
	echo exit
	unset_bianlian
	break
	;;
*)
	echo $choice
	sayhello
esac
done
unset choice

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值