脚本工具
服务类
一键部署Apache服务
思路:
安装
改配置文件
虚拟主机
判断一下虚拟主机的配置在不在?
cat << END >> /etc/httpd/conf/httpd.conf
虚拟主机的内容
END
写测试页
启动服务
[root@shell /shell]# cat apache.txt
www.a.com /var/www/html/a
www.b.com /var/www/html/b
[root@shell /shell]# vim Apache-install.sh
#!/bin/bash
# apache的一键安装脚本
dir=`pwd`
file="${dir}/apache.txt"
conf="/etc/httpd/conf/httpd.conf"
# 判断执行脚本的用户身份
if [ $UID -ne 0 ]
then
exit 1
fi
# 安装软件
echo "第一步:安装apache"
ping -W1 -c 1 www.baidu.com &> /dev/null
if [ $? -ne 0 ]
then
exit 2
else
yum install -y httpd &> /dev/null && echo "apache安装成功."
fi
# 编辑配置文件,设置虚拟主机
echo "第二步:编辑配置文件,写入虚拟主机"
grep "NameVirtualHost" $conf &> /dev/null
if [ $? -ne 0 ]
then
echo "NameVirtualHost *:80" >> $conf
fi
while read line
do
fqdn=$(echo $line | cut -d " " -f 1)
html_dir=$(echo $line | cut -d " " -f 2)
grep "${fqdn}" $conf &> /dev/null
if [ $? -ne 0 ]
then
cat << END >> $conf
<VirtualHost *:80>
ServerName $fqdn
DocumentRoot "${html_dir}"
ErrorLog logs/${fqdn}-error.log
CustomLog logs/${fqdn}-access.log common
<Directory "${html_dir}">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
END
# 准备测试页
if [ ! -d $html_dir ]
then
mkdir -p $html_dir
echo "$fqdn" > ${html_dir}/index.html
fi
else
echo "${fqdn}已配置."
continue
fi
done < $file
# 启动服务
echo "第三步:启动服务"
systemctl restart httpd
systemctl enable httpd &> /dev/null
一键部署NFS服务
[root@shell /shell]# vim NFS-install.sh
#!/bin/bash
# NFS的一键安装脚本
sharedir="/nfs_share"
# 判断执行脚本的用户身份
if [ $UID -ne 0 ]
then
exit 1
fi
# 安装软件
echo "第一步:安装NFS"
ping -W1 -c 1 www.baidu.com &> /dev/null
if [ $? -ne 0 ]
then
exit 2
else
yum install -y nfs-utils &> /dev/null && echo "nfs 安装成功."
fi
# 创建共享目录
echo "第二步:准备共享目录"
if [ ! -d $sharedir ]
then
mkdir $sharedir
chmod 757 $sharedir
fi
# 修改配置文件
echo "第三步:修改配置文件"
grep "$sharedir" /etc/exports
if [ $? -ne 0 ]
then
cat << END >> /etc/exports
$sharedir 172.16.0.0/16(rw)
END
else
echo "${sharedir}已存在."
exit 3
fi
# 启动服务
echo "第四步:启动服务"
systemctl restart nfs # 2> /dev/null
systemctl enable nfs &> /dev/null
# 判断服务的启动状态
#netstat -antp | grep :2049 &> /dev/null
#if [ $? -eq 0 ]
# then
# echo "NFS启动成功."
#else
# echo "NFS启动失败."
#fi
一键部署FTP服务
#!/bin/bash
# ftp的一键部署脚本
# 安装
echo "第1步:安装"
rpm -q vsftpd &> /dev/null
if [ $? -ne 0 ]
then
ping -W 1 -c 3 www.baidu.com &> /dev/null
if [ $? -eq 0 ]
then
yum install -y vsftpd &> /dev/null && echo "vsftpd install success."
else
echo "当前主机无法联网."
exit 1
fi
else
echo "vsftpd已经安装."
fi
conf="/etc/vsftpd/vsftpd.conf"
# 配置
echo "第2步:配置"
echo "### 1 匿名用户 ###"
echo "### 2 普通用户 ###"
read -p "请输入ftp的部署模式:" choose
case $choose in
1)
sed -i.bak '29s/^#//' $conf
sed -i '33s/^#//' $conf
if [ ! -d /var/ftp/upload ]
then
mkdir /var/ftp/upload
chown ftp /var/ftp/upload
fi
touch /var/ftp/file1
touch /var/ftp/file2
;;
2)
useradd ftp1
useradd ftp2
echo "ftp1" | passwd --stdin ftp1 &> /dev/null
echo "ftp2" | passwd --stdin ftp2 &> /dev/null
;;
esac
# 启动
systemctl start vsftpd
systemctl enable vsftpd
netstat -antp | grep vsftpd &> /dev/null
if [ $? -eq 0 ]
then
echo "ftp启动成功"
else
echo "ftp启动失败"
fi
一键部署SAMBA服务
在/test/目录下创建文件sambafile文件,内容格式如下,分区名,容量,挂载目录,用户名,密码
hr 5G /hr hr hr
sale 5G /sale sale sale
(1)创建可扩展的pv分区
#!/bin/bash
# samba-server的一键部署脚本
# 第一部分:准备存储空间
# 创建lv
ls /dev/sdb &> /dev/null
if [ $? -ne 0 ]
then
echo "硬盘sdb不存在"
exit 1
fi
ls /dev/sdb1 &> /dev/null
if [ $? -eq 0 ]
then
echo "硬盘sdb存在分区"
exit 2
fi
pvcreate /dev/sdb
vgcreate vgsamba /dev/sdb
while read line
do
name=`echo $line | awk '{print $1}'`
size=`echo $line | awk '{print $2}'`
path=`echo $line | awk '{print $3}'`
lvcreate -L $size -n lv${name} vgsamba
mkfs.xfs /dev/vgsamba/lv${name} &> /dev/null
if [ ! -d $path ]
then
mkdir -p $path
fi
grep "^/dev/mapper/vgsamba-lv${name}" /etc/fstab &> /dev/null
if [ $? -ne 0 ]
then
cat << END >> /etc/fstab
/dev/mapper/vgsamba-lv${name} $path xfs defaults 0 0
END
fi
mount -a
done < /test/sambafile
(2)配置samba服务
#!/bin/bash
# samba-server的一键部署脚本
# 第二部分:配置samba-server
# 安装
echo "samba的部署有3步。"
echo "第1步:安装"
rpm -q samba &> /dev/null
if [ $? -ne 0 ]
then
ping -W 1 -c 3 www.baidu.com &> /dev/null
if [ $? -eq 0 ]
then
yum install -y samba samba-common samba-client &>/dev/null && echo "samba install success."
else
echo "当前主机无法联网."
exit 1
fi
else
echo "samba已经安装."
fi
# 配置
echo "第2步:配置"
conf="/etc/samba/smb.conf"
while read line
do
name=`echo $line | awk '{print $1}'`
path=`echo $line | awk '{print $3}'`
user=`echo $line | awk '{print $4}'`
pass=`echo $line | awk '{print $5}'`
cp $conf ${conf}.${name}
cat << END >> ${conf}.${name}
[${name}]
comment = ${name}'s Share_dir
path = $path
writable = yes
valid users = $user
create mask = 0644
directory mask = 0755
END
id $user &> /dev/null
if [ $? -ne 0 ]
then
useradd $user -d $path &> /dev/null
echo $pass > /root/passfile
echo $pass >> /root/passfile
smbpasswd -a -s $user < /root/passfile &> /dev/null
else
usermod $user -d $path &> /dev/null
echo $pass > /root/passfile
echo $pass >> /root/passfile
smbpasswd -a -s $user < /root/passfile &> /dev/null
fi
done < /test/sambafile
# 启动
echo "第3步:启动"
systemctl start smb
systemctl enable smb &> /dev/null
netstat -antp | grep smb &> /dev/null
if [ $? -eq 0 ]
then
echo "samba启动成功"
else
echo "samba启动失败"
fi
一键部署DHCP服务
#!/bin/bash
# 一键安装dhcp-server
# 当前的网段是 172.16.0.0/16
# 当前的网关是 172.16.0.254
# 当前线路的DNS-server是 211.137.32.178
echo "dhcp的部署有3步。"
# 安装
echo "第1步:安装"
ping -W 1 -c 3 www.baidu.com &> /dev/null
if [ $? -eq 0 ]
then
yum install -y dhcp &> /dev/null && echo "dhcp install success."
else
echo "当前主机无法联网."
exit 1
fi
# 配置
echo "第2步:配置"
cat << END > /etc/dhcp/dhcpd.conf
subnet 172.16.0.0 netmask 255.255.0.0 {
range 172.16.0.100 172.16.0.200;
option domain-name-servers 211.137.32.178;
option routers 172.16.0.254;
default-lease-time 600;
max-lease-time 7200;
}
END
# 启动
echo "第3步:启动"
systemctl start dhcpd
# 判断是否启动成功
netstat -anupl | grep :67 &> /dev/null
if [ $? -eq 0 ]
then
echo "dhcp已经运行."
else
echo "dhcp处于关闭状态."
fi
日志管理
合并日志
#!/bin/bash
\# 合并上一周的日志文件
logdir="/log/nginx"
filename="access.log-"
logfile="${logdir}/all_access.log"
> $logfile
for i in `seq 7 -1 1`
do
cat ${logdir}/${filename}`date -d "$i day ago" "+%Y%m%d"` >> $logfile
done
模块
循环
for ((i=0;i<8;i++)) <---这种格式顺序好像可以打乱,但是3个组合缺一不可
do
将要执行什么
done
循环套循环
统计目录及子目录个数---从网上摘的
#!/bin/sh
for file in `ls -a`
do
for dir in `find $file -type d`
do
number=`find $dir -type d | wc -l`
echo "The $dir has directories $number"
done
done
#!/bin/sh
for ((i=1;i<=s;i++))
do
for ((j=s;j>i;j--))
do
echo -n " "
done
for ((j=1;j<i*2;j++))
do
echo -n "*"
done
echo " "
done
while循环
while循环注意为方括号[],且注意空格
min=1
max=100
while [ $min -le $max ]
do
echo $min
min=`expr $min + 1`
done
MAX_RUN_NUM=8
cat cfg/res_card_partition.cfg |grep -v '^$'|grep -v "#" | grep -v grep |while read partition
do
nohup sh inv_res_card_process.sh $partition >log/resCard$partition.log 2>&1 &
while [ 1 -eq 1 ]
do
psNum=`ps -ef | grep "inv_res_card_process" | grep -v "grep" | wc -l`
if [ $psNum -ge $MAX_RUN_NUM ]
then
sleep 5
else
break
fi
done
done
while 读文件
通过while read line 从文件读取信息时,
可以使用awk或者cut来选取文件内的对应信息,注意正则表达式的格式
while read line
do
name=`echo $line | awk '{print $1}'`
size=`echo $line | awk '{print $2}'`
path=`echo $line | awk '{print $3}'`
||
fqdn=$(echo $line | cut -d " " -f 1)
html_dir=$(echo $line | cut -d " " -f 2)
此脚本为格式范例,不作为可执行脚本
done < file
双括号形式,内部结构有点像C的语法,注意赋值:i= i+1))
i=1
while(($i<100))
do
if(($i%4==0))
then
echo $i
fi
i=$(($i+1))
done
循环控制语句
break 命令不执行当前循环体内break下面的语句从当前循环退出.
continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行