Shell 命令合集

常用 shell 脚本记录

判断输入参数是否是合理参数


#!/bin/bash
port=

read -p "请输入 8184|8185:  " port
echo -e '\n'

case $port in
'8184' | '8185')
    echo $port;;
*)
    echo "请输入 8184|8185"
    exit 1;;
esac

判断目录是否存在,不存在则创建

#!/bin/bash
todate=`date +%Y%m%d`

function checkDir() {
	if [ ! -d "/home/chenglong/$todate" ];then
        mkdir -p /home/chenglong/$todate
	fi
}

查询进程号

#!/bin/bash

processName=
pid=

function getPid() {
    echo "检测状态"
    pid=`ps -ef | grep -n $processName | grep -v grep | awk '{print $2}'`
    if [ $pid ]
    then
        echo "$processName 运行pid:$pid"
    else
        echo "$processName 未运行"
    fi
}

停止进程使用 kill -9

#!/bin/bash

pid=

function stop() {
    getPid
    if [ $pid ]
    then
        echo "开始停止程序 $pid "
        kill -9 $pid

        getPid
        if [ $pid ]
        then
            echo "停止失败"
        else
            echo "停止成功"
        fi
    fi
}

备份mysql表

#!/bin/bash
# 备份 MySQL 的 shell 脚本(mysqldump版本) 
 
# 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)
# dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)
# crontab  ‐e  添加到定时任务中
 
user=root
dbname=jsdoctor_preview
passwd=
date=$(date +%Y%m%d)
 
# 测试备份目录是否存在,不存在则自动创建该目录
[ ! -d /home/mysqlbackup ] && mkdir /home/mysqlbackup
# 使用 mysqldump 命令备份数据库
# 有时候默认的 socket 会不对,可以使用 netstat -ln | grep mysql 查看 mysql 的 socket 是什么
mysqldump --socket=/tmp/mysql.sock -u"$user" -p"$passwd" "$dbname" > /home/mysqlbackup/"$dbname"-${date}.sql 

# 压缩
cd /home/mysqlbackup
tar -zcvf "$dbname"-${date}.sql.tar.gz "$dbname"-${date}.sql

rm "$dbname"-${date}.sql

# 删除7天前的备份文件
find /home/mysqlbackup/ -type f -mtime +7 -exec rm -f {} \;

统计日志中访问最多的10个IP

# access.log 为 nging 的访问日志
gawk '{a[$1]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log

统计当前时间前一分钟的访问数

# access.log 为 nging 的访问日志
grep -c $(date -d '-1 minute' +%d/%b/%Y:%H:%M) access.log

统计访问最多的前10个页面($request)

# access.log 为 nging 的访问日志
gawk '{a[$7]++}END{for(i in a)print a[i],i|"sort -k1 -nr|head -n10"}' access.log
原文地址:https://www.cnblogs.com/manastudent/p/15791092.html