テキストファイルから読み取る値(文字列)をスクリプトに挿入します。
たとえば、次の代わりに:
echo "Enter your name"
read name
インタプリタがユーザー入力ではなくファイルから文字列を読み取るように、別のテキストファイルから文字列を読み取りたいです。
ファイルから変数を読み取るには、source
または.
コマンドを使用できます。
ファイルに次の行が含まれていると仮定しましょう
MYVARIABLE="Any string"
次に、この変数をインポートできます
#!/bin/bash
source <filename>
echo $MYVARIABLE
テキストファイルのすべてのコンテンツを変数に保持することを考慮して、以下を使用できます。
#!/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
または、純粋なbashで:
#!/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
スクリプト内からこれを行うことができます。
read name < file_containing _the_answer
これを複数回行うこともできます。ループで
while read LINE; do echo "$LINE"; done < file_containing_multiple_lines
これを行う1つの代替方法は、標準入力をファイルにリダイレクトすることです。この場合、すべてのユーザー入力がプログラムで期待される順序になります。たとえば、プログラムで(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
次の2つの方法のいずれかでターミナルからこれを実行できます。
$ cat input.in | ./script.sh
$ ./script.sh < input.in
また、スクリプトを実行してデータを手動で入力するのと同じです。「Hello Tomas。あなたは26歳ですか?」という行が出力されます。
RaduRădean には 既に提案されている があるため、スクリプト内でcat
を使用してファイルの内容を変数に読み込むことができます。その場合、それぞれが必要ですその特定の変数に必要な値のみを含む1行のみを含むファイル。上記の例では、入力ファイルを名前のあるファイル(たとえば、name.in
)と年齢のファイル(たとえば、age.in
)に分割し、read name
とread age
行をそれぞれname=$(cat name.in)
およびage=$(cat age.in)
に追加します。
私はここで実用的なソリューションを見つけました: https://af-design.com/2009/07/07/loading-data-into-bash-variables/
if [ -f $SETTINGS_FILE ];then
. $SETTINGS_FILE
fi
name=$(<"$file")
man bash:1785
から、このコマンド置換はname=$(cat "$file")
と同等ですが、より高速です。
簡潔な答え:
name=`cat "$file"`
#! /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
のおかげでエラーが発生するのではなく、空白になります。
GNU grepにあるgrep -P
を使用しますが、これを書いている時点ではすべてのgrepでデフォルトではありません。
複数の文字列を使用する場合は、次の方法を使用できます。
path="/foo/bar";
for p in `cat "$path"`;
do echo "$p" ....... (here you would pipe it where you need it)
OR
ユーザーにファイルを指定してほしい場合
read -e "Specify path to variable(s): " path;
for p in 'cat "$path"';
do echo "$p" ............................