bashで変数を含んだファイル読み込み

このQ&Aのポイント
  • bashで変数やコマンドを含んだファイルを読み込む方法を教えてください。
  • 外部読み込みファイルに含まれる変数やコマンドを利用することはできますか?
  • bashスクリプトで外部ファイルの内容を読み込み、変数やコマンドを使用したいです。方法を教えてください。
回答を見る
  • ベストアンサー

bashで変数を含んだファイル読み込み

お世話になります。 外部読み込みファイルの中に変数やコマンドをセットして利用したいのですが、それはできないのでしょうか? ----test.txt messages-${testdate} `hostname`.log -------------------------- ----test.sh testdate=`date +%Y%m%d` for line in `cat test.txt` do echo $line done -------------------------- ----出力 messages-${testdate} `hostname`.log -------------------------- ----望む出力結果 messages-20150521 servername.log -------------------------- 方法がございましたら、ご教授お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

echo $line を eval echo $line にすればいいです。 あと、 for line in `cat test.txt` とlineという変数名をお書きですが、これはtest.txtから行単位で読み込むわけでは無いことを認識されていますか?行単位じゃなくて、空白文字で区切られた語単位ですよ。 行単位にしたければ、 cat test.txt | while read line のようにします。

chane2004
質問者

お礼

お返事が遅れましたが、うまくいきました、ありがとうございました。 行単位にする方法もご教授頂きありがとうございます。 たまたま空白がないからうまくいっていたようで、勘違いのままにせずにすみました。 どうもありがとうございます。

関連するQ&A

  • bashで変数を可変させたい

    /homeの中にあるフォルダaaa、bbb、cccのサブフォルダの容量を取得し、結果をそれぞれ、 /root/batchの中にaaa、bbb、cccというファイル名で出力。 そのファイルをcatで出力し、結果をmbox_#(#は数字)という変数に保存するバッチを作成したいと四苦八苦しながら作業を行なっております。 バッチを実行しますと、以下のようなエラーが出力されます。 ./abcde.sh: line 16: mbox_1=62: command not found ./abcde.sh: line 16: mbox_2=1: command not found ./abcde.sh: line 16: mbox_3=1: command not found mbox_#の#を可変させたいのですが、何か良い記述方法はございますでしょうか? ==以下バッチ内容== #!/bin/sh Path1=/home Path2=/root/batch n=0 for box in aaa bbb ccc do n=$[$n+1] for var in `ls $Path1/$box` do du -sm $Path1/$box/$var >> $Path2/$box done 'mbox_'$n=`cat $Path2/$box` done お手数をおかけしますが、宜しくお願い致します。

  • 変数の扱いについて

    初めまして 仕事で簡単なシェルを作成していますが、ちょっと困っています。お分かりになる方がいらっしゃいましたら、お知恵をお貸しください。 外部ファイルとして変数を記述したファイルを作成しました。このファイルの内容を参照し、他で定義した変数を割り当てたいのですが、どうしても外部ファイルに記述した変数の文字を変数として認識してくれません。 書き方がおかしいのでしょうか? $ls MSG.sh MSG.txt ----- $cat MSG.txt Test $MSG1 ----- $cat MSG.sh #!/bin/sh MSG1=1 MSG=`cat MSG.txt` echo $MSG ----- $./MSG.sh $Test $MSG1 <--変数でなく文字として認識されてしまうう。 ---希望としてはこの様に表示して欲しい--- $Test 1 よろしくお願いします。

  • 標準出力と標準エラー出力を変数にセットしたいです。

    始めたばかりの初心者の為、変な質問でしたら申し訳ありません。 標準出力と標準出力を別々の変数にセットしたいのですが、そのやり方が分からず困っています。 やりたいことは、 コマンド(diffやcatなどの)実行結果の標準出力と標準エラー出力を それぞれ「任意の文字_受取パラメータの値」にセットすることをしたいです。 下記は、1回ファイルに出力して、それを読んで変数にセットするように記述したものです。 ※記述間違っていたらすみません。 ファイルに書かなくても、パイプやその他コマンドなどで出来る方法はないでしょうか? ex) test.sh 1.txt 2.txt TEST01 で実行 #!/bin/sh parm1 = $1 parm2 = $2 parm3 = $3 diff "${parm1}" "${parm2}" > test.log 2> err.log eval w_stdout_${parm3}=¥`cat test.log¥` eval w_stderr_${parm3}=¥`cat err.log¥` eval echo "stdout:¥"¥{w_stdout_${parm3}}¥"" eval echo "stderr:¥"¥{w_stderr_${parm3}}¥"" ※実行した結果 stdout:diff結果 stderr:空白 お手数ですが、何卒宜しくお願い致します。

  • シェルスクリプト 一つのふくすう変数から値を取る方

    いつもありがとうございます。 NICという変数にはネットワークアドレスが2つ入ってます。 NIC= 192.168.0.1 127.0.0.1 下記のスクリプトで上記2つのアドレスを取ろうと思ってます。 ==========test.sh================ while read LINE; do echo $LINE done < ${NIC} =============================== しかし下記のようなエラーになります。 変数の取り出し方が悪いのだと思います。 =============================== ./test.sh: 192.168.0.1 127.0.0.1: そのようなファイルやディレクトリはありません 恐れ入りますが正しいスクリプトをご教授くださいますようお願いします。

  • シェル ファイルの中身によって特定の処理

    シェルスクリプトに関する質問です。 少しシェルで言語風なものを作ってみようと思い、作成したのですが、上手くいかないので質問させて頂きました。内容は、特定の文字がファイルに記載されているか判定して、 特定の文字だったら処理をするというものです。 現在、このようなソースになっています↓ #!/bin/sh - #ファイルを設定(仮) file_name="dummy.sh" #行数を変数へ格納 line=$(wc -l ${file_name}) #行数をlog.txtへ書き込む echo ${line} > log.txt #行数以外にファイル名があるので削除 sed -i "s/$file_name//g" log.txt #行数を格納 Line=$(cat log.txt) i=0 #全ての行を変数へ格納 #ここが問題 配列に変数が使えない!? while [ $i = ${Line} ] do array[$i]=$(sed -n "${i}p" ${file_name}) expr `${i} + 1` done # 格納した変数をチェックして、 # 指定された文字(hello)が書かれていればhelloと表示させる b=0 while [ $b = ${main_file} ] do if [ array[$b] = "hello" ] then echo "hello" fi expr `$b + 1` done ここで、配列を利用し、変数への代入が出来ませんでした。 ただ、エラーは表示されません。。。 環境はUbuntu10.10です。 何もいじっていないので、たぶん大丈夫だと思うんですが・・・ 何か解決策はありませんか? また、コレよりいい方法などがあればぜひ教えてください。

  • 変数の引き継ぎ(bash)

    bashで開発をしているのですが、 メインの変数より子シェルの変数に引き継ぎをしたいのですが、 どうすればいいのでしょうか。 test.sh #!/bin/bash # 外部変数 sub_test() { echo $1 } # メイン sub_test # test.sh AAA シェルを実行すると、AAAという文字が出てきません。 宜しくお願いします。

  • 【シェルスクリプト】 ローカル変数、グローバル変数

    シェルスクリプトのローカル変数、グローバル変数の取り扱いで迷っています。 ---------------- #!/bin/bash count=0 cat file | while read i do count=`expre $count + 1 ` done echo $count ---------------- fileの中身をcatで流して、それを一行ずつ読み込みます。 そのつど、count の値を増やしていくようにしたいのですが、最後の出力値は0となります。 cat→whileで読み込ませて処理している間はローカル変数として扱われているのでしょうか。 またそうであるならば、シェルスクリプトでグローバル変数を明示的に宣言するにはどうのようにすればいいのでしょうか。

  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • シェル変数の有効範囲に関して質問させて下さい。

    シェル変数の有効範囲に関して質問させて下さい。 while文にて代入した変数を、その後も使用したいと考えております。 以下、試してみた内容です。 ---------------------- # cat /WORK/test_clice sda sda1 sda2 sda3 sda4 sda5 sda6 sda7 sda8 sdb # declare -a clice # declare -i count # cat /WORK/test_clice | while read LINE; do count=`expr $count + 1`; clice[${count}]=${LINE}; echo ${clice[${count}]} ; done sda sda1 sda2 sda3 sda4 sda5 sda6 sda7 sda8 sdb # echo ${clice[1]} # ---------------------- 有効範囲の為、引き継がれていないのかな?と考えております。 試しに、「set」や「export」を使用してみたのですが、旨く行きませんでした。 ※使い方が悪い? 基本的な内容となり恐縮ではございますが、知恵をお借りできませんでしょうか。 よろしくお願い致します。

  • (UNIX)後ろのスペース出力について

    UNIXのコマンドで、catで読み込んだ行をwhile文でファイルに出力しているのですが、その際に後ろのスペースを消さずに出力するにはどうすれば良いのでしょうか? 以下のような処理を行っています。 cat $infile | read LINE do echo "$LINE" >> $outfile done <$infileの内容> 1 10 100□□□□□□ 2 20 200□□□□□□ ・・・ 以上となります。よろしくお願いします。