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