第一个shell脚本

需求背景:

​ 公司需要把服务器本地备份的sql数据,备份到另一台ftp服务器上。

需求分析:

​ 1.因本地数据库备份为最近5天的数据集,故需要找到当天的数据文件

​ 2.备份至ftp服务器上,故需要ftp命令。

​ 3.定时任务每天执行

代码一:异地本分脚本

#!/bin/bash
HOST='***'
USERNAME='username'
PASSWORD='password'
#upload file to FTP server
#文件目录(本地工作目录)
DIRECTORY="/home/data/backup/prod/mysql/erp_base_db/"
#获取目录第一个文件名
FIRST_FILE=$(ls -1 "$DIRECTORY" | sort -r | head -n 1)
cd $DIRECTORY
ftp -inv *** <<END_SCRIPT
user $USERNAME $PASSWORD
put $FIRST_FILE  $FIRST_FILE
quit
END_SCRIPT
exit 0

代码二:crontab -e 新增定时任务

*  *  *  *  *  command

第一次脚本困境

一:调试困难

1.根据脚本提示错误,然后在命令行中真对出错的命令调试

二:脚本内的命令运行失败(cd 找不到后面的路径,put 找不到文件.......)

编码问题:

​ windows下编辑的脚本,所以有可能有不可见字符。脚本文件是DOS格式的。

解决办法

​ 2.1 vim filename

​ 2.2 :set ff
​ 可看到dos或unix的字样,如果的确是dos格式的, 那么用set ff=unix把它强制为unix格式的,,然后存盘退出后就可运行。

三:ftp 命令

3.1:ftp -inv ***

   用法: ftp  [-Apinegvtd] [hostname]
       -A: enable active mode
       -p: enable passive mode (default for ftp and pftp)
       -i: turn off prompting during mget
       -n: inhibit auto-login
       -e: disable readline support, if present
       -g: disable filename globbing
       -m: don't force data channel interface to the same as control channel
       -v: verbose mode
       -t: enable packet tracing [nonfunctional]
       -d: enable debugging

3.2:提示登录:用户名,密码

3.2:脚本内的其他指令

​ lcd:切换本地工作目录(ftp环境外的工作目录,对比cd)

​ put A B :推送ftp环境外的A文件到ftp服务器上的工作目录

四: 定时任务

4.1 :crontab -l #查看crontab定时执行任务列表

4.2 :crontab -e #编辑crontab定时执行任务

4.3 :service crond start #启动服务

4.4 :service crond stop #关闭服务

4.5 :service crond restart #重启服务

4.6 :service crond reload #重新载入配置

4.7 :service crond status #查看服务状态

五:Linux $符号的常见用法

5.1用法一:$0, $?等表示各种参数
$0:#bash文件名。
$?:#上一指令的返回值,成功是0,不成功是1。
$1,$2,$3....:#表示命令后接的第几个参数
5.1用法二:${}, 获取变量的值
[root@localhost ~]# a='123'
[root@localhost ~]# echo ${a}
123  #输出

​ ${var_name} 跟光$var_name差不多,

​ 但是用${ }会比较精确的界定变量名称的范围。

5.1用法三:$()
echo "present dir is $(pwd)" #执行括号或者反引号中的命令, 然后返回结果。
present dir is /root   # pwd 指向当前目录
posted @ 2023-08-28 17:10  爱我-中华  阅读(13)  评论(0编辑  收藏  举报