随笔 - 52  文章 - 0  评论 - 2  阅读 - 16463

2022每天学习一个shell小脚本---bash shell脚本文件夹

1.批量创建用户

createUsersBulk.sh

#!/bin/bash
#批量创建用户
read -p "Enter The Users Password : " PASSWD

for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ] ; then
echo "Already exists"
  else
  useradd $UNAME &> /dev/null
  echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null

  if [ $? -eq 0 ] ; then
  echo "$UNAME , Create success"                         
  else
  echo "$UNAME , Create failure"
  fi
fi
done 

##############################

2.猜数字

numberGuessing.sh

#!/bin/bash
#猜数字的小游戏
PRICE=$(expr $RANDOM % 1000)
#使用$RANDOM变量来调取出一个随机的数值(范围为0~32767),将这个随机数对1000进行取余操作,并使用expr命令取得其结果
TIMES=0
#创建TIMES变量,用于累计用户猜数字的次数

echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
  read -p "请输入您猜测的价格数目:" INT
  #read读取输入的数值
  let TIMES++
  #TIMES变量自增1,即猜数字次数累计1次
    if [ $INT -eq $PRICE ] ; then
    #如果输入的数字跟随机生成的数字一致,说明猜对了。
    echo "恭喜您答对了,实际价格是 $PRICE"
    echo "您总共猜测了 $TIMES 次"
    exit 0
    #终止脚本执行
    
    elif [ $INT -gt $PRICE ] ; then
    #输入数字比生成数字高,提示太高
    echo "太高了!"
    else
    #兜底,既猜不对数字,又不是比生成数字高,那就是太低了
    echo "太低了!"
    fi
done

##############################

3.判断用户输入的字符是数字、字母还是其他字符

Checkkeys.sh

#!/bin/bash
#用case语句和通配符判断用户输入的字符是数字、字母还是其他字符。
read -p "请输入一个字符,并按Enter键确认:" KEY

case "$KEY" in
[a-z]|[A-Z])
#如果输入的字符(只能是1位,aD则会跳到兜底)是大写字母或者小写字母,则输出是字母
echo "您输入的是 字母。"
;;

[0-9])
#如果是数字(只能1位,10、99等则会跳到兜底),则输出是数字
echo "您输入的是 数字。"
;;

*)
#兜底,输出其他字符
echo "您输入的是 空格、功能键或其他控制字符。"
esac

##############################

4.找出能登录的用户

findLogin_Users.sh

#!/bin/bash
#找出/etc/passwd中能登录的用户,并将对应在/etc/shadow中第二列密码提出处理

shells=`awk -F: '$7!~"nologin"{print $1","$7}' /etc/passwd`
for shell in $shells
do
  if [[ "`grep -v '^#' /etc/shells`" =~ "`echo $shell | cut -d, -f2`" ]]; then
    users="$users `echo $shell | cut -d, -f1`"
  fi
done

for user in $users
do
  awk -F: -v u=$user '$1~u{print $1,$2}' /etc/shadow
done

##############################

5.扫描主机端口状态

scanPort.sh

#!/bin/bash
#扫描主机端口状态

HOST=$1
PORT="22 25 80 8080"

for PORT in $PORT; do
  if echo &>/dev/null > /dev/tcp/$HOST/$PORT; then
    echo "$PORT open"
  else
    echo "$PORT close"
  fi
done

##############################

6.统计/var/log有多少个文件 | 查找Linux系统中的僵尸进程

#统计/var/log有多少个文件
echo "文件总量为:"`find /var/log -maxdepth 1 -type f | wc -l`



#查找Linux系统中的僵尸进程
ps aux | awk '{if($8 == "Z" ){print $2,$11}}'

##############################

7.检测所处网段主机的开关机状态

detectNet.sh

#!/bin/bash
#检测所处网段主机的开关机状态
i=1
while [ $i -le 254 ]
do
  ping -c2 -i0.2 -W1 192.168.108.$i &>/dev/null
  if [ $? -eq 0 ] ;then
    echo -e "\e[32;1m192.168.108.$i is up[0m"
  else
    echo "192.168.108.$i is down"
  fi
let i++
done

##############################

8.查找最大文件

findLargfile.sh

#!/bin/bash
#查找最大文件
a=0
for  name in *.*
do
  b=$(ls -l $name | awk '{print $5}')
  if test $b -ge $a
  then a=$b
  namemax=$name
  fi
done

echo "the max file is $namemax"

##############################

9.批量修改文件名

bEditFilename.sh

#!/bin/bash
#批量修改文件名
for file in $(ls \*.\txt | cut -d. -f1); 
do
  mv $file* $file.log
done

##############################

10.监视本机内存、/分区剩余空间

monitorRamHd.sh

#!/bin/bash
#监视本机内存、/分区剩余空间,当剩余空间达到阈值发送报警邮件给root管理员

disk_value=60000
mem_value=5000
disk_size=`df -m / | awk '/\//{print $4}'`      #获取/的剩余硬盘空间,单位M
mem_size=`free -m | awk '/Mem/{print $4}'`      #获取剩余内存空间,单位M

if [ $disk_size -le $disk_value -o $mem_size -le $mem_value ]; then
    echo "Insufficient resources,资源不足" | mail -s "Warning" root     #达到阈值发送邮件给root
fi

##############################

11.记录目录下文件操作

recordFileOperat.sh
场景:记录目录下文件操作。
需先安装inotify-tools软件包。

#!/bin/bash
#监控目录,将新创建的文件名追加到日志中

MON_DIR=/root/test
inotifywait -mq --format %f -e create $MON_DIR |\
while read files; 
do
  echo $files >> test.log
done

##############################

12.将位置参数拆分为到每个变量

positional_argument_split.sh

#!/bin/bash
#将位置参数192.168.108.1{1,2}拆分为到每个变量

num=0
for i in $(eval echo $*);
do
  let num+=1
  eval node${num}="$i"
done
echo $node1 $node2

##############################

13.输入数字运行相应命令

digitalRunBin.sh

#!/bin/bash
##############################################################
#输入数字运行相应命令
##############################################################
echo "*cmd menu* 1-date 2-ls 3-who 4-pwd 0-exit "
while :
do
#捕获用户键入值
read -p "please input number :" n
n1=`echo $n|sed s'/[0-9]//'g`
  #空输入检测 
  if [ -z "$n" ]
  then
  continue
  fi

  #非数字输入检测 
  if [ -n "$n1" ]
  then
  exit 0
  fi
break
done

case $n in
1)
date
;;
2)
ls
;;
3)
who
;;
4)
pwd
;;
0)
break
;;
#输入数字非1-4的提示
*)
echo "please input number is [1-4]"
esac

##############################

14.接受系统当前用户名为参数,判断用户

judgeUser.sh

#!/bin/bash
#接受系统当前用户名为参数;判断其为管理员root,系统用户system,普通用户user;

userid=$(id -u)

if [ $userid -eq 0 ];then
echo "root"
elif [ $userid -gt 0 -a $userid -lt 500 ];then
echo "system"
else
echo "user"
fi

##############################

15.检测网卡流量

detectNetTraffic.sh

#!/bin/bash
#######################################################
#检测网卡流量,并按规定格式记录在日志中
#规定一分钟记录一次
#日志格式如下所示:
#2022-04-20 10:00
#ens33 input: 1234bps
#ens33 output: 1235bps
#######################################################

while :
do
#设置语言为英文,保障输出结果是英文,否则会出现bug
LANG=en
logfile=/tmp/\`date +%d\`.log

#将下面执行的命令结果输出重定向到logfile日志中
exec >> $logfile
date +"%F %H:%M"
#sar命令统计的流量单位为kb/s,日志格式为bps,因此要*1000*8
sar -n DEV 1 59|grep Average|grep ens33|awk '{print $2,"\t","input:","\t",$5*1000*8,"bps","\n",$2,"\t","output:","\t",$6*1000*8,"bps"}'
echo "####################"
#因为执行sar命令需要59秒,因此不需要sleep
done

##############################

16.shell读取文件的每一行内容

readFile_outLine.sh

#!/bin/bash
#shell读取文件的每一行内容并输出,方法1
cat file_test | while read line
do
  echo $line
done



################################,方法2
#for line in \`cat file_test\`
#do
#    echo $line
#done

##############################

17.监控磁盘使用率

monitorDiskUsage.sh

#!/bin/bash
#监控磁盘使用率
disks=(\`df |sed 1d | awk '{print $1,$5}'|tr -d %\`)

len=${#disks[@]}
for ((i=1;i<=$len;i=i+2));do
if [ ${disks[i]} -gt 80 ];then
    echo "${disks[$i-1]} ${disks[$i]}"
fi
done

##############################

18.找出5分钟内修改的文件

modified_FilesList.sh

#!/bin/bash
#找出5分钟内修改的文件
touch -t $(date -d "5 min ago" +%Y%m%d%H%M) /tmp/temp.tmp

find $1 -newer /tmp/temp.tmp 2>/dev/null
rm -rf /tmp/temp.tmp

##############################

19.MariaDB数据库备份

databaseBackup.sh

#!/bin/bash
#MariaDB数据库备份
DATE=$(date +%F_%H-%M-%S)
HOST=127.0.0.1
DB=zabbix
USER=root
PASS=sbt123456
MAIL="root@mytest001"
BACKUP_DIR=/abcs/data/db_backup
SQL_FILE=${DB}_full_$DATE.sql
BAK_FILE=${DB}_full_$DATE.zip

cd $BACKUP_DIR
if mysqldump -h$HOST -u$USER -p$PASS --single-transaction --routines --triggers -B $DB > $SQL_FILE; then
zip $BAK_FILE $SQL_FILE && rm -f $SQL_FILE
if [ ! -s $BAK_FILE ]; then
  echo "$DATE 内容" | mail -s "主题" $MAIL
fi
else
  echo "$DATE 内容" | mail -s "主题" $MAIL
fi
find $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;

##############################

20.Linux下如何寻找相同文件

findHardLinks.sh

#!/bin/bash
#Linux下如何寻找相同文件

prev=""

# list files by inode
ls -i | sort -n > /tmp/$0

# search through file for duplicate inode #s
while read line
do
  inode=\`echo $line | awk '{print $1}'\`
  if [ "$inode" == "$prev" ]; then
  grep $inode /tmp/$0
  fi
prev=$inode
done < /tmp/$0

# clean up
rm /tmp/$0

##############################

21.禁用rm命令,使用mv命令给linux建立回收站

vim ~/.bashrc

#!/bin/bash
#禁用rm命令,使用mv命令给linux建立回收站
#设置别名,rm是删除文件,rl是查看回收站,ur是恢复文件
alias rm='trash'  
alias rl='trashlist'  
alias ur='undelfile'  

#替换rm指令移动文件到~/.trash/中   
trash()  
{  
  mv $@  ~/.trash/  
} 

#显示回收站中垃圾清单  
trashlist()  
{  
 echo -e "33[32m==== Garbage Lists in ~/.trash/ ====33[0m"  
 echo -e "\a33[33m----Usage------33[0m"  
 echo -e "\a33[33m-1- Use 'cleartrash' to clear all garbages in ~/.trash!!!33[0m"  
 echo -e "\a33[33m-2- Use 'ur' to mv the file in garbages to current dir!!!33[0m"  
 ls -al  ~/.trash  
}  

#找回回收站相应文件   
undelfile()  
{  
 mv -i ~/.trash/$@ ./  
}  

#清空回收站   
cleartrash()  
{  
 echo -ne "\a33[33m!!!Clear all garbages in ~/.trash, Sure?[y/n]33[0m"  
 read confirm  
 if [ $confirm == 'y' -o $confirm == 'Y' ] ;then  
  /bin/rm -rf ~/.trash/*  
  /bin/rm -rf ~/.trash/.* 2>/dev/null  
fi    
}

#Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

##############################

22.统计当前Linux系统中可以登陆计算机的账户数量

findLogin_Users2.sh

#!/bin/bash
#统计当前Linux系统中可以登陆计算机的账户数量

for shell in \`awk -F: '{print $7}' /etc/passwd\`         #取出账号文件中各账号的解释器
do
  if [[ "\`cat /etc/shells\`" =~ "$shell" ]]; then      #检测取出的解释器是否包含在可登录解释器中
    let n++
  fi
done
echo $n

##############################

23.使用case编写一个菜单脚本

caseMenu.sh

#!/bin/bash
#使用case编写一个菜单脚本 
cat<<EOF
1. install rsync
2. install nfs
3. install mysql
4. install all
EOF

read -p '请输入你的选择:' chs

case $chs in
1)
echo install rsync success
;;
2)
echo install nfs success
;;
3)
echo install mysql success
;;
4)
echo install rsync/nfs/mysql success
;;
*)
echo "你输入有误"
esac

##############################

24.Samba安装脚本

sambaInstall.sh

#!/bin/bash
#Samba安装脚本

[ -d /abcs/shared ] || mkdir -p /abcs/shared
rpm -qa | grep samba-4. &>/dev/null

if [ $? -eq  1 ] 
then 
  yum install samba -y &>/dev/null
fi

systemctl start smb
systemctl status smb

#创建用于访问共享资源的账户信息。账户必须在当前系统已经存在
id sambaUser
if [ $? -eq  1 ] 
then 
  groupadd sambaUser &>/dev/null
  useradd -g sambaUser sambaUser &>/dev/null
  echo "sambaUser User has been created."
else
  echo "sambaUser User has been created."
fi

pdbedit -a -u sambaUser


#文件读写权限的问题,还需要考虑应用于该目录的SELinux安全上下文所带来的限制
chown -Rf sambaUser:sambaUser /abcs/shared
semanage fcontext -a -t samba_share_t /abcs/shared
restorecon -Rv /abcs/shared

#设置SELinux服务与策略,使其允许通过Samba服务程序访问普通用户家目录
setsebool -P samba_enable_home_dirs on
getsebool -a | grep samba


#在Samba服务程序的主配置文件中,追加共享文件夹配置参数信息
cd /etc/samba/
echo "[database]" >> smb.conf
echo "comment = Do not arbitrarily modify the database file" >> smb.conf
echo "path = /abcs/shared" >> smb.conf
echo "public = on" >> smb.conf
echo "writable = yes" >> smb.conf


#重启Samba服务并加入开机启动项。为避免防火墙妨碍,清空iptables防火墙
systemctl restart smb
systemctl enable smb

iptables -F

##############################

25.自动优化Linux内核参数

optimizingKernelParam.sh

#!/bin/bash
#此脚本针对RHEL7系列
cat >> /usr/lib/sysctl.d/00-system.conf << EOF
fs.file-max=65535
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernek.shmmin = 4096
kernel.sem = 5010 641280 5010 128
net.core.wmem_default=262144 
net.core.wmem_max=262144 
net.core.rmem_default=4194304 
net.core.rmem_max=4194304 
net.ipv4.tcp_fin_timeout = 10 
net.ipv4.tcp_keepalive_time = 30 
net.ipv4.tcp_window_scaling = 0 
net.ipv4.tcp_sack = 0 
EOF 

##############################

26.5.1的休息;5.2的休息。明天继续学习计划。

##############################

27.实现类似手机通讯计费功能

mobileBilling.sh

#!/bin/bash
#############################################################
#手机计费

sum=1000
i=15


while [ $sum -ge 15 ]
  do
cat<<EOF
=================
1.发短信
2.查余额
3.账户充值
4.退出
=================
EOF
    read -p "你要做什么呢?" Some
    case "$Some" in
      1)
        sum=$((sum-i))
        read -p  "请输入发送短信的内容:"
        read -p  "请输入收信人:"
        sleep 0.3
        echo "发送成功."
        echo "您当前余额为$sum"
        ;;
      2)
        echo "您当前余额为$sum"
        ;;
      3)
        read -p "请输入你要充值的金额:" ChongZhi
        sum=$((sum+ChongZhi))
        echo "充值成功,当前余额为$sum"
        ;;
      4)
        exit
        ;;
      *)
        echo "输入有误!"
        exit 2
    esac
done

echo "余额不足,请及时充值!"

##############################

28.批量检查多个网站地址是否正常

check_url.sh

#!/bin/bash
#批量检查多个网站地址是否正常
url=(
http://www.baidu.com
https://www.cnblogs.com/yachengmuCC/
http://10.0.0.7
)

while true 
  do
    for i in ${url[@]} 
      do 
      #curl $i &>/dev/null
      a=$(curl -I -w "%{http_code}\n" -o /dev/null -s $i)
      if [ $a -eq 200 ]
        then
          echo "$url 正常"
      fi
    done
    sleep 10
done

##############################

29.批量生成随机字符文件名案例

make_file.sh

#!/bin/bash
#批量生成随机字符文件名案例
#在/root/202205目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串【20220505】

[ -d /root/202205 ] || mkdir -p /root/202205
rpm -qa |grep pwgen &>/dev/null

if [ $? -eq  1 ] 
then 
  yum install pwgen -y &>/dev/null
fi

cd /root/202205 &&\
for i in {1..10}
do
#File_Name=`uuidgen |tr "0-9-" "a-z"|cut -c 1-10`
File_Name2=`pwgen -1A0 10`
touch ${File_Name2}_20220505.html
done

##############################

30.改网络配置,并生效

auto_IP_alter.sh

#!/bin/bash
#改网络配置,并生效

IPPATH=/etc/sysconfig/network-scripts/ifcfg-ens33
IP=`cat $IPPATH |grep "IPADDR="|awk -F "=" '{print$2}'`
NET=`cat $IPPATH |grep "NETMASK="|awk -F "=" '{print$2}'`
GAT=`cat $IPPATH |grep "GATEWAY="|awk -F "=" '{print$2}'`
BOOT=`cat $IPPATH |grep "BOOTPROTO=" |awk -F "=" '{print$2}'`

#-------------判断网络模式并判断是否需追加ip信息-----------------------------
cat /etc/sysconfig/network-scripts/ifcfg-ens33 |grep "IPADDR" &>/dev/null

if [ $? -eq 0 ];then
        ls &>/dev/null
else
        echo "#IPADDR=192.168.108.90" >> $IPPATH
        echo "#NETMASK=255.255.255.0" >> $IPPATH
        echo "#GATWAY=192.168.108.2" >> $IPPATH
fi

#------------------------菜单显示--------------------------------------------
echo -e "\033[35m----------------------------------------------\033[0m"
echo -e "\033[35m-------------欢迎使用IP修改工具---------------\033[0m"
echo -e "\033[35m----------------------------------------------\033[0m"

if [[ $BOOT = dhcp ]];then
        echo -e "\033[37m现在的网络模式是:$BOOT\033[0m"

else
        echo -e "\033[37m现在的网络模式是:$BOOT\033[0m"
        echo -e "\033[37m现在的IP是:$IP\033[0m"
        echo -e "\033[37m现在的mask是:$NET\033[0m"
        echo -e "\033[37m现在的gatway是:$GAT\033[0m"

fi

echo -e "\033[32m请按选项选择修改:\033[0m"
echo -e "\033[31m1)   | 修改IP\033[0m"
echo -e "\033[31m2)   | 修改mask\033[0m"
echo -e "\033[31m3)   | 修改gatway\033[0m"
echo -e "\033[31m4)   | 修改网络模式\033[0m"
echo -e "\033[31mq)   | 退出\033[0m"
echo -e "\033[35m----------------------------------------------\033[0m"

#------------------------修改内容-------------------------------

#------------------------IP修改---------------------------------

function IPADDR (){
        read -p "请输入您要修改的IP:" i

        sed -i "s/$IP/$i/g" $IPPATH

        if [ $? = 0  ];then
                echo -e "\033[36m修改成功!\033[0m"
        else
                echo -e "\033[36m修改失败!\033[0m"
        fi
}

#-----------------------掩码修改--------------------------------
function NETMASK (){
        read -p "请输入您要修改的子网掩码:" i

        sed -i "s/$NET/$i/g" $IPPATH

        if [ $? = 0  ];then
                echo -e "\033[36m修改成功!\033[0m"
        else
                echo -e "\033[36m修改失败!\033[0m"
        fi

}

#-----------------------网关修改--------------------------------
function GATWAY (){
        read -p "请输入您要修改的网关:" i

        sed -i "s/$GAT/$i/g" $IPPATH

        if [ $? = 0  ];then
                echo -e "\033[36m修改成功!\033[0m"
        else
                echo -e "\033[36m修改失败!\033[0m"
        fi

}

#-----------------------注释IP信息-------------------------------
function DHCP (){
        sed -i 's/^IPADDR/#IPADDR/g' $IPPATH
        sed -i 's/^NETMASK/#NETMASK/g' $IPPATH
        sed -i 's/^GATWAY/#GATWAY/g' $IPPATH

        if [ $? = 0  ];then
                echo -e "\033[36m修改成功!\033[0m"
        else
                echo -e "\033[36m修改失败!\033[0m"
        fi

}

#-----------------------开放IP信息-------------------------------
function STATIC (){
        sed -i 's/^#IPADDR/IPADDR/g' $IPPATH
        sed -i 's/^#NETMASK/NETMASK/g' $IPPATH
        sed -i 's/^#GATWAY/GATWAY/g' $IPPATH

        if [ $? = 0  ];then
                echo -e "\033[36m修改成功!\033[0m"
        else
                echo -e "\033[36m修改失败!\033[0m"
        fi

}

#-----------------------网络模式修改-----------------------------
function BOOT (){
        read -p "请输入您要修改的网络模式:" i

        sed -i "s/$BOOT/$i/g" $IPPATH
        sleep 2

        if [[ $i = dhcp ]];then
                DHCP
        else
                STATIC
        fi
}

#-----------------------功能调用----------------------------------
read -p "请输入您要修改的选项:" i

case $i in
        1)
        IPADDR
        ;;

        2)
        NETMASK
        ;;

        3)
        GATWAY
        ;;

        4)
        BOOT
        ;;

        q)
        exit
        ;;

        *)
        echo -e "\033[36m请输入正确选项!\033[0m"
        sh ip.sh
esac

#-----------------------重启服务----------------------------------
echo -e "\033[36m正在重启网络服务……\033[0m"

/etc/init.d/network restart &>/dev/null

if [ $? -eq 0 ];then
        echo -e "\033[36m网络服务启动成功!\033[0m"
else
        echo -e "\033[36m网络服务启动失败!\033[0m"
fi

##############################

31.源码包安装前准备工作。【下载包,到指定目录;解压到指定目录;是否删除包。】

beforeInstall.sh

#!/bin/bash
#源码包安装前准备工作。【下载包,到指定目录;解压到指定目录;是否删除包。】

echo "源码包安装前准备工作。"

read -p "请切换到包下载目录:" DOWND
[ -d $DOWND ] || mkdir -p $DOWND
cd $DOWND
pwd

read -p "请输入下载包的链接:" WGET
wget $WGET
ls

read -p "请输入解压包的包名:" BAGS
tar -xvf $BAGS


read -p "是否删除包?y and n :" Some

    case "$Some" in
      y)
        rm $BAGS
        ;;
      n)
        exit 0
        ;;
      *)
        echo "输入有误!"
        exit 2
    esac

##############################

32.linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行

#!/bin/sh
sleep 10
PID=`ps aux | grep lstm_prob.py | awk '{print $2}'`

if [ -n "$PID" ]; then
  sleep 10
  ps -ef|grep -v grep|grep lstm_prob.py |awk '{print "kill -9 "$2}'|sh
fi

cd /root/tf/
nohup /usr/local/bin/python3.6 lstm_prob.py >nohup.out 2>&1 &

##############################

33.监控httpd服务80端口状态,服务异常输出报警信息,并尝试启动,服务正常时提示正常运行。

#!/bin/bash
#监控httpd服务80端口状态,服务异常输出报警信息,并尝试启动,服务正常时提示正常运行。
web=`netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'`
apachelog=/var/log/httpd/service.log
if [ '$web' = '80' ]
then
      echo "HTTPD正在运行"
else
      echo "Web服务重新启动"
      echo "`date` Web服务重新启动" >> $apachelog
      /etc/init.d/httpd start &> /dev/null
      sleep 2
      echo `date` 重新启动 | /usr/sbin/sendmail -v  16605681432@163.com > /dev/null
fi

##############################

34.释放内存脚本

freemem.sh

#!/bin/bash

used=`free -m | awk 'NR==2' | awk '{print $3}'`

free=`free -m | awk 'NR==2' | awk '{print $4}'`

echo "===========================" >> /var/log/mem.log

date >> /var/log/mem.log

echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /var/log/mem.log

if [ $free -le 1000 ] ; then

            sync && echo 1 > /proc/sys/vm/drop_caches

            sync && echo 2 > /proc/sys/vm/drop_caches

            sync && echo 3 > /proc/sys/vm/drop_caches

            echo "OK" >> /var/log/mem.log

else

            echo "Not required" >> /var/log/mem.log

fi

定时任务命令

echo "*/30 * * * * root /home/freemem.sh" >> /etc/crontab

##############################

35.lftp.sh自动上传脚本

#!/bin/bash
echo -e "\nScript start at \033[43;35m `date "+%H:%M:%S"` \033[0m"
echo -e "\033[1;34m-----------------------------------------------------------------------\033[0m"
cd /root/upload ; rm -fr /root/upload/*
git clone git@10.35.33.29:xiaoban/server-api/xiaoban-server.git
mv /root/upload/xiaoban-server/* /root/upload/ ; rm -fr /root/upload/xiaoban-server
tar zcvf code.tar.gz ./* >/dev/null


lftp << EOF
open ftp://xiaoban:xiaoban@2018@ftp.wjoyxt.ren
cd
put /root/upload/code.tar.gz
close
bye
EOF
rm -fr /root/upload/*
echo -e "\033[1;34m-----------------------------------------------------------------------\033[0m"
echo -e "Script end at \033[43;35m `date "+%H:%M:%S"` \033[0m \n "

##############################

36.5.12脚本。

##############################

37.5.13脚本。

##############################

38.5.14脚本。

##############################

39.5.15脚本。

##############################

40.5.16脚本。

##############################

41.5.17脚本。

##############################

42.5.18脚本。

##############################

43.5.19脚本。

##############################

44.5.20脚本。

##############################

45.5.21脚本。

##############################

46.5.22脚本。

##############################

47.5.23脚本。

##############################

48.5.24脚本。

##############################

49.httpd_源码包安装脚本

#!/bin/bash
# httpd-2.4.46

# create apache files
mkdir  /usr/src/apache_tar_gz


# centos yi_lai
yum -y install make gcc gcc-c++ kernel-devel m4  ncurses-devel openssl-devel expat-devel

# install apr
cd /usr/src/apache_tar_gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.gz
tar zxf apr-1.7.0.tar.gz
cd ./apr-1.7.0
./configure --prefix=/usr/local/apr
make && make install

# install apr-util
cd /usr/src/apache_tar_gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
tar zxf apr-util-1.6.1.tar.gz
cd ./apr-util-1.6.1
./configure --prefix=/usr/local/apr-util \
  --with-apr=/usr/local/apr
make && make install

# install zlib
cd /usr/src/apache_tar_gz
wget https://zlib.net/fossils/zlib-1.2.11.tar.gz
tar zxf zlib-1.2.11.tar.gz
cd ./zlib-1.2.11
./configure --prefix=/usr/local/zlib
make && make install

# install pcre
cd /usr/src/apache_tar_gz
wget https://sourceforge.net/projects/pcre/files/pcre/8.44/pcre-8.44.tar.gz
tar zxf pcre-8.44.tar.gz
cd ./pcre-8.44
./configure --prefix=/usr/local/pcre
make && make install

# install openssl
cd /usr/src/apache_tar_gz
wget https://ftp.openssl.org/source/openssl-1.1.1j.tar.gz
tar zxf openssl-1.1.1j.tar.gz
cd ./openssl-1.1.1j
./config -fPIC --prefix=/usr/local/openssl enable-shared
make && make install


# install httpd
cd /usr/src/apache_tar_gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.53.tar.gz
tar zxf httpd-2.4.53.tar.gz
cd ./httpd-2.4.53
cp -r ../apr-1.7.0 srclib/apr
cp -r ../apr-util-1.6.1 srclib/apr-util
./configure --prefix=/usr/local/httpd \
  --enable-so \
  --enable-cgi \
  --enable-cgid \
  --enable-ssl \
  --with-ssl=/usr/local/openssl \
  --enable-rewrite \
  --with-pcre=/usr/local/pcre \
  --with-z=/usr/local/zlib \
  --with-apr=/usr/local/apr \
  --with-apr-util=/usr/local/apr-util \
  --enable-modules=most \
  --enable-mods-shared=most \
  --enable-mpms-shared=all \
  --with-mpm=event \
  --enable-proxy \
  --enable-proxy-fcgi \
  --enable-expires \
  --enable-deflate \
  --with-included-apr
make && make install

# 
ln -s /usr/local/httpd/bin/* /usr/local/bin

cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
echo "# chkconfig: 35 85 85
# description: apache 2.4.53" >> /etc/init.d/httpd
chkconfig --add httpd



echo "__end__"

##############################

50.5.26脚本。

##############################

51.5.27脚本。

##############################

52.5.28脚本。

##############################

53.5.29脚本。

##############################

54.5.30脚本。

##############################

55.5.31脚本。

##############################

56.6.1脚本。

##############################

57./etc/init.d/nginx 启动脚本

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 30 21
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"



lockfile=/var/lock/subsys/nginx

make_dirs() {
  # make required directories
  user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
  if [ -n "$user" ]; then
    if [ -z "`grep $user /etc/passwd`" ]; then
      useradd -M -s /bin/nologin $user
    fi
    options=`$nginx -V 2>&1 | grep 'configure arguments:'`
    for opt in $options; do
      if [ `echo $opt | grep '.*-temp-path'` ]; then
          value=`echo $opt | cut -d "=" -f 2`
          if [ ! -d "$value" ]; then
              # echo "creating" $value
              mkdir -p $value && chown -R $user $value
          fi
      fi
    done
fi
}

start() {
  [ -x $nginx ] || exit 5
  [ -f $NGINX_CONF_FILE ] || exit 6
  make_dirs
  echo -n $"Starting $prog: "
  daemon $nginx -c $NGINX_CONF_FILE
  retval=$?
  echo
  [ $retval -eq 0 ] && touch $lockfile
  return $retval
}

stop() {
  echo -n $"Stopping $prog: "
  killproc $prog -QUIT
  retval=$?
  echo
  [ $retval -eq 0 ] && rm -f $lockfile
  return $retval
}

restart() {
  configtest || return $?
  stop
  sleep 1
  start
}

reload() {
  configtest || return $?
  echo -n $"Reloading $prog: "
  killproc $prog -HUP
  retval=$?
  echo
}

force_reload() {
  restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
  status $prog
}

rh_status_q() {
  rh_status >/dev/null 2>&1
}

case "$1" in
  start)
      rh_status_q && exit 0
      $1
      ;;
  stop)
      rh_status_q || exit 0
      $1
      ;;
  restart|configtest)
      $1
      ;;
  reload)
      rh_status_q || exit 7
      $1
      ;;
  force-reload)
      force_reload
      ;;
  status)
      rh_status
      ;;
  condrestart|try-restart)
      rh_status_q || exit 0
      ;;
  *)
      echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
      exit 2
esac

##############################

58.6.3脚本。

##############################

59.6.4脚本。

##############################

60.6.5脚本。

##############################

61.6.6脚本。

##############################

62.6.7脚本。

##############################

63.6.8脚本。

##############################

64.6.9脚本。

##############################

65.6.10脚本。

##############################

66.6.11脚本。

##############################

67.6.12脚本。

##############################

68.6.13脚本。

##############################

69.6.14脚本。

##############################

70.6.15脚本。

##############################

71.6.16脚本。

##############################

72.6.17脚本。

##############################

73.6.18脚本。

##############################

74.6.19脚本。

##############################

75.6.20脚本。

posted on   亚城木CC  阅读(294)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示