Вы не могли итерировать или хранить больше данных, чем длина вашего массива. В этом случае вы можете сделать так:
for (int i = 0; i <= name.length - 1; i++) {
// ....
}
Или это:
for (int i = 0; i < name.length; i++) {
// ...
}
На самом деле вам не нужны "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
Ваши Документы Здесь определяют 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.