hudeya 发表于 2018-11-23 13:08:27

分析安装包lnmp中的apache.sh脚本

  分析shell脚本,学习方法,这个其实是在lnmp环境下再安装apache,实现lnmpa环境。
#!/bin/bash
#定义PATH变量
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
#声明PATH为环境变量
export PATH
# Check if user is root
#id -u 当前用户的uid,也可以使用反引号`id -u`,效果一样,0为root的用户id
if [ $(id -u) != "0" ]; then
echo "Error: You must be root to run this script, please use root to install lnmp"
exit 1
fi
#清屏操作
clear
#可以识别特殊字符
printf "=======================================================================\n"
printf "Install Apache for LNMP V1.0,Written by Licess \n"
printf "=======================================================================\n"
printf "LNMP is a tool to auto-compile & install Nginx+MySQL+PHP on Linux \n"
printf "This script is a tool to install Apache for lnmp \n"
printf "\n"
printf "For more information please visit http://www.lnmp.org \n"
printf "=======================================================================\n"
#把当前路径给变量cur_dir
cur_dir=$(pwd)
#这个重点说一下,察看ip,
#通过1次grep,过滤掉不包含inet的行
#2次反向grep也就是取不包含的行,过滤掉包含127.0.0.1和inet6的行
#awk 打印第2列
#tr -d 去掉addr:,这样就只剩下ip
ipv4=`ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
#set Server Administrator Email Address
ServerAdmin=""
#读取用户键盘输入还可以使用-t 30 指定时间限制
read -p "Please input Administrator Email Address:" ServerAdmin
if [ "$ServerAdmin" == "" ]; then
echo "Administrator Email Address will set to webmaster@example.com!"
ServerAdmin="webmaster@example.com"
else
echo "==========================="
echo Server Administrator Email="$ServerAdmin"
echo "==========================="
fi
#定义函数
get_char()
{
#打印当前终端的设置赋予变量
SAVEDSTTY=`stty -g`
#echo input characters
stty -echo
stty cbreak
#把指定的输入文件拷贝到指定的输出文件中,并且在拷贝的过程中可以进行格式转换
#if =输入文件,bs = bytes 同时设置读/写缓冲区的字节数(等于设置obs和ibs),count = blocks 只拷贝输入的blocks块
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
echo ""
echo "Press any key to start install Apache for LNMP or Press Ctrl+C to cancel..."
char=`get_char`
printf "===================== Check And Download Files =================\n"
#test测试 如果文件的长度不为零,则为真
if [ -s httpd-2.2.22.tar.gz ]; then
echo "httpd-2.2.22.tar.gz "
else
echo "Error: httpd-2.2.22.tar.gz not found!!!download now......"
wget -c http://soft.vpser.net/web/apache/httpd-2.2.22.tar.gz
fi
#mod_rpaf是apache的一个模块,目的是为了获取访客的真实IP
if [ -s mod_rpaf-0.6.tar.gz ]; then
echo "mod_rpaf-0.6.tar.gz "
else
echo "Error: mod_rpaf-0.6.tar.gz not found!!!download now......"
wget -c http://soft.vpser.net/web/apache/rpaf/mod_rpaf-0.6.tar.gz
fi
#php源码
if [ -s php-5.2.17.tar.gz ]; then
echo "php-5.2.17.tar.gz "
else
echo "Error: php-5.2.17.tar.gz not found!!!download now......"
wget -c http://soft.vpser.net/web/php/php-5.2.17.tar.gz
fi
printf "=========================== install Apache ======================\n"
#停止当前的其他服务
echo "Stoping Nginx..."
/etc/init.d/nginx stop
echo "Stoping MySQL..."
/etc/init.d/mysql stop
echo "Stoping PHP-FPM..."
/etc/init.d/php-fpm stop
if [ -s /etc/init.d/memceached ]; then
echo "Stoping Memcached..."
/etc/init.d/memcacehd stop
fi
#备份
echo "Backup old php configure files....."
mkdir /root/lnmpbackup/
cp /root/lnmp /root/lnmpbackup/
cp /usr/local/php/etc/php.ini /root/lnmpbackup/
cp /usr/local/php/etc/php-fpm.conf /root/lnmpbackup/
#开始编译安装
cd $cur_dir
rm -rf httpd-2.2.22/
tar zxvf httpd-2.2.22.tar.gz
cd httpd-2.2.22/
./configure --prefix=/usr/local/apache --enable-headers --enable-mime-magic --enable-proxy --enable-so --enable-rewrite --enable-ssl --enable-deflate --enable-suexec --disable-userdir --with-included-apr --with-mpm=prefork --with-ssl=/usr --disable-userdir --disable-cgid --disable-cgi --with-expat=builtin
make && make install
cd ..
mv /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
#\cp 不走alias的cp
\cp $cur_dir/conf/httpd.conf /usr/local/apache/conf/httpd.conf
\cp $cur_dir/conf/httpd-default.conf /usr/local/apache/conf/extra/httpd-default.conf
\cp $cur_dir/conf/httpd-vhosts.conf /usr/local/apache/conf/extra/httpd-vhosts.conf
\cp $cur_dir/conf/httpd-mpm.conf /usr/local/apache/conf/extra/httpd-mpm.conf
\cp $cur_dir/conf/rpaf.conf /usr/local/apache/conf/extra/rpaf.conf
#sed实现内容替换
sed -i 's/#ServerName www.example.com:80/ServerName www.lnmp.org:88/g' /usr/local/apache/conf/httpd.conf
sed -i 's/ServerAdmin you@example.com/ServerAdmin '$ServerAdmin'/g' /usr/local/apache/conf/httpd.conf
#sed -i 's/www.lnmp.org/'$domain'/g' /usr/local/apache/conf/extra/httpd-vhosts.conf
sed -i 's/webmaster@example.com/'$ServerAdmin'/g' /usr/local/apache/conf/extra/httpd-vhosts.conf
mkdir -p /usr/local/apache/conf/vhost
#向/usr/local/apache/conf/httpd.conf中末尾追加内容Include conf/vhost/*.conf
cat >>/usr/local/apache/conf/httpd.conf
页: [1]
查看完整版本: 分析安装包lnmp中的apache.sh脚本