脚本工具

服务类

一键部署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 命令是程序在本循体内忽略下面的语句,从循环头开始执行

脚本中的sed

匹配关键字,并去掉前边注释

`sed 's/^#\(bbb\)/\1/' file.txt   
 ## \1的意思 就类似于   前面的 (bbb\) \1就是复制这个位置的内容  如果有 第二个 那么久\2就是复制第二个位置的内容

匹配整行替换 (用户修改文件内 = 后边内容)

sed 's/group = nobody/group = php/g' www.conf

SED分隔符遇见路径分隔符号 “/”

使用 ““转义字符,在路径分隔符前添加””

sed -i "s/ORACLE_HOME=/ORACLE_HOME=\/data\/oracle\/product\/11.2.0/g" file

子Shell操作

切换用户只执行一条命令的可以用:

su - oracle -c command

切换用户执行一个shell文件可以用:

su - oracle -s /bin/bash shell.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值