gpt4 book ai didi

linux - shell 脚本中的嵌套 Case 语句 |获取语​​法错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:05 26 4
gpt4 key购买 nike

我试图在 shell 脚本下运行,但出现语法错误。

script.sh env1 ManagedSvr1 line 29: warning: here-document at line 6 delimited by end-of-file (wanted `EOF') line 30: syntax error: unexpected end of file

#!/bin/bash
case "$1" in "env1")
ssh weblogic@hostname1 << EOF
case "$server" in
"ManagedSvr1")
tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr1/logs/ManagedSvr1.log
;;
"ManagedSvr2")
tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr2/logs/ManagedSvr2.log
;;
esac
;;
"env2")
ssh weblogic@hostname2 << EOF
case "$server" in
"ManagedSvr1")
tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr1/logs/ManagedSvr1.log
;;
"ManagedSvr2")
tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr2/logs/ManagedSvr2.log
;;
esac
;;
esac

最佳答案

您的 Here Docs 指定 EOF 来结束它们 ( << EOF ) 但您从来没有 EOF 来结束它们。请注意,EOF 并不表示文件结尾,它表示字符串“EOF”。 https://en.wikipedia.org/wiki/Here_document有例子。

我不确定您希望完成什么,但在我看来您需要指定要跟踪的文件。您是否希望将内 shell 传递到您正在连接的服务器上的远程 shell 中?它会简化您的代码,首先设置您的文件名和服务器名,然后 ssh 并执行命令。实际上,无论如何,我在您的内部 case 语句中看不到太多用途。您可以将主机名设置为一个变量,而不是将所有内容都包装在 'env' 的情况下。然后可以将“服务器名”插入到文件系统路径中。这样的事情似乎是一种简单的方法:

#!/bin/bash
case "$1" in
env1)
hostname="hostname1"
;;
env2)
hostname="hostname2"
;;
esac
echo ssh weblogic@$hostname tailf /app/Oracle/Middleware/domains/dq/servers/$servername/logs/$servername.log

似乎工作简单直接:

servername=ManagedSvr1 ./t.sh env1
ssh weblogic@hostname1 tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr1/logs/ManagedSvr1.log

取出“echo”实际执行ssh。

关于linux - shell 脚本中的嵌套 Case 语句 |获取语​​法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54218622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com