1、Shell基础语法

案例:

#!/bin/bash
# 定义变量,等号两边不能有空格,变量命名规则和一般java一样。变量名一般是大写的,规范来说
msg=你大爷的bkl
echo 他说:$msg
# 撤销变量
unset msg
# 定义静态变量 即不可unset的
readonly name=bkl
echo "my name is $name"

# 将命令的返回值赋值给变量,以下两种写法均可以
date1=`date`
date2=$(date)
echo date1=$date1
echo date2=$date2

echo 环境变量在/etc/profile定义,然后source /etc/profile使其生效
echo 环境变量MY_TEST=$MY_TEST

# 多行注释
:<<!
echo 123
echo 222
echo 333
!
# echo 多行注释

echo ------命令行参数获取------
echo 命令本身=$0 参数1=$1 参数2=$2
echo 全部参数(所有参数看成整体)=$*
echo 全部参数(每个参数区分对待)=$@
echo 参数个数=$#

echo ------预定义变量,是shell设计者预先定义好的变量,可直接使用------
echo 当前进程的进程号=$$
# 后台运行在命令最后加上&即可
# /root/shcode/hello.sh &
echo 后台运行的最后一个进程的进程号=$!
echo 最后一次执行命令的返回状态,如果为0即正确执行了,反之不正确$?

echo ------运算符------
echo 第一种写法=$(((2+3)*4))
echo 第二种写法(推荐)=$[(2+3)*4]
echo 第三种写法,用expr写,案列都不想打,太反人类了
echo 求出命令行的两个参数的和=$[$1+$2]

echo ------条件判断------
echo 字符串比较用=
echo 两个数比较用-lt -le -eq -gt -ge -ne(分别代表 小于 小于或者等于 等于 大于 大于或者等于 不等于)
echo 按文件权限判断 -r -w -x(分别代表有 读 写 执行 的权限)
echo 按文件类型判断 -f -e -d(分别代表 文件存在且是一个常规文件 文件存在 文件存在且是一个目录)
echo 条件判断案例(条件用中括号,括号左右必须有空格,条件为空的话就是false):
if [ bkl=bkl ]
  then
    echo bkl等于bkl
fi

if [ 22 -le 23 ]
  then
    echo 22小于等于23
fi

if [ -f /root/shcode/hello.sh ]
  then
    echo hello.sh文件存在
fi

if [ $1 -le 100 ]
then
  echo 命令行参数1小于等于100
elif [ $1 -le 120 ]
then
  echo 命令行参数1小于等于120
else
  echo 命令行参数1大于120
fi

echo ------流程控制------
echo case的基本使用

case $1 in
111)
echo 命令行参数1为111
;;
11)
echo 命令行参数1为11
;;
*)
echo 命令行参数1为other
;;
esac

echo ------for循环------
for i in $*
do
  echo 命令行参数=$i
done

SUM=0
for (( j=0; j<=$1; j++ ))
do
  SUM=$[$SUM+$j]
done
echo 总和SUM=$SUM

echo ------while循环------
SUM=0
i=0
while [ $i -le $1 ]
do
  SUM=$[$SUM+$i]
  i=$[$i+1]
done
echo while执行后SUM=$SUM

echo ------read从控制台输入------
read -t 5 -p 请输入一个数(请5秒内输入,否则默认跳过): NUM1
if [ $NUM1 ]
then
  echo 你输入的是:$NUM1
else
  echo -e "\n你没输入任何数据..."
fi

echo ------系统自带函数------
echo 用basename获取文件名`basename /home/aaa/bbb/test.txt`
echo 用basename获取文件名,去除后缀的`basename /home/aaa/bbb/test.txt .txt`
echo 用dirname获取完整路径最后个/前面的部分`dirname /home/aaa/bbb/test.txt`

echo ------自定义函数------
function getSum(){
  SUM=$[$n1+$n2]
  echo 你输入的两数和为:$SUM
}
read -p 请输入整数n1: n1
read -p 请输入整数n2: n2
# 调用自定义函数
getSum $n1 $n2

2、Linux的Mysql数据库定时备份

案例代码:

#!/bin/bash
#备份目录
BACKUP=/data/backup/mysql
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码,包含特殊字符需要用单引号包起来,不然报错
DB_PWD='123456!@#$%^&*()-='
#需要备份的数据库名
DATABASE=backup_test

#创建备份目录
[ ! -d "$BACKUP" ] && mkdir -p $BACKUP

echo 开始备份数据库:$DATABASE
#备份数据库 -R表示导出存储过程和自定义函数
mysqldump -u$DB_USER -p$DB_PWD --host=$HOST -R --databases $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz

#删除10天前的备份文件
find $BACKUP -atime +10 -name "*.sql.gz" -exec rm -rf {} \;
echo 备份数据库成功,文件名:$DATETIME

2.1 授予执行权限

chmod u+x /usr/sbin/bkl_mysql_db_backup.sh

2.2 开启定时任务

设置每天凌晨2点自动执行上面的脚本。
使用crontab创建任务:crontab -e 输入:
0 2 * * * /usr/sbin/bkl_mysql_db_backup.sh
分别代表 分 时 日 月 周几 待执行的任务
保存退出即可。
然后crontab -l即可查看任务。

结果检测:

shell执行mysqldump shell执行mysql语句赋值变量_mysql


可以看到11日和12日已经正常备份了。