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

标签 linux bash shell scripting

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

相关文章:

php - 设置 Apache 虚拟主机 (CentOs)

linux - 应用 CPU Hogs 时的 Docker 和 CPU 优先级

linux - 对命令 'find' 找到的文件进行排序

php - 从哪里开始使用 CPanel 托管在 PHP 中运行命令行

bash - 在 shell 脚本之间共享变量

linux - 查找字符串并添加字符串

android i/o 事件

mysql - 用于运行 MySQL 查询的 Bash 脚本

linux - 使用 sed 在 bash 中将文本添加到行尾

java - 从shell脚本运行java文件