shell编程重点记录

①基本格式:脚本文件第一行标注执行的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

	

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值