テキストファイルから読み取る値(文字列)をスクリプトに挿入します。
たとえば、次の代わりに:
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
して、スクリプトを少し安全にし、グローバルスコープを汚染しないようにするために使用できます。そのためcat global_variables.sh | sed -e 's/^/local /' > local_variables.sh
、aa関数内でdo を使用します. ./local_variables.sh
。関数でインポートするものはすべて、その関数でのみ使用可能になります。global_variables.sh
1行に1つの変数のみが含まれていると想定していることに注意してください。
テキストファイルのすべてのコンテンツを変数に保持することを考慮して、以下を使用できます。
#!/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
echo $name
ます。私はテストのためにそれを使用します。次に、$name
変数を使用して、スクリプト内の任意の場所でさらに処理できます。
$name
変数の値は、cat $file
コマンドを使用して割り当てられたファイルの文字列です。明確ではない、またはそれほど理解しにくいものは何ですか?
$file
あなただけロードするために、一度それを使用している場合、変数を$name
変数を、ちょうど使用cat /path/to/file
これを行う別の方法の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歳ですか?」という行が出力されます。
以下のようラドゥRădeanuがいる既に提案し、あなたが使用することができcat
avariableにファイルの内容を読み取るために、あなたのスクリプト内で-そのような場合には、あなたがその特定の変数にしたいだけの値で、一行だけを含むように各ファイルが必要です。上記の例では、名前(たとえば、と一つに入力ファイルを分割したいname.in
)と年齢との1(たとえば、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/
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 ${@}
KEY=VALUE
ですか、それともペアですか?解決策はまったく異なります(後者の場合、Takkatの答えが当てはまり、前のRaduの答えが当てはまります)