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

Ниже приведены результаты, когда пользователь успешно добавлен.

0,22529,User added.

Если пользователь не добавлен, то я получаю эту ошибку

1,23996,CLI failed to connect to database.

ИЛИ ЖЕ

1,22560,The current state of the server does not allow this action.

script Begin

read user
echo -e '\E[32;40m'"\033[1mPlease wait .... adding id on all server\033[0m"
PORT=777
USER=User
PASSWORD=****
for server in server1.abc.com server2.abc.com 
do
command // to add user 
done

Script end

Я хочу, чтобы эхо и пользователя добавлялось, и пользователя не добавлялось на основе списка серверов, переданного для цикла.

Например.

User added in server1.abc.com
user failed to add in server2.abc.com

Любая помощь по этому вопросу будет принята с благодарностью.

2 ответа2

1

Если вы хотите использовать стандартный вывод определенной команды, вы можете использовать подстановку команд и заключить ее в $(…) .

Мы можем проверить, соответствует ли вывод определенному регулярному выражению с помощью оператора =~ введенного в Bash 3 и выше. Если регулярное выражение совпадает, тест вернет true, поэтому мы можем выполнить другую команду после && . Если он не совпадает, тест вернет false, а команды после || выполнены.

Поскольку мы хотим проверить, содержит ли вывод added слово, достаточно следующего:

for server in server1.abc.com server2.abc.com 
do
  [[ "$(command)" =~ added ]] \
    && echo "User ${user} added in ${server}" \
    || echo "User ${user} failed to add in ${server}"
done

В вашем сценарии вы должны изменить USER на user , поскольку $USER - это глобальная переменная среды, в которой указано ваше имя пользователя. Попробуйте запустить echo $USER из командной строки, чтобы понять, что я имею в виду.

1
for server in ...; do
    command | while IFS=, read exitstatus id message; do
        if [[ $exitstatus == "0" ]]; then
            echo "User added on $server"
        else
            echo "Failed to add user on $server: $message"
        fi
    done
done

Тем не менее, проверьте фактическое состояние выхода command - возвращает ли ненулевое состояние выхода для сбоя?

for server in ...; do
    if output=$(command); then
        echo "User added on $server"
    else
        echo "Failed to add user on $server: $output"
    fi
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .