①基本格式:脚本文件第一行标注执行的shell为bashshell
#!/bin/bash
②apache源码部署脚本(思路分析)
第一步:下载源码包;
为了把下载的包存放在/usr/src/下,先进入/usr/src/目录:cd /usr/src
下载:wget -c https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.46.tar.bz2
如果没有wget命令,需先安装:yum install -y wget
第二步:解压源码包;
tar -xjf httpd-2.4.46.tar.bz2
第三步:安装所需要的各种库文件;
第四步:预编译以及配置模块;
cd httpd-2.4.46
./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-proxy
第五步:编译;
make -j4
第六步:安装;
make -j4 && make -j4 install
第七步:启动;
cd /usr/local/apache/bin/apachectl start
echo "/usr/local/apache/bin/apachectl start" >>/etc/rc.local 加入开机启动
第八步:测试.
curl http://localhost
脚本实现:vim auto_install_apache_v1.sh
#auto install apache
#2020年8月30日19:48:52
#by author mc
#######################################################
down_dir="/usr/src"
apache_version="httpd-2.4.46"
apache_dir="/usr/local/apache"
apache_name="httpd-2.4.46.tar.bz2"
apache_module="--enable-so --enable-rewrite --enable-proxy"
apache_url="https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.46.tar.bz2"
apache_Support_library="gcc gcc-c++ pcre* apr apr-devel apr-util apr-util-devel tar make bzip2-devel zlib zlib-devel"
yum install wget -y
cd $down_dir
wget -c $apache_url
tar -xjf $apache_name
cd $apache_version
yum install -y $apache_Support_library
./configure --prefix=$apache_dir $apache_module
make -j4
make -j4 install
cd $apache_dir/bin
./apachectl start
echo "$apache_dir/bin/apachectl start" >>/etc/rc.local
ps -aux |grep httpd
netstat -ntlp |grep 80
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
curl http://localhost
echo "apache软件安装成功,安装目录在$apache_dir"
③变量:
变量名=变量值,如:a="123"
使用变量:${a}
若需要输出123456,则这样输出:echo ${a}456;
若需要输出123/$456,则这样输出:echo ${a}/\$456
$的几个参数:
echo $? 上一个命令是否成功执行,成功执行返回0,否则返回非0,如:
echo $n 输出脚本执行的第n个参数
echo $* 输出当前脚本的所有参数
echo $0 输出脚本名称
echo $# 输出当前脚本的参数个数
echo $$ 输出当前程序的pid
环境变量:
可自定义系统变量:echo "export PATH=$PATH:/usr/local/apache" >> /etc/profile
source /etc/profile 使环境变量生效
生效后定义的环境变量下的所有启动文件都可以在任何目录使用
④流程控制语句if
语法如下:
if (条件1);then
操作1;
else
操作2;
fi
实战:特别注意,涉及到运算要使用小括号号括起来。
#!/bin/bash
#2020年8月31日20:21:19
#if控制语句练习
#by author wxm
a=$1
b=$2
$a $b
if (($?==0));then
echo yes;
else
echo no;
fi
运行结果:
查看脚本执行过程:sh -x if_test.sh
判断数字大小:
#!/bin/bash
#2020年8月31日20:21:19
#if控制语句练习
#by author wxm
a=$1
b=$2
if (($a > $b));then
echo "$a>$b";
else
echo "$a<$b";
fi
test语法:
test -f test.sh 判断文件test.sh是否属于一个文件,属于文件返回0,不属于返回1
test -e test.sh 判断文件test.sh是否存在,存在返回0,不存在返回1
test -d abc 判断abc是否是一个目录,是返回0,不是返回1
在if中使用[ ]属于使用test,用来判断数字或者字符是否相等,但是[]内不能进行数学运算,即加减乘除以及大于小于不能使用。如:
#!/bin/bash
a=100;
if [ $a -eq 100 ] ;then
echo $a等于100;
else
$a不等于100;
fi
输出绿色点线:
echo -e '\033[32m.......................................\033[0m'
LAMP环境自动搭建脚本
mysql自动部署脚本:
#!/bin/bash
#2020年9月1日21:30:12
#install_mysql
#by wp
down_dir="/usr/src"
yum_Lib="gcc gcc-c++ make tar openssl openssl-devel cmake ncurses ncurses-devel bison"
tar_name="mysql-5.6.39.tar.gz"
my_version="mysql-5.6.39"
my_module="-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_DEBUG=0 -DWITH_SSL=yes -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1"
my_install_dir="/usr/local/mysql"
my_data="/data/mysql"
HOSTNAME="127.0.0.1"
PORT="3306"
USERNAME="root"
PASSWORD="wxm9077"
passwd="'${PASSWORD}'"
impower="GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ${passwd} WITH GRANT OPTION;"
set_save="flush privileges;"
cd ${down_dir}
yum install -y ${yum_Lib}
tar -xf ${tar_name}
cd ${my_version}
cmake -DCMAKE_INSTALL_PREFIX=${my_install_dir} -DMYSQL_DATADIR=${my_data} ${my_module}
make -j4 && make -j4 install
useradd -s /sbin/nologin mysql
cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
echo "export PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
source /etc/profile
source /etc/profile
source /etc/profile
echo "[mysqld]
bind-address=0.0.0.0
port=3306
datadir=/data/mysql
user=mysql
skip-name-resolve
long_query_time=2
slow_query_log_file=/data/mysql/mysql-slow.log
expire_logs_days=2
innodb-file-per-table=1
innodb_flush_log_at_trx_commit=2
log_warnings=1
max_allowed_packet=512M
connect_timeout=60
net_read_timeout=120
explicit_defaults_for_timestamp=true
[mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
" > /etc/my.cnf
mkdir -p ${my_data}
chown -R mysql:mysql ${my_install_dir} ${my_data}
yum install -y perl-Module-Install
${my_install_dir}/scripts/mysql_install_db --basedir=${my_install_dir} --user=mysql --datadir=${my_data}/
echo "[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
[Install]
WantedBy=multi-user.target
" > /usr/lib/systemd/system/mysqld.service
systemctl start mysqld
systemctl enable mysqld
netstat -tulnp|grep mysql
mysql --version
ps -aux |grep mysqld
mysqladmin -h 127.0.0.1 -u root password 'wxm9077'
mysql -h 127.0.0.1 -uroot -pwxm9077 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'wxm9077' WITH GRANT OPTION;"
mysql -h 127.0.0.1 -uroot -pwxm9077 -e "flush privileges;"
echo -e "\033[32mMYSQL服务成功安装,版本号为${my_version},安装路径在${my_install_dir}\033[0m"
php自动安装部署脚本及LAMP联合配置
#!/bin/bash
#2020年9月1日21:30:12
#install_php
#by wp
cd /usr/src
wget -c http://mirrors.sohu.com/php/php-5.3.28.tar.bz2
tar -xf php-5.3.28.tar.bz2
cd php-5.3.28
mv /usr/src/php-5.3.28/Zend/zend_language_parser.h /usr/src/php-5.3.28/Zend/zend_language_parser.h.bak
cp /usr/src/zend_language_parser.h /usr/src/php-5.3.28/Zend/
yum install –y libxml2 libxml2-devel
./configure --prefix=/usr/local/php --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-apxs2=/usr/local/apache/bin/apxs
make -j4 && make -j4 install
echo -e "\033[32mPHP服务成功安装!\033[0m"
echo -e "\033[32m开始配置LAMP环境!\033[0m"
echo -e "\033[32m开始配置LAMP环境!\033[0m"
echo -e "\033[32m开始配置LAMP环境!\033[0m"
mv /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.back
cp /usr/src/httpd.conf /usr/local/apache/conf/
cp /usr/src/test.php /usr/local/apache/htdocs/
/usr/local/apache/bin/apachectl -t
/usr/local/apache/bin/apachectl graceful
/usr/local/apache/bin/apachectl restart
echo -e "\033[32m!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\033[0m"
echo -e "\033[32mLAMP环境测试结果!\033[0m"
echo -e "\033[32m.............................................................................\033[0m"
curl http://localhost/test.php
echo -e "\033[32m.............................................................................\033[0m"
echo -e "\033[32mLAMP环境成功搭建!\033[0m"
for循环语句
格式:
for i in `seq 2`
do
ssh -l root 127.0.0.$i "$1"
done
执行脚本:
自动安装配置LAMP脚本:
#!/bin/bash
#2020年9月3日21:17:16
#自动安装部署LAMP环境,并整合架构
#by wxm9077
################################################################################
#apache变量
down_dir="/usr/src"
apache_version="httpd-2.4.46"
apache_dir="/usr/local/apache"
apache_name="httpd-2.4.46.tar.bz2"
apache_module="--enable-so --enable-rewrite --enable-proxy"
apache_url="https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.46.tar.bz2"
apache_Support_library="gcc gcc-c++ pcre* apr apr-devel apr-util apr-util-devel tar make bzip2-devel zlib zlib-devel"
#mysql变量
#down_dir="/usr/src"
my_yum_Lib="gcc gcc-c++ make tar openssl openssl-devel cmake ncurses ncurses-devel bison"
my_tar_name="mysql-5.6.39.tar.gz"
my_version="mysql-5.6.39"
my_module="-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_DEBUG=0 -DWITH_SSL=yes -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1"
my_install_dir="/usr/local/mysql"
my_data="/data/mysql"
my_HOSTNAME="127.0.0.1"
port="3306"
my_USERNAME="root"
my_PASSWORD="wxm9077"
my_passwd1="'${my_PASSWORD}'"
my_impower="GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY ${my_passwd1} WITH GRANT OPTION;"
my_set_save="flush privileges;"
#php变量
#down_dir="/usr/src"
php_vervion="php-5.3.28"
php_tar="php-5.3.28.tar.bz2"
php_url="http://mirrors.sohu.com/php/php-5.3.28.tar.bz2"
php_lib="libxml2 libxml2-devel"
php_dir="/usr/local/php"
php_model="--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-apxs2=/usr/local/apache/bin/apxs"
echo -e "\033[31m............................LAMP自动部署程序 by wxm9077 ................................\033[0m"
echo
echo -e "\033[32m输入“1”将安装apache服务\033[0m"
echo
echo -e "\033[32m输入“2”将安装MYSQL服务\033[0m"
echo
echo -e "\033[32m输入“3”将安装PHP程序\033[0m"
echo
echo -e "\033[32m输入“4”将配置及验证LAMP环境\033[0m"
echo
echo -e "\033[32m输入其他字符将退出脚本!!!\033[0m"
echo
echo
echo
read -p "请输入:" choose
if [ $choose -eq 1 ]; then
if [ ! -d "$apache_dir" ];then
echo "即将安装apache服务"
sleep 2s
echo "......"
sleep 2s
echo "......"
sleep 2s
echo "开始安装apache服务"
yum install wget -y
cd $down_dir
wget -c $apache_url
if [ "$?" -eq "0" ];then
tar -xf $apache_name
cd $apache_version
yum install -y $apache_Support_library
./configure --prefix=$apache_dir $apache_module
if [ "$?" -eq "0" ];then
make -j4 && make -j4 install
echo "ServerName localhost:80" >> ${apache_dir}/conf/httpd.conf
cd $apache_dir/bin
./apachectl start
echo "$apache_dir/bin/apachectl start" >>/etc/rc.local
ps -aux |grep httpd
netstat -ntlp |grep 80
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
curl http://localhost
echo -e "\033[31mAPACHE软件安装成功,安装目录在$apache_dir\033[0m"
else
echo "请检查configure设置是否合理,安装相应环境再试!"
fi
else
echo "请检查网络或者下载链接是否正确!"
exit 0
fi
else
echo "本机已安装apache服务,请确认后重试"
fi
elif [ $choose -eq 2 ]; then
if [ ! -d "$my_install_dir" ];then
echo "即将安装MySQL服务"
sleep 2s
echo "......"
sleep 2s
echo "......"
sleep 2s
echo "开始安装MySQL服务"
cd ${down_dir}
yum install -y ${my_yum_Lib}
tar -xf ${my_tar_name}
cd ${my_version}
cmake -DCMAKE_INSTALL_PREFIX=${my_install_dir} -DMYSQL_DATADIR=${my_data} ${my_module}
if [ "$?" -eq "0" ];then
make -j4 && make -j4 install
useradd -s /sbin/nologin mysql
cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
echo "export PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
source /etc/profile
source /etc/profile
source /etc/profile
echo "[mysqld]
bind-address=0.0.0.0
port=3306
datadir=/data/mysql
user=mysql
skip-name-resolve
long_query_time=2
slow_query_log_file=/data/mysql/mysql-slow.log
expire_logs_days=2
innodb-file-per-table=1
innodb_flush_log_at_trx_commit=2
log_warnings=1
max_allowed_packet=512M
connect_timeout=60
net_read_timeout=120
explicit_defaults_for_timestamp=true
[mysqld_safe]
log-error=/data/mysql/mysqld.log
pid-file=/data/mysql/mysqld.pid
" > /etc/my.cnf
mkdir -p ${my_data}
chown -R mysql:mysql ${my_install_dir} ${my_data}
yum install -y perl-Module-Install
${my_install_dir}/scripts/mysql_install_db --basedir=${my_install_dir} --user=mysql --datadir=${my_data}/
echo "[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
[Install]
WantedBy=multi-user.target
" > /usr/lib/systemd/system/mysqld.service
systemctl start mysqld
systemctl enable mysqld
netstat -tulnp|grep mysql
mysql --version
ps -aux |grep mysqld
mysqladmin -h 127.0.0.1 -u root password 'wxm9077'
mysql -h 127.0.0.1 -uroot -pwxm9077 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'wxm9077' WITH GRANT OPTION;"
mysql -h 127.0.0.1 -uroot -pwxm9077 -e "flush privileges;"
echo -e "\033[32mMYSQL服务成功安装,版本号为${my_version},安装路径在${my_install_dir}\033[0m"
else
echo "预编译失败,请检查cmake参数及模块设置后重新安装!"
exit 0
fi
else
echo "本机已安装mysql服务,请确认后重试"
fi
elif [ $choose -eq 3 ]; then
if [ ! -d "$php_dir" ];then
echo "即将安装PHP程序"
sleep 2s
echo "......"
sleep 2s
echo "......"
sleep 2s
echo "开始安装PHP程序"
cd ${down_dir}
wget -c ${php_url}
if [ "$?" -eq "0" ];then
tar -xf ${php_tar}
cd ${php_vervion}
mv ${down_dir}/${php_vervion}/Zend/zend_language_parser.h ${down_dir}/${php_vervion}/Zend/zend_language_parser.h.bak
cp ${down_dir}/zend_language_parser.h ${down_dir}/${php_vervion}/Zend/
yum install –y ${php_lib}
./configure --prefix=${php_dir} ${php_model}
if [ "$?" -eq "0" ];then
make -j4 && make -j4 install
echo -e "\033[32mPHP服务成功安装!安装路径在${php_dir}目录下!\033[0m"
else
echo "预编译失败,请检查configure参数及模块设置后重新安装!"
fi
else
echo "请检查网络或者下载链接是否正确!"
fi
else
echo "本机已安装php程序,请确认后重试"
fi
elif [ $choose -eq 4 ]; then
echo "正在检查LAMP环境" ;
sleep 2s
echo "......"
sleep 2s
echo "......"
cd ${apache_dir}/bin
if [ "$?" -eq "0" ];then
echo "apache已安装,正在检查mysql"
systemctl restart mysqld
if [ "$?" -eq "0" ];then
echo "apache和mysql已安装,正在检查php"
cd ${php_dir}
if [ "$?" -eq "0" ];then
echo "LAMP已安装,将进行配置,请稍等......"
sleep 1s
echo -e "\033[32m开始配置LAMP环境!\033[0m"
sleep 1s
echo -e "\033[32m开始配置LAMP环境!\033[0m"
sleep 1s
echo -e "\033[32m开始配置LAMP环境!\033[0m"
sleep 3s
mv ${apache_dir}/conf/httpd.conf ${apache_dir}/conf/httpd.conf.back
cp ${down_dir}/httpd.conf ${apache_dir}/conf/
cp ${down_dir}/test.php ${apache_dir}/htdocs/
${apache_dir}/bin/apachectl -t
${apache_dir}/bin/apachectl graceful
${apache_dir}/bin/apachectl restart
echo -e "\033[32m!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\033[0m"
echo -e "\033[31mLAMP环境测试结果!\033[0m"
echo -e "\033[31m.............................................................................\033[0m"
echo `curl http://localhost/test.php`
echo -e "\033[31m.............................................................................\033[0m"
echo -e "\033[31mLAMP环境成功搭建!\033[0m"
else
echo "未安装安装php程序,请运行脚本安装php"
fi
else
echo "未安装mysql,运行脚本安装mysql"
fi
else
echo "未安装apache,请运行脚本安装apache"
fi
else
echo "即将退出";
sleep 3s
echo "已退出程序,再见!"
exit 0
fi