Установите имя пользователя и пароль из TXT-файла, используя bash - PullRequest
0 голосов
/ 10 мая 2018

У меня есть файл env.txt в следующем формате:

lDRIVER={ODBC Driver 13 for SQL Server};
PORT=1433;
SERVER=serveename;
DATABASE=db;
UID=username;
PWD=password!

У меня есть скрипт git bash (.sh), который требует UID и PWD из этого файла. Я думал о получении его по последней / второй последней строчке номера. Как мне это сделать / есть ли лучший способ (скажем, поиск UID и PWD и назначение переменной git bash таким образом)

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Сначала переименуйте PWD во что-то вроде PASSWORD.PWD - это специальная переменная, используемая оболочкой.Еще лучше использовать имена переменных в нижнем регистре для всех ваших собственных переменных.

Если пароль не содержит специальных символов (пробелы, $,), вы можете

source env.txt

Если в пароле есть что-то особенное, рассмотрите возможность редактирования env.txt:

lDRIVER="{ODBC Driver 13 for SQL Server}"
PORT="1433"
SERVER="serveename"
DATABASE="db"
UID="username"
PASSWORD="password!"

Если вас интересуют только строчные uid и passwd, рассмотрите возможность выбора только интересных полей и измените ключевые слова на строчные

source <(sed -rn '/^(UID|PWD)=/ s/([^=]*)/\L\1/p' env.txt)
0 голосов
/ 10 мая 2018

Есть много способов сделать это. Вы можете использовать awk, который я лично использовал бы, так как он похож на нож x-acto для такого типа вещей:

uid=$(awk -F"[=;]" '/UID/{print $2}' env.txt)
pwd=$(awk -F"[=;]" '/PWD/{print $2}' env.txt)

или grep и sed. sed приятно, потому что позволяет вам получить очень конкретную информацию, которую вы хотите вырезать из строки, но это регулярное выражение, которое имеет свою кривую обучения:

uid=$(grep "UID" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )
pwd=$(grep "PWD" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )

Как отметил @JamesK в комментариях, вы можете использовать sed, и он будет выполнять поиск вместо grep. Это супер приятно, и я бы определенно выбрал это вместо grep | sed.

uid=$(sed -nr '/UID/s/^.*=(.*)(;|$)/\1/gp' )
pwd=$(sed -nr '/PWD/s/^.*=(.*)(;|$)/\1/gp' )

или grep и cut. Блеф ... мы все можем сделать лучше, но иногда мы просто хотим grep и cut и не должны думать об этом:

uid=$(grep "UID" env.txt | cut -d"=" -f2 | cut -d";" -f1)
pwd=$(grep "PWD" env.txt | cut -d"=" -f2 | cut -d";" -f1)

Я бы точно не пошел по номеру строки. Это похоже на файл odbc.ini и порядок, в котором параметры перечислены в каждой записи odbc, не имеет значения.

...