如何限制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特里斯坦

使用-o BatchMode=yes批量运行sftp。从stdin提供脚本,所以-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

最新更新