Как создать цикл for с двумя списками файлов - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать цикл for с двумя файлами списков, который в основном будет повторять скрипт для изменения владельца базы данных из нескольких баз данных.Файлы списка содержат несколько серверов, а список имен для входа содержит несколько имен для входа.Но они разделены строкой, чтобы сопоставить каждую базу данных с именем для входа.

Это то, что я имею до сих пор, но оно, очевидно, берет первое имя сервера и перебирает его по каждому имени входа, а затем переходит наимя следующего сервера.

for servername in $(cat servername.list); do
   for loginname in $(cat loginname.list); do
    echo "USE $servername"
    echo "go"
    echo "EXEC sp_changedbowner '$loginname'"
    echo "go"
    echo "USE master"
    echo "go"
    echo ""
   done
done

Я хочу, чтобы вывод был таким:

    USE server1
    go
    EXEC sp_changedbowner 'login1'
    go
    USE master
    go

    USE server2
    go
    EXEC sp_changedbowner 'login2'
    go
    USE master
    go

1 Ответ

1 голос
/ 20 июня 2019

Вы можете сделать это следующим образом:

while read -r; do
    server="$REPLY"
    read -r <&3 || break
    login="$REPLY"
    echo \
"USE $server
go
EXEC sp_changedbowner '$login'
go
USE master
go
"
done <servername.list 3<loginname.list

[ Live демо ]

Используя перенаправление ввода, вы можете одновременно открыть оба файла для while петля.Файловый дескриптор 0 (стандартный ввод) доступен, но приняты 1 и 2 (стандартный вывод / стандартная ошибка соответственно).Следующий свободный файловый дескриптор - 3.

Затем цикл сначала читает строку из 0 (стандартный ввод, теперь подключенный к servername.list), затем строку из 3 (теперь подключенную к loginname.list).read помещает ввод в переменную с именем REPLY, которую мы копируем в server и login соответственно.Эти переменные используются в строке echo для получения желаемого результата.

Это повторяется до тех пор, пока в одном из файлов не закончатся строки.


Кстати, вы не должен пытаться читать строки с for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...