bash - 如何调节 bash 脚本以发送警告
问题描述
我有一个从 sftp 获取文件的脚本,稍微修改一下路径和访问,然后用于在 mysql 中导入:
#!/bin/bash
sshpass -p password sftp -P 22001 ftp@server <<-'EOSSH1'
lcd path/where/to/be/grabbed
get *.csv
EOSSH1
#Moving and permission
mv original/path destination/path
chmod 777 file
#Insertion csv in mysql
mysql --login-path=user < cmds.txt (a file with commands to be executed in mysql)
现在,我需要设置这样的条件:如果 csv 文件不在 sftp 服务器中,则发送电子邮件而不运行脚本。如果文件在那里,一切都可以正常运行。
知道怎么做吗?
BR特里斯坦
解决方案
sftp
使用批处理模式运行-o BatchMode=yes
。从标准输入提供脚本,所以-b -
.
如果get *.csv
失败,sftp
则以非零状态退出。
在您的脚本中,您可以检查该退出状态。
#!/bin/bash
sshpass -p password sftp -o BatchMode=yes -b - -P 22001 ftp@server <<-'EOSSH1'
lcd path/where/to/be/grabbed
get *.csv
EOSSH1
if [ "$?" -ne 0 ]; then
echo "sftp failed. exiting..." >&2
exit 1
fi
#Moving and permission
mv original/path destination/path
chmod 777 file
#Insertion csv in mysql
mysql --login-path=user < cmds.txt (a file with commands to be executed in mysql)
手册页:
-b batchfile
Batch mode reads a series of commands from an input batchfile instead of stdin. Since it lacks user interaction it should be used in conjunction with non-interactive authentication to obviate the need to enter a password at connection time (see sshd(8) and ssh-keygen(1) for details).
A batchfile of ‘-’ may be used to indicate standard input. sftp will abort if any of the following commands fail: get, put, reget, reput, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir.
Termination on error can be suppressed on a command by command basis by prefixing the command with a ‘-’ character (for example, -rm /tmp/blah*). Echo of the command may be suppressed by prefixing the command with a ‘@’ character. These two prefixes may be combined in any order, for example
-@ls /bsd.
替代方案您可以简单地使用scp
:
sshpass -p password scp ftp@server:*.csv path/where/to/be/grabbed/ || exit 1
推荐阅读
- ios - 升级到 Xcode 10 GM 种子后,EstimoteProximitySDK 使我的应用程序崩溃
- javascript - 如何修改此 PolymerFire/Firebase 教程以使用电子邮件/密码登录而不是谷歌帐户?
- bash - Mac os x终端邮件:在一封邮件中发送多个输出
- java - 在休眠中调用存储过程
- regex - 在正则表达式中选择部分行
- r - 列是字符而不是因子有什么好的理由吗?
- java - JUnit:当测试的类不包含方法时,测试类方法会中断编译
- sql - SQL Server 触发条件
- android - 创建自定义渲染器时 Xamarin 在 Android 上崩溃
- activemq-cpp - ActiveMQCPP--无法发布到已删除的目的地:临时队列: