shell 脚本汇总 (持续更新中)

2023-05-16

文章目录

    • 1、计算从1到100所有整数的和
    • 2、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和
    • 3、求从1到100所有整数的偶数和、奇数和
    • 4、写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。
    • 5、shell 计算器
    • 6、99乘法表
    • 7、正等腰三角形与倒等腰三角形
    • 8、直角三角形
    • 9、批量添加用户
    • 10、根据IP地址,批量检查主机状态
    • 11、猜商品价格
    • 12、直线
    • 13、矩形
    • 14、平行四边形
    • 15、梯形
    • 16、菱形
    • 17、输出环境变量PATH所包含的所有目录以及其中的所有可执行文件
    • 18、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码
    • 19、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中
    • 20、mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件
    • 21、菱形通过传参控制形状的可大可小
    • 22、使用shell 一键部署DNS正向解析
    • 23、使用免交互,一键进行PXE批量装机shell脚本
    • 24、一键部署Apache服务
    • 25、一键部署MySQL脚本
    • 26、使用脚本切割Nginx日志并收集
    • 27、一键安装Nginx服务
    • 28、一键部署LNMP
    • 29、一键部署LAMP
    • 30、监控Linux缓存并清理脚本

1、计算从1到100所有整数的和

[root@gcc?~]#vim test1.sh
#!/bin/bash              
#this is zhengshuhe    
sum=0                  
for i in {1..100}        
do                       
  sum=$[$i+$sum]         
done                    
echo $sum               

[root@gcc ~]#chmod +x test1.sh      
[root@gcc ~]#./test1.sh             
5050                                
[root@gcc?~]#vim test7.sh
#!/bin/bash
a=1
sum=0
while [ $a -le 100 ]         
do
  sum=$[$sum+$a]
  let a++                    
done
echo $sum

[root@gcc ~]#sh test7.sh 
5050

2、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和

方法一:

[root@gcc ~]#vim demo3.sh 
#!/bin/bash
read -p "请输入1-100之间的一个整数:" a
sum=0
for ((i=1;i<=a;i++))
do
   sum=$[$sum+$i]
done
echo "从1到$i的整数和为:$sum"

[root@gcc ~]#sh demo3.sh 
请输入1-100之间的一个整数:3
从1到4的整数和为:6

方法二:

[root@gcc ~]#vim demo3.sh 
#!/bin/bash
sum=0
read -p "请输入1-100之间的一个整数:" a
while [ $a -ge 1 ]
do
  sum=$[$sum+$a]
  let a--
done
echo "从1到$a的整数和为

[root@gcc ~]#sh demo3.sh 
请输入1-100之间的一个整数:3
从1到0的整数和为:6

3、求从1到100所有整数的偶数和、奇数和

方法一:

[root@gcc ~]#vim demo4.sh
#!/bin/bash
a=0
b=0
for i in {0..100..2}
do
   a=$[$a+$i]
done
echo "所有整数和为:$a"
for i in {1..100..2}
do
  b=$[$b+$i]
done
echo "所有奇数和为:$b"

[root@gcc ~]#sh demo4.sh 
所有整数和为:2550
所有奇数和为:2500

方法二:

[root@gcc ~]#vim demo4.sh

#!/bin/bash
jishuhe=0
oushuhe=0
i=1
p=0
while [ $i -le 100 ] 
do
   jishuhe=$[$jishuhe+$i]
   let i=$[$i+2]
done
echo "所有奇数和为:$jishuhe"

while [ $p -le 100 ]
do
  oushuhe=$[$oushuhe+$p]
  let p=$[$p+2]
done
echo "所有偶数和为:$oushuhe"

[root@gcc ~]#sh demo4.sh 
所有奇数和为:2500
所有偶数和为:2550

4、写个逛淘宝选购商品脚本,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

#!/bin/bash
#shang ping xuan gou
echo "================================="
echo "------WELCOME-GCC-MARKET---------"
echo "=================================" 
read -p "您是否进入商店进行购物?(yes/no)" INT
   while [ $INT = "yes" ]
     do
       echo "1.衣服500元"
       echo "2.裤子400元"
       echo "3.鞋子350元"
       echo "4.帽子150元"
       echo "5.袜子50元"

       read -p "请问你要购买哪种商品?(请输入序号)" node
       read -p "是否继续购买?(yes/no)" INT
     case $node in
     1)
     let cost+=500
     echo "消费"$cost"元" 
     ;;
     2)
     let cost+=400
     echo "消费"$cost"元"
     ;;
     3)
     let cost+=350
     echo "消费"$cost"元" 
     ;;
     4)
     let cost+=150
     echo "消费"$cost"元" 
     ;;
     5)
     let cost+=50
     echo "消费"$cost"元"
     ;;
     *)
      echo "输入错误,请重输!"
     esac
     if [ $INT = "no" ]
     then
     break
     fi
 done
echo "您本次逛街总共花费"$cost"元" 

5、shell 计算器

#!/bin/bash
read -p "请输入第一个整数:" num1
read -p "请输入运算符:加(+);减(-);乘(x);除(/);趋于(%):" fh
read -p "请输入第二个整数:" num2
if [ $fh = "+" ]
 then
     echo "结果为:`expr $num1 + $num2`"
elif [ $fh = "-" ]
  then
     echo "结果为:`expr $num1 - $num2`"
elif [ $fh = "x" ]
  then
      echo "结果为:`expr $num1 \* $num2`"
elif [ $fh = "/" ]
  then
      echo "结果为:`expr $num1 / $num2`"
elif [ $fh = "%" ]
   then
      echo "结果为:`expr $num1 % $num2`"
else
   echo "输入有误!"
fi

6、99乘法表

方法一:

for ((a=1;a<=9;a++))
do
        for ((b=1;b<=9;b++))
        do
        if [[ a -ge b ]];then
                echo -n "$b*$a=$[a*b] "
        fi
        done
        echo " "
done

方法二:

#!/bin/bash
for ((i=1;i<=9;i++))
do
        for ((j=1;j<=i;j++))
        do
                echo -n "$j*$i=$[$i*$j] "
                if [ $i -eq $j ]
                then
                        echo -e '\n'
                fi
        done
done

方法三:

[root@gcc opt]#vim e.sh

#!/bin/bash
for ((a=1;a<=9;a++))
do
   for ((b=1;b<=$a;b++))
   do
     c=$[ $a*$b ]
     echo -ne "$a*$b=$c\t"
   done
   echo ""
done

7、正等腰三角形与倒等腰三角形

正等腰三角形

方法一:

read -p "请输入长度: " n
for i in `seq 1 $n`
do
   for ((j=$n;j>i;j--))
   do
      echo -n " "
   done

   for m in `seq 1 $i`
   do
     echo -n " * "
   done
   echo 
done

方法二:

[root@gcc opt]#vim k.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n " "
  done
  for ((c=1;c<=$a;c++))
  do
    echo -n "*"
  done
  for ((d=2;d<=$a;d++))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh k.sh 
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************

方法三:

[root@gcc opt]#vim k.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n " "
  done
  i=$[($a*2)-1]
  for ((h=1;h<=$i;h++))
  do
    echo -n "*"
  done
  echo ""
  done

[root@gcc opt]#sh k.sh 
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************

倒等腰三角形

[root@gcc opt]#vim m.sh 
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=$a;b++))
  do
  echo -n " "
  done
    for ((c=9;c>=$a;c--))
    do
    echo -n "*"
    done
    for ((d=8;d>=$a;d--))
    do
    echo -n "*"
    done
    echo ""
done

[root@gcc opt]#sh m.sh 
 *****************
  ***************
   *************
    ***********
     *********
      *******
       *****
        ***
         *

8、直角三角形

方法一:

!/bin/bash
#直角三角形
read -p "请输入长度:" n
for i in `seq 1 $n`
do
   for ((j=1;j<=$i;j++))
    do
      echo -n "*"
    done
echo
done

方法二:(输出正三角)

[root@gcc opt]#vim g.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=$a;b++))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh i.sh 
*
**
***
****
*****
******
*******
********
*********

方法三:(输出倒三角)

[root@gcc opt]#vim j.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh j.sh 
*********
********
*******
******
*****
****
***
**
*

方法四:(靠右三角形)

[root@gcc opt]#vim k.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
    echo -n " "
  done
  for ((c=1;c<=$a;c++))
  do
    echo -n "*"
  done
  echo ""
done

[root@gcc opt]#sh k.sh 
         *
        **
       ***
      ****
     *****
    ******
   *******
  ********
 *********

9、批量添加用户

[root@gcc ~]#touch user.txt     #首先创建一个包含所有需要创建账号的用户名
[root@gcc ~]#vim user.txt 
wangyi             #注意一个姓名之间不要有空格
wanger
wangsan
wangsi

[root@gcc ~]#vim test2.sh      #编辑脚本
#!/bin/bash
#pi liang tianjia yonghu
a=$(cat /root/user.txt)        #定义变量a,使a遍历user.txt,注意遍历的文件要使用绝对路径
for i in $a                    #定义变量i,使i使用$a中的内容
do
   useradd $i                  #添加用户,用户名从变量i中获取
   echo "123123" | passwd --stdin $i     #给用户添加密码,密码从$i中获取
   echo "$i添加成功!"
done

(优化脚本:echo "123123" | passwd --stdin $i &> /dev/null)

或者

[root@gcc ~]#vim test5.sh
#!/bin/bash
i=1                      #用户从1开始
while [ $i -le 20 ]      #当小于等于20时一直执行while循环,直到20停止循环
do    
  useradd stu$i
  echo "123123" | passwd --stdin stu$i &> /dev/null
  echo "stu$i添加成功!"
  let i+=1            #用户每次+1进行添加
done

10、根据IP地址,批量检查主机状态

[root@gcc ~]#touch ipadds.txt
[root@gcc ~]#vim ipadds.txt 
[root@gcc ~]#vim ipadds.txt      #在文本中添加需要检查的主机的IP地址
192.168.200.1
192.168.200.2
192.168.200.3
192.168.200.4
192.168.200.5

[root@gcc ~]#vim test3.sh       #编写脚本
#!/bin/bash
a=`cat /root/ipadds.txt`        #遍历ipadds.txt文件
for i in $a                     #定义变量i从$a中取值
do
   ping -c 3 -i 0.2 -W 3 $i &> /dev/null     #开始ping检测,-c是ping的次数,-i是每次ping的时间,-w是ping的时候延时时间
   if [ $? -eq 0 ]              #判断语句,当使用$?返回0时,说明上面ping成功
   then
   echo "$i开启!"
   else
   echo "$i关闭!"
   fi
done

11、猜商品价格

[root@gcc ~]#vim test6.sh
#!/bin/bash
a=$[$RANDOM  % 1000]         
c=0                          
while [ $b -lt 1 ]     
do
let c++                      
read -p "请输入商品价格:" i
if [ $i -lt $a  ]
then
   echo "猜小了,再来一次。"
elif [ $i -gt $a ]
then
   echo "猜大了,再来一次。"
elif [ $i -eq $a ]
then
   echo "恭喜,猜对了!"
   b=2                      
fi
done
echo "你一共猜了$c次"        

12、直线

[root@gcc opt]#vim f.sh
#!/bin/bash
for ((a=1;a<=20;a++))
do
  echo -n "*"
done
echo ""

13、矩形

[root@gcc opt]#vim g.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
  for ((a=1;a<=10;a++))
  do
    echo -n "*"
  done
  echo ""
done

14、平行四边形

方法一:

[root@gcc opt]#vim d.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
   echo -n " "
  done
     for ((c=1;c<=9;c++))
     do
     echo -n "*" 
     done
     echo ""
done

方法二:

#!/bin/bash
for ((i=1;i<=9;i++))
do
  for ((j=9;j>=i;j--))
  do
    echo -n " "
  done
      for ((j=2;j<=i;j++))
      do
        echo -n "*"
      done
          for ((j=1;j<=i;j++))
          do
          echo -n "*"
          done
             for ((j=9;j>=i;j--))
             do
             echo -n "*"
             done
                for ((j=9;j>=i;j--))
                do
                echo -n "*"
                done
                echo 
done

15、梯形

直角梯形:

[root@gcc opt]#vim l.sh
#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
   echo -n " "
  done
     for ((c=1;c<=9+$a;c++))
     do
     echo -n "*" 
     done
     echo ""

[root@gcc opt]#sh l.sh 
         **********
        ***********
       ************
      *************
     **************
    ***************
   ****************
  *****************
 ******************

等腰三梯形:

[root@gcc opt]#vim l.sh

#!/bin/bash
for ((a=1;a<=9;a++))
do
  for ((b=9;b>=$a;b--))
  do
   echo -n " "
  done
     for ((c=1;c<=9+$a;c++))
     do
     echo -n "*" 
     done
     for ((d=1;d<=$a;d++))
     do
       echo -n "*"
     done
     echo ""
done

[root@gcc opt]#sh l.sh 
         ***********
        *************
       ***************
      *****************
     *******************
    *********************
   ***********************
  *************************
 ***************************

16、菱形

方法一:

#!/bin/bash
read -p "please input the longs:" long
for((i=1;i<=$long;i++))       #控制行数 
do
    for((j=$long;j>i;j--))    #控制空格输出 
    do
        echo -n " " 
    done

    let "g=2*i-1"

    for m in `seq 1 $g`       #控制*数量 
    do
        echo -n "*" 
    done

    echo "" 
done

for((i=2;i<=$long;i++))       #控制行数 
do
    for ((j=1;j<i;j++))       #控制空格输出 
    do
        echo -n " " 
    done

    let "k=2*(long-i)+1"

    for m in `seq 1 $k`       #控制*数量 
    do
        echo -n "*" 
    done

    echo "" 
done

方法二:

#!/bin/bash
for((i=9;i>=1;i--))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=9;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=8;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

for((i=2;i<=9;i++))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=9;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=8;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

17、输出环境变量PATH所包含的所有目录以及其中的所有可执行文件

[root@gcc ~]#vim demo7.sh

#!/bin/bash
IFS_OLD=$IFS
IFS=$IFS':'
for folder in $PATH
do
  echo "$folder:"
  for file in $(ls $folder)
  do
    if [ -f $folder/$file -a -x $folder/$file ]
    then
        echo " $folder/$file"
    fi
  done
done

IFS=${IFS_OLD}

18、执行脚本输入用户名,若该用户存在,输出提示该用户已存在;若该用户不存在,提示用户输入密码,建立用户并设立其密码

#!/bin/bash
abc () {
   read -p "请输入用户名:" user
   id $user &> /dev/null
   if [ $? -eq 0 ]
    then 
	   echo ""$user"用户已存在!"
    elif [ $? -ne 0 ]
    then 
	   read -p "创建新用户"$user",请输入用户密码:" pass
	   useradd $user
	   echo "$pass" | passwd --stdin $user
   fi   
} 

abc

19、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中

#!/bin/bash
abc () {
for i in {1..10}
do
ping -c 1 -i 0.2 -w 1 192.168.200.$i &> /dev/null
   if [ $? -eq 0 ]
   then 
       echo ""192.168.200.$i"已经开启" >> /opt/host_ip
   else
       echo ""192.168.200.$i"未开启"
   fi
done
}

abc 

20、mkdir -p /root/bin/aa/bb/cc/dd ; touch /root/bin/aa/bb/cc/dd/abc.txt,输出环境变量PATH所包含的所有目录以及其中的子目录和所有不可执行文件

#!/bin/bash
function list_files {
    for f in `ls $1`
    do
      if [ -d "$1/$f" ]
      then
          echo "$2$f"
          list_files "$1/$f" "$2"
      elif [ ! -x "$1/$f" ]
	  then 
          echo "$2$f"
      fi
     done
}


IFS_OLD=$IFS
IFS=$IFS":"
for i in $PATH
do
  echo "$i"
  list_files "$i" " "
done
IFS=$IFS_OLD

21、菱形通过传参控制形状的可大可小

#!/bin/bash
abc () {
for((i=$1;i>=1;i--))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=$1;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=$1-1;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

for((i=2;i<=$1;i++))
do
  for((a=1;a<=$i;a++))
do
  echo -n " "
  done
  for((b=$1;b>=$i;b--))
do
  echo -n "*"
  done
  for((c=$1-1;c>=$i;c--))
do
  echo -n "*"
  done
echo ""
done

}

abc $1

22、使用shell 一键部署DNS正向解析

#!/bin/bash

#首先先判断检查磁盘是否挂载
df | grep "sr0"           #将过滤出来的sr0交给df查看是否已经挂载
if [ $? -eq 0 ];then      #如果挂载了
   yum install -y bind &>/dev/null    #就安装bind软件包
else                      #如果没有挂载
   mount /dev/sr0 /mnt    #先挂载磁盘
   yum install -y bind &>/dev/null    #然后再安装软件包
fi

#修改主配置文件:/etc/named.conf
sed -i 's/127.0.0.1/any/' /etc/named.conf
sed -i 's/localhost/any/' /etc/named.conf

#修改区域配置文件:/etc/named.rfc1912.zones
sed -i 's/localhost.localdamain/gcc.com/' /etc/named.rfc1912.zones
sed -i 's/named.localdamain/gcc.com.zone/' /etc/named.rfc1912.zones
sed -i '18,100d' /etc/named.rfc1912.zones

#修改区域数据文件:/etc/named/named.localhost
cd /var/named/
cp -p named.localhost gcc.com.zone
sed -i 's/@/gcc.com./g' /var/named/gcc.com.zone
sed -i 's/127.0.0.1/192.168.200.10/' /var/named/gcc.com.zone
sed -i '9a www IN A 192.168.200.10' /var/named/gcc.com.zone
sed -i '/AAAA/d' /var/named/gcc.com.zone

#添加指定DNS服务器
sed -i '1a nameserver 192.168.200.10' /etc/resolv.conf

#关闭防火墙
systemctl stop firewalld
setenforce 0

#开启DNS服务
systemctl restart named

23、使用免交互,一键进行PXE批量装机shell脚本

#!/bin/bash

#先磁盘判断是否挂载,并检查tftp和xinetd软件包是否安装
df | grep "sr0"
if [ $? -eq 0 ];then
  yum install -y tftp-server xinetd
else
  mount /dev/cdrom /mnt
  yum install -y tftp-server xinetd
fi

#修改TFTP服务的配置文件:/etc/xinetd.d/tftp
sed -i 's/yes/no/g'  /etc/xinetd.d/tftp    #将该配置文件中的no全部改成yes,以达到多台客户机一起安装和开启TFTP服务的目的

#开启TFTP服务
systemctl start tftp
systemctl enable tftp
systemctl start xinetd
systemctl enable xinetd

#安装并启用DHCP服务与ecpect
yum install -y dhcp expect 

#复制配置文件,进行免交互操作
/usr/bin/expect <<EOF
spawn cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
expect "是否覆盖"/etc/dhcp/dhcpd.conf"?" {send "yes\r"}
interact
EOF

#修改DHCP服务配置文件:/etc/dhcp/dhcpd.conf
cat >/etc/dhcp/dhcpd.conf <<FOE    #使用Here Document进行免交互设置
ddns-update-style none;            #禁用DNS动态更新,提高效率
next-server 192.168.200.10;        #指定TFTP服务器的地址
filename "pxelinux.0";             #指定PXE引导程序的文件名
subnet 192.168.200.0 netmask 255.255.255.0 {       #声明要分配的网段地址
range 192.168.200.100 192.168.200.200;             #设置地址池
option routers 192.168.200.10;                     #设置默认网关地址,指向TFTP服务器的IP地址
}
FOE


#开启DHCP服务
systemctl start dhcpd
systemctl enable dhcpd

#准备Linux内核与初始化镜像文件
cd  /mnt/images/pxeboot             #已事先把光盘挂载到/mnt目录中
cp vmlinuz  /var/lib/tftpboot       #复制Linux系统的内核文件到TFTP根目录下
cp  initrd.img   /var/lib/tftpboot/  #复制初始化镜像文件(linux引导加载模块)到TFTP根目录下


#准备PXE引导程序
yum -y install syslinux         #PXE引导程序由软件包syslinux提供
cp /usr/share/syslinux/pxelinux.0   /var/lib/tftpboot/      #复制PXE引导程序到TFTP根目录下


#安装并启用FTP服务,准备centos 7 安装源
yum  -y  install  vsftpd
mkdir  /var/ftp/centos7
cp   -rf    /mnt/*   /var/ftp/centos7/

systemctl  start   vsftpd
systemctl  enable vsftpd


#配置启动菜单文件
mkdir   /var/lib/tftpboot/pxelinux.cfg
touch /var/lib/tftpboot/pxelinux.cfg/default
cat >/var/lib/tftpboot/pxelinux.cfg/default << ABC
default  auto          #指定默认入口名称
prompt 0               #设置是否等待用户选择, "1"表示等待用户控制,”0“表示不等待用户控制

label   auto           # 图形安装(默认)引导入口, label用来定义启动项
kernel vmlinuz         #kernel 和 append用来定义引导参数
append  initrd=initrd.img  method=ftp://192.168.200.10/centos7

label linux text       #文本安装引导入口
kernel  vmlinuz
append text initrd=initrd.img   method=ftp://192.168.200.10/centos7

label linux rescue      #救援模式引导入口
kernel vmlinuz
append  rescue initrd=initrd.img  method=ftp://192.168.200.10/centos7
ABC

#关闭防火墙
systemctl stop firewalld.service
setenforce 0

24、一键部署Apache服务

#!/bin/bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

df | grep "sr0"   
if [ $? -eq 0 ];then
   yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl &>/dev/null
else
   mount /dev/sr0 /mnt
   yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl &>/dev/null
fi

read -p "请输入Apache源码包所在绝对路径:" a     #需要提前将apache的3个源码包上传到Linux中
cd $a
echo "----开始配置软件模块----"
tar zxvf apr-1.6.2.tar.gz &>/dev/null
tar zxvf apr-util-1.6.0.tar.gz &>/dev/null
tar jxvf httpd-2.4.29.tar.bz2 &>/dev/null

mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr
mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util

cd /opt/httpd-2.4.29/
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi


make
make install

ln -s /usr/local/httpd/conf/httpd.conf /etc/httpd.conf
ln -s /usr/local/httpd/bin/* /usr/local/bin/

cd /lib/systemd/system
touch httpd.service

echo "[Unit]
Description=The Apache HTTP Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/httpd/logs/httpd.pid
ExecStart=/usr/local/bin/apachectl $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target" >/lib/systemd/system/httpd.service

systemctl start httpd.service
systemctl enable httpd.service


b=$(sed -n '/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-ens33 | awk -F "=" '{print $2}')
sed -i 's/Listen 80/Listen $b:80/g' /etc/httpd.conf
sed -i 's/#ServerName www.example.com:80/ServerName www.benet.com:80/g'  /etc/httpd.conf


systemctl restart httpd.service

echo "$b www.benet.com" >> /etc/hosts

echo "apache服务已安装成功!"

25、一键部署MySQL脚本

#执行脚本之前需要先将MySQL所需的压缩包mysql-5.7.17.tar.gz和boost_1_59_0.tar.gz上传到/opt目录下
#!/bin/bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

df | grep "sr0"   
if [ $? -eq 0 ];then
  yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake expect 
else
   mount /dev/sr0 /mnt
   yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
fi

cd /opt
echo "----开始配置软件模块----"
tar zxvf mysql-5.7.17.tar.gz
tar zxvf boost_1_59_0.tar.gz

cd /opt
mv boost_1_59_0 /usr/local/boost

cd /opt/mysql-5.7.17/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1

make -j 2 && make install

useradd -M -s /sbin/nologin  mysql

#cd /etc
#touch my.cnf

echo "[client]
port = 3306
socket=/usr/local/mysql/mysql.sock			
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
" > /etc/my.cnf

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile	

source /etc/profile

cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

systemctl daemon-reload  
systemctl start mysqld.service
systemctl enable mysqld

yum -y install expect

function abc {
passwd=$1
/usr/bin/expect <<-EOF
spawn mysqladmin -u root -p password $passwd
expect "Enter password:" 
send "\r"

expect eof
EOF
}
abc "abc123"


function bcd {
/usr/bin/expect <<-EOF
spawn mysql -u root -p
expect "Enter password:" {send "abc123\r"}
expect "mysql>" {send "grant all privileges on *.* to 'root'@'%' identified by 'abc123';\r"}
expect "mysql>" {send "show databases;\r"}
expect "mysql>" {send "quit\r"}
expect eof
EOF
}
bcd

echo "MySQL数据库创建成功!"

26、使用脚本切割Nginx日志并收集

vim /opt/fengge.sh
#!/bin/bash
#rizhi fengge
day=$(date -d "-1 day" "+%Y%m%d")    #显示前一天时间
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"
[ -d $logs_path ] || mkdir -p $logs_path   #创建日志文件目录
mv /usr/local/nginx/logs/access.log ${logs_path}/gcc.com-access.log-$day   #移动并重命名日志文件
kill -USR1 $(cat $pid_path)      #重建新日志文件
find $logs_path -mtime +30 | xargs rm -rf   #删除30天之前的日志文件

chmod +x /opt/fengge.sh 
/opt/fengge.sh 
ls /var/log/nginx/
ls /usr/local/nginx/logs/access.log

crontab -e      #设置定时任务进行日志的分割收集
0 1 * * * /opt/fengge.sh

27、一键安装Nginx服务

#需提前将nginx-1.12.0.tar.gz压缩包上传到/opt目录下
#!/bin/bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

df | grep "sr0"   
if [ $? -eq 0 ];then
   yum -y install gcc gcc-c++ pcre-devel zlib-devel make
else
   mount /dev/sr0 /mnt
   yum -y install gcc gcc-c++ pcre-devel zlib-devel make
fi

cd /opt
echo "----开始配置软件模块----"
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/

./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make -j 2 && make install

useradd -M -s /sbin/nologin nginx

ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ 

cd /lib/systemd/system/
touch nginx.service
echo "[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile =/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target" > /lib/systemd/system/nginx.service

chmod 754 /lib/systemd/system/nginx.service 
systemctl start nginx.service 
systemctl enable nginx.service 

echo "Nginx部署完成!!"

28、一键部署LNMP

#需提前将nginx-1.12.0.tar.gz、mysql-boost-5.7.20.tar.gz、php-7.1.10.tar.bz2压缩包上传到/opt目录下,创建好YUM源,挂载cdrom
#!/bin/bash
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum -y install gcc gcc-c++ pcre-devel zlib-devel make

cd /opt
echo "开始配置Nginx......"
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.12.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module

make -j 2 && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

echo '[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/nginx.service

chmod 754 /lib/systemd/system/nginx.service 
systemctl start nginx.service 
systemctl enable nginx.service 

echo "Nginx部署完成!!"


echo "开始部署MySQL........."
yum -y install \
ncurses \
ncurses-devel \
bison \
cmake

useradd -M -s /sbin/nologin mysql

cd /opt
tar xzvf mysql-boost-5.7.20.tar.gz -C /opt

cd /opt/mysql-5.7.20/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1

make -j 2
make install

#修改mysql 配置文件
echo '[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES' > /etc/my.cnf

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf

echo "export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib">> /etc/profile	
source /etc/profile

cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ 
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld


#修改mysql 的登录密码
yum -y install expect

function bcd {
/usr/bin/expect <<-EOF
passwd=$1
spawn mysqladmin -u root -p password $passwd 
expect "Enter password:" {send "\r"}
EOF
}
bcd "abc123"

function efg {
/usr/bin/expect <<-EOF
spawn mysql -u root -pabc123
expect "mysql>" {send "quit\t"}
EOF
}

#授权远程登录
#function bcd {
#/usr/bin/expect <<-EOF
#spawn mysql -u root -p
#expect "Enter password:" {send "abc123\r"}
#expect "mysql>" {send "grant all privileges on *.* to 'root'@'%' identified by 'abc123';\r"}
#expect "mysql>" {send "show databases;\r"}
#expect "mysql>" {send "quit\r"}
#expect eof
#EOF
#}
#bcd

echo -e "\033[31m mysql安装完成!\033[0m"


echo "开始部署PHP......"
yum -y install gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

cd /opt
tar jxvf php-7.1.10.tar.bz2 
cd php-7.1.10
./configure \
--prefix=/usr/local/php \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

make 
make install

ln -s /usr/local/php/bin/* /usr/local/bin/

#修改PHP配置文件
#修改主配置文件
cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini
sed -i '1170c mysqli.default_socket = /usr/local/mysql/mysql.sock' /usr/local/php/lib/php.ini
sed -i '939c date.timezone = Asia/Shanghai' /usr/local/php/lib/php.ini

php -m 

#修改进程服务配置文件:php-fpm.conf
cd /usr/local/php/etc/
cp php-fpm.conf.default php-fpm.conf
sed -i '17c pid = run/php-fpm.pid' /usr/local/php/etc/php-fpm.conf

#修改扩展配置文件:www.conf
cd /usr/local/php/etc/php-fpm.d/
cp www.conf.default www.conf

ln -s /usr/local/php/sbin/* /usr/local/sbin
/usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini
netstat -anpt | grep 9000

#配置 Nginx 支持 PHP 解析
#--65行--取消注释,修改
sed -i '65c location ~ \.php$ {' /usr/local/nginx/conf/nginx.conf
sed -i '66c root           html;' /usr/local/nginx/conf/nginx.conf
sed -i '67c fastcgi_pass   127.0.0.1:9000;' /usr/local/nginx/conf/nginx.conf
sed -i '68c fastcgi_index  index.php;' /usr/local/nginx/conf/nginx.conf
sed -i '69c fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;' /usr/local/nginx/conf/nginx.conf
sed -i '70c include        fastcgi_params;' /usr/local/nginx/conf/nginx.conf
sed -i '71c }' /usr/local/nginx/conf/nginx.conf

systemctl restart nginx.service

echo '<?php
phpinfo();
?>' > /usr/local/nginx/html/index.php
k=`ip a | grep "ens33" | awk 'NR==2{print$2}' | awk -F/ '{print$1}'`


#验证数据库工作是否正常
function hij {
/usr/bin/expect <<-EOF
spawn mysql -u root -p
expect "Enter" {send "\r"}
expect "mysql>" {send "CREATE DATABASE bbs;\r"}
expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'%' IDENTIFIED BY 'admin123';\r"}
expect "mysql>" {send "GRANT all ON bbs.* TO 'bbsuser'@'localhost' IDENTIFIED BY 'admin123';\r"}
expect "mysql>" {send "flush privileges;\r"}
expect "mysql>" {send "quit\r"}
EOF
}
hij

echo "PHP部署完成!!"

29、一键部署LAMP

#(需提前将所有软件包上传到/opt目录下)
#!/bin/bash

read -p "请输入你需要配置的域名(例:www.abc.com):" y
df -h | grep /mnt
if [ $? -ne 0 ];then 
  mount /dev/sr0 /mnt > /dev/null
else
  echo "镜像文件已挂载"
fi


systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl

cd /opt/
tar zxvf apr-1.6.2.tar.gz
tar zxvf apr-util-1.6.0.tar.gz
tar jxvf httpd-2.4.29.tar.bz2

mv apr-1.6.2 /opt/httpd-2.4.29/srclib/apr
mv apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util

cd /opt/httpd-2.4.29/
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi

make && make install

ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/


echo '[Unit]
Description=The Apache HTTP Server			
After=network.target						
[Service]
Type=forking								
PIDFile=/usr/local/httpd/logs/httpd.pid		
ExecStart=/usr/local/bin/apachectl $OPTIONS	
ExecReload=/bin/kill -HUP $MAINPID			
[Install]
WantedBy=multi-user.target' > /lib/systemd/system/httpd.service




cp /etc/httpd.conf{,.bak}

z=`ip a | grep "ens33" | awk 'NR==2{print}' | awk -F "/" '{print$1}' | awk -F " " '{print$2}'`

sed -i "51c Listen $z:80" /etc/httpd.conf.bak
sed -i '52 s/^/#/' /etc/httpd.conf.bak

sed -i '197d' /etc/httpd.conf.bak
sed -i "196a ServerName $y:80" /etc/httpd.conf.bak

cat /etc/httpd.conf.bak > /etc/httpd.conf




 
#sed -i "s/Listen 80/Listen 192.168.184.30:80/" /etc/httpd.conf
#sed -i 's/#ServerName www.example.com:80/ServerName www.lic.com:80/' /etc/httpd.conf

systemctl start httpd.service
netstat -anpt | grep 80
echo -e "\033[31m Apache安装完成!\033[0m"



#--------编译安装mysql 服务--------
#mysql-5.7.17.tar.gz
#boost_1_59_0.tar.gz
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
echo "进行安装mysql服务"
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake

#配置软件模块
cd /opt
tar zxvf mysql-5.7.17.tar.gz
tar zxvf boost_1_59_0.tar.gz
cd /opt
mv boost_1_59_0 /usr/local/boost


cd /opt/mysql-5.7.17/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1

make 
make install

useradd -M -s /sbin/nologin mysql

echo '[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysqld]									
user = mysql       							
basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

port = 3306									
character-set-server=utf8	

pid-file = /usr/local/mysql/mysqld.pid

socket=/usr/local/mysql/mysql.sock

bind-address = 0.0.0.0

skip-name-resolve							
max_connections=2048

default-storage-engine=INNODB				
max_allowed_packet=16M	
server-id = 1

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES' > /etc/my.cnf

chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf




cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data

#添加mysqld系统服务

cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/		#用于systemctl服务管理
source /etc/profile
systemctl daemon-reload         #刷新识别     
systemctl start mysqld.service  #开启服务
systemctl enable mysqld         #开机自启动
netstat -anpt | grep 3306       #查看端口

yum -y install expect


function abc {
passwd=$1
/usr/bin/expect <<-EOF
spawn mysqladmin -u root -p password $passwd
expect "Enter password:" 
send "\r"

expect eof
EOF
}
abc "abc123"


function bcd {
/usr/bin/expect <<-EOF
spawn mysql -u root -p
expect "Enter password:" {send "abc123\r"}
expect "mysql>" {send "grant all privileges on *.* to 'root'@'%' identified by 'abc123';\r"}
expect "mysql>" {send "show databases;\r"}
expect "mysql>" {send "quit\r"}
expect eof
EOF
}
bcd
echo -e "\033[31m mysql安装完成!\033[0m"


#--------编译安装PHP 解析环境--------
#安装GD库和GD库关联程序,用来处理和生成图片
yum -y install \
gd \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel \
curl curl-devel \
openssl openssl-devel

#配置软件模块
cd /opt
tar jxvf php-7.1.10.tar.bz2
cd /opt/php-7.1.10/

./configure \
--prefix=/usr/local/php7 \
--with-apxs2=/usr/local/httpd/bin/apxs \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-config-file-path=/usr/local/php7 \
--with-mysqli \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-openssl \
--enable-mbstring \
--enable-xml \
--enable-session \
--enable-ftp \
--enable-pdo \
--enable-tokenizer \
--enable-zip

#编译及安装
make && make install

#复制模版文件作为PHP 的主配置文件,并进行修改
cp /opt/php-7.1.10/php.ini-development /usr/local/php7/php.ini	

#在测试环境时使用php.ini-development文件,而在生产环境时使用php.ini-production文件

#修改1170行为mysqli.default_socket = /usr/local/mysql/mysql.sock
sed -i '1170d' /usr/local/php7/php.ini
sed -i '1169a mysqli.default_socket = /usr/local/mysql/mysql.sock' /usr/local/php7/php.ini

#939行--取消注释,修改时区
sed -i '939d' /usr/local/php7/php.ini
sed -i '938a date.timezone = Asia/Shanghai' /usr/local/php7/php.ini

#优化把PHP 的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/php7/bin/* /usr/local/bin/

php -m 			#查看PHP 加载了哪些模块

#修改httpd 服务的配置文件:/etc/httpd.conf,让apache支持PHP

#--393行下--插入以下内容
#AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps

cp /etc/httpd.conf{,.bak1}
sed -i '393a AddType application/x-httpd-php .php' /etc/httpd.conf.bak1
sed -i '394a AddType application/x-httpd-php-source .phps' /etc/httpd.conf.bak1

#--256行--修改首页文件名设置
#DirectoryIndex index.html index.php
sed -i '256c DirectoryIndex index.html index.php' /etc/httpd.conf.bak1

cat /etc/httpd.conf.bak1 > /etc/httpd.conf


#验证php测试页
cd /usr/local/httpd/htdocs
mv index.html index.html.bak
echo '<?php
phpinfo();
?>' > /usr/local/httpd/htdocs/index.php

#修改完httpd配置文件后重启服务
systemctl restart httpd.service
systemctl restart httpd.service

#浏览器访问

echo -e "\033[31m php安装完成!\033[0m"

30、监控Linux缓存并清理脚本

#!/bin/bash
#Men分区内存总量 
mem_total=`free -m | awk 'NR==2' | awk '{print $2}'`

#Men分区当前剩余内存的大小 
mem_free=`free -m | awk 'NR==3' | awk '{print $4}'`

#Men分区当前已使用内存的大小 
mem_used=`free -m | grep Mem | awk '{print  $3}'`

if (($mem_used != 0)); then

#如果已被使用,则计算当前剩余free所占总量,表示为整数
mem_per=`free -m | awk '/Mem:/ {print int($3/($3+$4)*100)"%"}'`
mem_total=`free -m | awk '/Mem:/ {print int($3/($3+$4)*100)}'`
#设置监控日志监控内存使用情况
DATA="$(date -d "today" +"%Y-%m-%d-%H-%M") free percent is : $mem_per"
echo $DATA >> /var/log/mem_alarm.log

#当前剩余百分比与80%进行比较 ,超过80%进行缓存清理
if [ $mem_total -gt 80 ]; then
sync
echo 1 > /proc/sys/vm/drop_caches
echo 2 > /proc/sys/vm/drop_caches
echo 3 > /proc/sys/vm/drop_caches

else
echo "Don't have to clean up"

#将release memory OK !写入/var/log/文件夹的memstat_日期.log日志中
echo "--->release memory OK ! " >>/var/log/memstat_$(date +%Y%m%d_%H%M%S).log
fi
fi


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell 脚本汇总 (持续更新中) 的相关文章

  • “排序文件名 | uniq”不适用于大文件

    我可以从小文本文件中删除重复条目 但不能从大文本文件中删除重复条目 我有一个 4MB 的文件 文件的开头如下所示 aa aah aahed aahed aahing aahing aahs aahs aal aalii aalii aali
  • 打印一个字符串,并将其特殊字符打印为文字转义序列

    我在 shell bash 脚本中有一个字符串 我想打印字符串 并将其所有 特殊字符 例如换行符 制表符等 打印为文字转义序列 例如换行符打印为 n 选项卡打印为 t 等等 不确定我是否使用了正确的术语 该示例应该能够澄清问题 Exampl
  • 从命令行获取设备的 Android SDK 版本

    我计划构建一个自动化系统 用于将 Android 版本部署到各种设备 以便使多平台开发更加轻松 有没有办法通过android shell或adb获取连接设备的sdk版本 将有一台计算机连接多个测试设备 我计划编写一个脚本 该脚本将从构建服务
  • 使用 sh shell 比较字符串

    我正在使用 SH shell 我试图将字符串与变量的值进行比较 但是if条件始终执行为真 为什么 这是一些代码 Sourcesystem ABC if Sourcesystem eq XYZ then echo Sourcesystem M
  • 模拟用户输入以使用不同参数多次调用脚本

    我必须使用提供的脚本 该脚本在脚本运行时接受用户输入而不是参数 我无法解决这个问题 脚本的一个例子是 bin bash echo param one read one doSomething echo param two read two
  • Bash 'printf' 相当于命令提示符?

    我希望在 Windows 命令提示符下将一些字符串输入通过管道传输到一个小型 C 程序 在 bash 中我可以使用 printf AAAAA x86 x08 x04 xed program 本质上 我需要一些东西来转义命令提示符中的那些十六
  • shell 脚本无法将命令行输出保存到变量中

    我正在尝试执行 shell 命令 然后使用 shell 脚本将输出保存到变量中 所以我使用这样的反引号 out ls l print out 该代码工作正常 我可以将它用于任何其他 shell 命令 但是当我尝试执行 python vers
  • 如何使用 cron 作业运行 python 文件

    您好 我创建了一个 python 文件 例如file example py 该文件将输出 sensex 值 假设该文件在linux系统上的路径为 Desktop downloads file example py 我通常会运行该文件pyth
  • Bash 完成脚本在某些参数选项后完成文件路径

    我正在为命令行工具编写 bash 完成脚本 plink local cur prev opts COMPREPLY cur COMP WORDS COMP CWORD prev COMP WORDS COMP CWORD 1 opts 1
  • bash双括号问题

    我对 bash 脚本非常陌生 在使用双括号时遇到了问题 我似乎无法让它们在 Ubuntu Server 11 10 中工作 我的下面的脚本位于 if test sh 中 bin bash if 14 14 then echo FOO fi
  • 将所有脚本参数复制到另一个变量

    我需要复制所有脚本参数并将它们传递给另一个脚本 我尝试这样做 args printargs sh args echo printargs sh args 但在这种情况下 如果我使用包含空格的参数调用我的父脚本 例如 script sh ar
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • 编写脚本时,#!/usr/bin/perl 和 #!/usr/bin/env perl 有什么区别?

    显然 这同样适用于用 python bash sh 等替代 perl 昆汀下面的答案显然是正确的 所以我接受了它 但我想我实际上的意思是 两种使用 的方式的优点和缺点是什么 调用 perl python bash 作为脚本的解释器 有人提到
  • 子 shell 何时继承其父 shell 环境?

    什么情况下将shell的环境传递给子shell 子 shell 始终从父 shell 获取所有变量 man bash将描述所有使用子shell的情况 主要是 command command command and command 所谓环境只
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 如何将命令作为参数传递给 ssh [重复]

    这个问题在这里已经有答案了 我的需要是让这个命令起作用 sshpass p XXXX ssh oStrictHostKeyChecking no email protected cdn cgi l email protection sudo
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • 给出 5 个参数,但在终端中只得到 3 个参数

    我想将一个文件传递给一个c 程序 如果我在 IDE 中执行此操作 test string string lt test txt return argc 5 但在终端上我刚刚得到argc 3 看来 这是因为 什么是 lt 意思是 我正在使用
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u

随机推荐

  • 迅雷出现应版权方要求,无法下载的解决办法

    最近在电影天堂下电影 xff0c 特别是热播的一些电视剧 xff0c 用迅雷下载总是提示应版权方要求 xff0c 无法下载 VIP会员都没用 xff0c 没办法 xff0c 用浏览器下载吧 xff0c 总是连不上FTP服务器 xff0c 网
  • Uncaught TypeError: Cannot set property ‘0‘ of undefined

    因为用java用的比较习惯了 xff0c 在js使用二维数组的时候也想当然的直接就如 var arraydata arraydata 0 61 data list 0 结果问题随之而来 xff0c 报错 xff1a Uncaught Typ
  • Ubuntu通过修改配置文件进行网络配置

    Ubuntu系统进行网络配置有的时候用图形界面不起作用 xff0c 这种情况下可以直接修改某些启动脚本或配置文件 Ubuntu系统进行网络配置涉及到几个配置文件 1 etc network interfaces 2 etc resolv c
  • vscode常用的9个插件,推荐给你们

    1 Settings Sync 开发必备神器之一 xff01 可以帮助你在不同的设备之间同步vscode所有的配置 插件 xff01 xff01 虽然配置有好几个步骤 xff0c 但是一旦配置好了之后使用非常的方便 xff0c 只需要记住快
  • 在Windows10上安装WSL子系统

    目录 一 安装WSL2 0 二 安装Ubuntu20 04LTS 三 配置ssh 四 设置分发版本 五 常见问题解决 5 1 安装失败并出现错误 0x80070003 5 2 WslRegisterDistribution 失败并出现错误
  • 安装mysql5.7后无法启动,/var/run/mysqld 目录每次重启后都需要手动去创建

    mysql5 7安装后出现无法启动 xff0c 建立 var run mysqld 并赋权mysql用户解决了启动的问题 xff0c 但是重启系统后又出现无法启动的问题 xff0c 导致 var run mysqld 目录每次重启后都需要手
  • Git使用教程

    1 版本控制 1 1 简介 版本控制 Revision control 是一种在开发的过程中用于 管理我们对文件 目录或工程等内容的修改历史 方便查看更改历史记录 备份以便恢复以前的版本的软件工程技术 实现跨区域多人协同开发 追踪和记载 个
  • [leetcode]解码方法(Decode Ways)

    解码方法 xff08 Decode Ways xff09 一条包含字母 A Z 的消息通过以下方式进行了编码 xff1a 39 A 39 gt 1 39 B 39 gt 2 39 Z 39 gt 26 给定一个只包含数字的非空字符串 xff
  • C#调用FluentFTP将文件批量上传到ftp服务器

    上篇文章介绍了在Windows Server 2008上搭建FTP服务 xff0c 本文测试使用C 调用FluentFTP将文件批量上传到ftp服务器 FluentFTP是由C 开发的开源FTP和FTPS库 xff0c 其开源地址见参考文献
  • RouterOS 通过NTH/PCC设置多线负载均衡及带宽叠加

    关于NTH的相关原理 xff0c 请大家移步RouterOS Nth与Passthrough 务必要多看几遍 xff0c 彻底把原理看明白了 xff0c 然后再上机实验就能收到事半功倍的效果 如果大家原理不明白 xff0c 仅靠看别人的文档
  • Windows及Ubuntu下安装PyCharm

    之前编写Python程序 xff0c 在Windows下面主要使用的记事本或者Python自带的IDLE工具 xff0c Ubuntu下主要是在VSCode中编写 xff0c 编写或调试程序都比较麻烦 xff0c 百度了一下 xff0c 目
  • android app 设置以太网静态Ip

    写文目的 公司是做工控和楼宇智能方面产品 xff0c 使用的设备有rk和全志平台 xff0c 运行的是android操作系统 xff0c 部分场景需要设置有线网络的静态Ip 所以针对这一需求做了如下工作 xff0c 并以此文作为总结 遇到的
  • python神经网络案例——CNN卷积神经网络实现mnist手写体识别

    转自 xff1a https blog csdn net luanpeng825485697 article details 79088938 全栈工程师开发手册 xff08 作者 xff1a 栾鹏 xff09 python教程全解 CNN
  • Java删除字符串中的指定字符

    Java删除字符串中的指定字符有以下两种方法 xff1a 1 替换函数 xff0c 替换成空白 String test 61 chaojimali test 61 test replace chaoji 2 截取函数 xff0c 删除字符
  • Spring MVC 异常,怎样显示比较友好?

    本文基于Spring MVC 注解 xff0c 让Spring跑起来 实施过程中完全没有任何异常 xff0c 测试过程中也没出错 xff0c 偏偏在客户试用过程中报错了 报错了 xff0c 怎样给客户友好界面 xff1f 两个方法 xff1
  • Android进程的内存管理分析

    尊重原创作者 xff0c 转载请注明出处 xff1a http blog csdn net gemmem article details 8920039 最近在网上看了不少Android内存管理方面的博文 xff0c 但是文章大多都是就单个
  • 简单了解5G

    什么是5G 一 5G的特点 xff1a 二 5G的8个关键技术指标 xff08 与4G作对比 xff09 三 5G的几个关键技术 一 动态自组织网络 xff08 SON xff09 xff08 二 xff09 软件定义网络 xff08 SD
  • MSTP、LACP、VRRP、DHCP、NAT综合实验技术文档

    MSTP LACP VRRP DHCP NAT综合实验技术文档 要求 xff1a 要求按照拓扑图配置MSTP VRRP DHCP NAT等相关命令使得图中所有终端能够网络互通 1 MSTP 43 链路聚合 正常情况下各VLAN流量路径要求如
  • 解决共享文件时出现 “mount error(13): Permission denied” 错误

    当在Windows 系统和 Linux 系统之间共享文件时出现如下的错误 xff1a root 64 localhost mount cifs 192 168 226 1 kugou data Password for root 64 19
  • shell 脚本汇总 (持续更新中)

    文章目录 1 计算从1到100所有整数的和2 提示用户输入一个小于100的整数 xff0c 并计算从1到该数之间所有整数的和3 求从1到100所有整数的偶数和 奇数和4 写个逛淘宝选购商品脚本 xff0c 每家商店有五种商品选购 xff08