【问题标题】:How to condition a bash script to send a warning如何调节 bash 脚本以发送警告
【发布时间】:2021-10-14 08:06:21
【问题描述】:

我有一个从 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 特里斯坦

【问题讨论】:

  • 与 MySQL 无关。
  • sftp 不是 ftp
  • 好的...但是关于这件事,你有什么想法吗?

标签: bash conditional-statements sftp


【解决方案1】:

使用-o BatchMode=yes 在批处理模式下运行sftp。从标准输入提供脚本,所以-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

【讨论】:

  • One.Punch.Leon - 实际上你说的很有道理。我们已经对您的想法进行了一些调整,并最终奏效了。非常感谢您的宝贵时间。
猜你喜欢
  • 2015-09-17
  • 2011-08-12
  • 2016-07-04
  • 1970-01-01
  • 2010-11-01
  • 2014-07-27
  • 2018-08-03
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多