问题描述
我正在编写一个简单的脚本,以便在我的 Mikrotik 路由器中有新的固件更新可用时通知我。用于此目的的 RouterOS 命令是:
ssh myrouter system package update print
当它正常运行时,它工作正常,显示如下:
channel: stable
installed-version: 6.48
latest-version: 6.48.1
status: New version is available
我用来仅检索相关信息以便触发通知的完整命令是:
ssh -q myrouter system package update print |tail -2 |head -1 |sed "s/: /\n/" |tail -1
当它“按原样”运行(不在脚本或其他任何东西中)时会导致这种情况:
New version is available
但是,我似乎无法在简单的 if
语句中解析此文本,无论是直接操作它还是首先将其重定向到本地文件:
UPDATES_AVAILABLE=$(ssh myrouter system package update print |tail -2 |head -1 |cut -d: -f2)
if [[ "$(echo ${UPDATES_AVAILABLE})" == "New version is available" ]]; then
echo "INFO: New firmware version is available"
fi
最后一个总是不返回任何内容,无论是在脚本中运行还是直接在 shell 中运行。
我错过了什么?
解决方法
哦,没关系,我刚刚修好了。
将输出重定向到 /tmp/mikrotik.tmp
文件后,我只想运行:
file /tmp/mikrotik.tmp
然后我看到它返回了这个:
mikrotik: ASCII text,with CRLF line terminators
因此,一旦我在字符串过滤器命令中添加了 | dos2unix
,它就开始按预期工作,现在:
UPDATES_AVAILABLE=$(ssh myrouter system package update print |dos2unix |tail -2 |head -1 |cut -d: -f2)
if [[ "$(echo ${UPDATES_AVAILABLE})" == "New version is available" ]]; then
echo "INFO: New firmware version is available"
fi
正确返回:
INFO: New firmware version is available