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即可查看任务。
结果检测:
可以看到11日和12日已经正常备份了。