텍스트 파일에서 읽을 값 (문자열)을 스크립트에 삽입하고 싶습니다.
예를 들어,
echo "Enter your name"
read name
다른 텍스트 파일에서 문자열을 읽으려면 인터프리터가 사용자 입력이 아닌 파일에서 문자열을 읽어야합니다.
텍스트 파일에서 읽을 값 (문자열)을 스크립트에 삽입하고 싶습니다.
예를 들어,
echo "Enter your name"
read name
다른 텍스트 파일에서 문자열을 읽으려면 인터프리터가 사용자 입력이 아닌 파일에서 문자열을 읽어야합니다.
답변:
파일에서 변수를 읽으려면 source
or .
명령을 사용할 수 있습니다 .
파일이 다음 줄을 포함한다고 가정하자
MYVARIABLE="Any string"
다음을 사용하여이 변수를 가져올 수 있습니다
#!/bin/bash
source <filename>
echo $MYVARIABLE
<filename>
쉘에서 실행될 것 rm -rf /
입니다.
sed
추가 local
키워드를하고 스크립트가 조금 더 안전하고 글로벌 범위를 polute 없습니다. 따라서 함수 내부에서 수행 cat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
한 다음을 사용하십시오 . ./local_variables.sh
. 함수에서 가져 오는 것은 무엇이든 해당 함수에서만 사용할 수 있습니다. global_variables.sh
행당 하나의 변수 만 포함 한다고 가정 합니다.
텍스트 파일의 모든 내용을 변수에 유지하려는 경우 다음을 사용할 수 있습니다.
#!/bin/bash
file="/path/to/filename" #the file where you keep your string name
name=$(cat "$file") #the output of 'cat $file' is assigned to the $name variable
echo $name #test
또는 순수한 배쉬에서 :
#!/bin/bash
file="/path/to/filename" #the file where you keep your string name
read -d $'\x04' name < "$file" #the content of $file is redirected to stdin from where it is read out into the $name variable
echo $name #test
echo $name
. 테스트 용으로 만 사용합니다. 다음으로 $name
스크립트에서 원하는 곳 어디에서나 추가 처리를 위해 변수를 사용할 수 있습니다 .
$name
사용하여 지정된 파일의 문자열입니다 cat $file
. 명확하지 않거나 이해하기 어려운 것은 무엇입니까?
$file
경우에만로드 한 번 사용하는 경우 변수를 $name
변수를 바로 사용cat /path/to/file
이를 수행하는 한 가지 방법은 표준 입력을 파일로 리디렉션하는 것입니다. 여기서 모든 사용자 입력은 프로그램에서 예상 한 순서대로 수행됩니다. 예를 들어, 프로그램 (라고 script.sh
)
#!/bin/bash
echo "Enter your name:"
read name
echo "...and now your age:"
read age
# example of how to use the values now stored in variables $name and $age
echo "Hello $name. You're $age years old, right?"
입력 파일 ( input.in
)
Tomas
26
다음 두 가지 방법 중 하나로 터미널에서이를 실행할 수 있습니다.
$ cat input.in | ./script.sh
$ ./script.sh < input.in
스크립트를 실행하고 수동으로 데이터를 입력하는 것과 같습니다. "Hello Tomas. 26 세입니다. 맞습니까?"
으로 라두 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)
. 그런 다음 문자열을 variable에 저장하면 다음 $vh
과 같이 사용할 수 있습니다 mkdir "/var/www/$vh"
.-/ var / www 안에 지정된 이름의 폴더가 만들어집니다.
https://af-design.com/2009/07/07/loading-data-into-bash-variables/ 에서 작업 솔루션을 찾았습니다.
if [ -f $SETTINGS_FILE ];then
. $SETTINGS_FILE
fi
#! /bin/bash
# (GPL3+) Alberto Salvia Novella (es20490446e)
variableInFile () {
variable=${1}
file=${2}
source ${file}
eval value=\$\{${variable}\}
echo ${value}
}
variableInFile ${@}
이것을 사용하여 파일에서 단일 변수를 얻습니다.
GET_VAR=$(grep --color=never -Po "^${GET_VAR}=\K.*" "${FILE}" || true)
경우 GET_VAR
에없는 ${FILE}
것이 오히려에 오류 감사를 일으키는 것보다 비어 있습니다 || true
.
그것은 사용하는 grep -P
GNU의 그렙에 있지만이 글을 쓰는 시점에서 모든 그렙의 기본은없는.
KEY=VALUE
쌍입니까? 해결책은 상당히 다릅니다 (후자 인 경우 Takkat의 답변이 적용됩니다, 이전 Radu의 경우)