Вложенный оператор Case в сценарии оболочки | Получение синтаксической ошибки

Вы не могли итерировать или хранить больше данных, чем длина вашего массива. В этом случае вы можете сделать так:

for (int i = 0; i <= name.length - 1; i++) {
    // ....
}

Или это:

for (int i = 0; i < name.length; i++) {
    // ...
}
0
задан Jitendra Banshpal 16 January 2019 в 15:26
поделиться

2 ответа

На самом деле вам не нужны "HERE" документы, например, вы используете один оператор case, который принимает стандартный ввод для вашей команды SSH. принимать одинарные кавычки в качестве входных данных для ssh Это позволяет вам делать многострочный ввод в спокойной обстановке. Цитирование вашего "EOF" и завершение его также допустимо.

#!/bin/bash

case "$1" in

"env1")

        ssh -tt weblogic@hostname1 <<< '
        case "$server" in
        "ManagedSvr1")
                cat /var/log/syslog
        ;;
        "ManagedSvr2")
                tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr2/logs/ManagedSvr2.log
        ;;
        esac '
        ;;
"env2")
        ssh -tt weblogic@hostname2 <<< '
        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

Это был бы более простой способ управления сценарием. Тем более, что вы не используете удаленное изменение пользователя: позволяет установить все переменные локально, а затем просто подключиться и выполнить одну команду.

#!/bin/bash

server="$2"
case "$1" in

"env1")
        hostname="hostname1"
        case "$server" in
        "ManagedSvr1")
                remote_command=$(tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr2/logs/ManagedSvr1.log)
        ;;
        "ManagedSvr2")
                remote_command=$(tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr2/logs/ManagedSvr2.log)
        ;;
        esac
        ;;
"env2")
        hostname="hostname2"
        case "$server" in
        "ManagedSvr1")
                remote_command=$(tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr1/logs/ManagedSvr1.log)
        ;;
        "ManagedSvr2")
                remote_command=$(tailf /app/Oracle/Middleware/domains/dq/servers/ManagedSvr2/logs/ManagedSvr2.log)
        ;;
        esac
        ;;
*)
        exit 1
        ;;
esac

if [[ $? == 0 ]]
then ssh weblogic@$hostname $remote_command
fi
0
ответ дан itChi 16 January 2019 в 15:26
поделиться

Ваши Документы Здесь определяют EOF, чтобы завершить их (<< EOF), но у вас никогда не будет EOF, чтобы завершить их. Обратите внимание, что EOF не означает конец файла, это означает строку «EOF». https://en.wikipedia.org/wiki/Here_document содержит примеры.

Я не уверен, что вы надеетесь достичь, но мне кажется, что вам нужно указать, какой файл следует оставить. Вы надеетесь передать внутренний кейс в удаленную оболочку на сервере, на котором вы работаете? Это упростит ваш код, чтобы сначала установить имя файла и имя сервера, а затем выполнить команду ssh. На самом деле, я не вижу особой цели в ваших внутренних заявлениях в любом случае. Вместо того, чтобы переносить все в '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.

0
ответ дан Daniel Farrell 16 January 2019 в 15:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: