Я хочу вставить в мой скрипт значение (строку), которое я бы прочитал из текстового файла.
Например, вместо:
echo "Enter your name"
read name
Я хочу прочитать строку из другого текстового файла, поэтому интерпретатор должен читать строку из файла, а не пользовательский ввод.
KEY=VALUE
пары? Решения совершенно разные (если это последнее, то ответ Такката применим, а ответ прежнего Раду)Ответы:
Для чтения переменных из файла мы можем использовать команду
source
or.
.Предположим, что файл содержит следующую строку
затем мы можем импортировать эту переменную, используя
источник
<filename>
будет запущено в вашей оболочке, напримерrm -rf /
, что может быть очень опасным.sed
чтобы добавитьlocal
ключевое слово и сделать сценарий немного более безопасным и не разрушить вашу глобальную область. Так что внутри функции,cat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
а затем использовать. ./local_variables.sh
. Все, что вы импортируете в функцию, будет доступно только в этой функции. Обратите внимание, что предполагается, чтоglobal_variables.sh
содержит только одну переменную на строку.Учитывая, что вы хотите, чтобы все содержимое вашего текстового файла было сохранено в вашей переменной, вы можете использовать:
Или в чистом виде:
источник
echo $name
. Я использую это только для теста. Далее вы можете использовать$name
переменную для дальнейшей обработки в любом месте вашего скрипта.$name
переменной является строка из вашего файла, назначенная с помощьюcat $file
команды. Что не понятно или так сложно понять?$file
переменную, если вы используете ее только один раз для загрузки$name
переменной, просто используйтеcat /path/to/file
Из вашего скрипта вы можете сделать это:
Вы даже можете сделать это несколько раз, например, в цикле
источник
Один из альтернативных способов сделать это - просто перенаправить стандартный ввод в ваш файл, где у вас есть весь пользовательский ввод в порядке, ожидаемом программой. Например, с помощью программы (называется
script.sh
)и входной файл (называется
input.in
)Вы можете запустить это из терминала одним из следующих двух способов:
и это было бы равносильно простому запуску сценария и вводу данных вручную - это вывело бы строку «Здравствуйте, Томас. Вам 26 лет, верно?».
Как Radu Rădeanu имеет уже предложил , вы можете использовать
cat
внутри сценария , чтобы прочитать содержимое файла в avariable - в этом случае, вам нужно каждый файл содержит только одну строку, только значение , которое требуется для этой конкретной переменной. В приведенном выше примере, вы бы разделить входной файл на один с именем (скажем,name.in
) и один с возрастом (скажем,age.in
), а также изменитьread name
иread age
строкуname=$(cat name.in)
иage=$(cat age.in)
соответственно.источник
vh=$(awk "NR==3 {print;exit}" /var/www/test.txt)
. Затем строка будет сохранена в переменной$vh
, поэтому вы можете использовать ее следующим образом:mkdir "/var/www/$vh"
- это создаст папку с указанным именем внутри / var / www.Я нашел рабочее решение здесь: https://af-design.com/2009/07/07/loading-data-into-bash-variables/
источник
От
man bash:1785
, эта подстановка команд эквивалентна,name=$(cat "$file")
но быстрее.источник
Краткий ответ:
источник
Если вы хотите использовать несколько строк, вы можете использовать:
ИЛИ ЖЕ
Если вы хотите, чтобы пользователь указал файл
источник
источник
Я использую это, чтобы получить одну переменную из файла
Когда
GET_VAR
он не найден,${FILE}
он будет пустым, а не вызовет ошибку благодаря|| true
.Он использует
grep -P
GNU grep, но не используется по умолчанию во всех grep на момент написания этого.источник