我试图在 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/