现任职北京某互联网公司运维经理,高级架构师,涉足互联网运维行业已经超过10年。曾服务于京东商城,互动百科等互联网公司,早期运维界新星。 长期专研,C语言开发,操作系统内核,大型互联网架构。http://www.bdkyr.com
全部博文(166)
分类: 系统运维
2017-06-02 11:13:15
参考案例:
需求:编写一个Centos6.7操作系统初始化配置的脚本
第一步:需求拆分
1)基础环境是Centos6.7
2)系统初始化配置,整理经常用到的初始化配置操作
#关闭selinux
#关闭防火墙
#改机器名
#修改网卡的配置文件
#修改ssh配置文件
…
3)要编写的是一个脚本,那就要符合脚本的规则
#!/bin/sh
#creat by laoxue
#Date 2017-5-18
#used for centos init
#声明基础变量
…
…
#脚本主体
…
…
第二步:开始编写脚本
在第一步的需求拆分中,已将各个部分细分完毕,接下来要做的就是,在第一步第三小节的脚本框架的基础上进行填充就好了。
[root@BJ-YF-web001 xuekun]# vim Centos6.7_init.sh
#!/bin/sh
#creat by laoxue
#Date 2017-5-18
#used for centos init
#声明基础变量
LOG_PATH=/centos
LOG_NAME=${LOG_PATH}/a.log
APP_DATE=$(date +%Y%m%d-%H:%M:%S)
HOST_NAME=$1
HOST_PORT=$2
#脚本主体
NETWORK=eth0
if [ ! -d ${LOG_PATH} ];then
mkdir ${LOG_PATH}
fi
echo "开始时间:" $(date +%Y%m%d-%H:%M:%S) >>${LOG_NAME}
#关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config >>${LOG_NAME}
#关闭防火墙
/etc/init.d/iptables stop >>${LOG_NAME}
chkconfig iptables off >>${LOG_NAME}
#改机器名
hostname BJ-YE-web001 >>${LOG_NAME}
sed -i 's/HOSTNAME=test/HOSTNAME=${HOST_NAME}/g' /etc/sysconfig/network >>${LOG_NAME}
#修改网卡的配置文件
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-${NETWORK} >>${LOG_NAME}
ifdown ${NETWORK} && ifup ${NETWORK}
#修改ssh配置文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_laoxue-${APP_DATE}
sed -i 's/#Port 22/Port $HOST_PORT/g' /etc/ssh/sshd_config >>${LOG_NAME}
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config >>${LOG_NAME}
sed -i 's/#PermitEmptyPasswords no/PermitEmptyPasswords no/g' /etc/ssh/sshd_config >>${LOG_NAME}
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config >>${LOG_NAME}
/etc/init.d/sshd restart
echo "结束时间:" $(date +%Y%m%d-%H:%M:%S) >>${LOG_NAME}
脚本主体看起来稍稍复杂,只不过是用sed命令替换了我们用vim编辑配置文件的方式。外加if语句对目录的判断。当然这个脚本还不是最好的,只是拿来做例子,为大家提供一个写Shell脚本的思路,再难的脚本,都是由一条条命令拼接起来的。
更多编写Shell脚本的思路和技巧请关注“老薛Linux大讲堂”