if-statement - 简单的期望 else 脚本
问题描述
我试图运行一个命令并期待一个输出,我已经准备好了,但如果我没有得到预期的输出,我似乎无法获得正确的语法来做什么。
#!/usr/bin/expect -f
set timeout -1
spawn ./container_check
expect -- "*wpa_supplicant-udmpro:v1.0*"
send -- "exit\r"
else -- "podman container start wpa_supplicant-udmpro\r"
expect eof
如果脚本看到 wpa_supplicant 响应,我希望脚本退出,但如果没有,我也希望它运行“podman container start wpa_supplicant-udmpro”,我似乎无法让它这样做。
#!/usr/bin/expect -f
set timeout -1
spawn ./container_check
if [ expect "*wpa_supplicant-udmpro:v1.0*" ];
then { send "exit\r"; }
else { send "podman container start wpa_supplicant-udmpro\r"; }
expect eof
fi
另一个尝试,我不知道我在做什么 LOL
解决方案
我感觉应该将“podman”命令发送到操作系统,而不是“container_check”程序。如果属实,那么也许这就是您所需要的:
如果“container_check”退出非零或向 stderr 发出任何内容,exec
将出错并且需要捕获:
#!/usr/bin/expect -f
if {[catch {exec ./container_check 2>@1} check_output] != 0} {
# a non-zero exit status: do we care?
}
if {![string match "*wpa_supplicant-udmpro:v1.0*" $check_output]} {
exec podman container start wpa_supplicant-udmpro
}
如果container_check
程序确实需要交互,那我就错了。
由于您使用的是 sshpass,因此您无需与 ssh 进程交互:expect 是该工作的错误工具。坚持使用简单的 bash 脚本。
#!/bin/bash
doSsh() {
sshpass -p "password" ssh -o StrictHostKeyChecking=no username@ipaddress "$@"
}
if [[ "$( doSsh docker container ls )" != *"wpa_supplicant-udmpro:v1.0"* ]]; then
doSsh podman container start wpa_supplicant-udmpro
fi
推荐阅读
- spring-webflux - Spring Data Elasticsearch的ReactiveElasticsearchClient上的ReadTimeoutException
- vba - 如何参考另一列复制列的数据?
- c++ - 检查嵌套类模板的概念
- docker - 路由到 docker swarm 上的服务
- excel - 如何遍历用户表单,直到做出选择或退出?
- java - 我的保存方法只保存背景而不是 Java GUI 中的绘制图像
- html - 如何将 HTML 按钮中的图标与文本分开移动?
- html - 在侧边栏Angular外部单击时如何关闭右侧边栏?
- unity3d - 如何将AR核心项目改为AR基础
- python - 如何在 Django 中的同一表单上使用 GET 和 POST