初めて投稿します。よろしくお願いします。
RedHat7.0でShellScriptを作成しています。
初めて作るのでよくわかっていません。
下記スクリプトを実行すると、
./test.sh:aaa:command not found
とエラーになります。
原因がおわかりの方、アドバイスをいただけないでしょうか。
よろしくお願いいたします。

******test.shの内容*****************
#!/bin/bash

. /tmp/test.txt

para=$1
export para
echo $para
************************************

***test.txtの内容*******************
aaa
***********************************

********やりたい事*****************
変数paraにtest.txtに定義されている値を
代入して表示したい。
**********************************

権限はどちらのファイルも
chmod 777 test.sh
chmod 777 test.txt
に設定してあります。

回答よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> 変数paraにtest.txtに定義されている値を代入して表示したい。



こんな感じ。

read para < /tmp/test.txt


いろいろと勘違いをしているようなので、蛇足かもしれませんが幾つか。

> ./test.sh:aaa:command not found
> とエラーになります。

. は、それに続くファイルからコマンドを読み取って実行する特殊コマンド
だから、test.txt に書かれた aaa をコマンドとして実行しようとして、
「そんなコマンドはありまへん」と言ってるのですね。

> export para

para を環境変数として扱わないのであれば、不要です。

> 権限はどちらのファイルも
> chmod 777 test.sh
> chmod 777 test.txt

値を読み出すだけですから test.txt への実行権限付与は意味がありません。
また、. を本来の「コマンドを実行するため」に使っていたとしても、
実行権限はつける必要がありません。
    • good
    • 0
この回答へのお礼

a-kumaさん、回答ありがとうございます。
read para < /tmp/test.txt
で、出来ました!ありがとうございます。
何も訳が解らずにサンプルコードをそのまま書いていたんです・・。
a-kumaさんの補足、とてもわかりやすく、参考になりました。

他にもつまづいている箇所がありますので、
またあらためて質問させていただくと思いますが
その時はまた宜しくお願いいたします。

ありがとうございました。

お礼日時:2001/08/06 14:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qmakefileの文法で、$(TEST : .o = .lst )の意味は?

makefileの文法で、下記構文の意味を伺いたく質問させて頂きました。

$(RM) $(TEST:.o=.lst)

どうか宜しくお願い致します。

Aベストアンサー

>$(RM)

マクロRMに設定された内容に展開する。
例えば、

RM = /bin/rm

と定義されていた場合、

bin/rm

に置き換えられる。


>$(TEST:.o=.lst)

マクロTESTを展開する際に文字列.oを文字列.lstに置き換える。
例えば、マクロTESTが

TEST = test1.o test2.o

と定義されていた場合には、

test1.lst test2.lst

に置き換えられる。

Qソフトウェアテストに関して、stress test とload test の違いはどこにあるのでしょうか?

ソフトウェアテストに関して、stress test とload test の違いはどこにあるのでしょうか?
webで検索するとstress testは負荷をかけて応答性能などの劣化度合いを調べるもののようですが、load testも似たような意味合いではないかと思うのですが、違いがいまひとつわかりません。

Aベストアンサー

http://www.jstqb.jp/syllabus.html
ソフトウェアテスト標準用語集 日本語版Ver 1.1 (2006/12/22 )
作成:国際ソフトウェアテスト資格認定委員会 用語集作業班
編集者:Erik van Veenendaal(オランダ)
(翻訳:Japan Software Testing Qualifications Board 技術委員会)

上記の用語集によると、以下のような記述があります。

/* 引用はじまり。*/

ストレステスト(stress testing): 要件で定義した限界、または、それを超えた条件で、システムやコンポ-ネントを評価するテスト。

ロ-ドテスト(load testing): コンポ-ネントやシステムの動作を測定するテストの一種。負荷(例えば、並列実行ユ-ザ数やトランザクションの数)を増加させ、コンポ-ネントやシステムがどの程度の負荷に耐えられるか判定する。

/* 引用おわり。*/

これを元に、個人的には以下のように解釈しています。

ストレステスト→仕様で定められているMAXまたはMINでも正常に動作するのかどうかを確認する。もし、その値を越えた場合にエラーメッセージを出すなどのテストケースであれば、その表示や動作を確認できればOK。

ロードテスト→単にエラーメッセージの表示などを確認するだけでなく、様々な負荷をかけ、それでも正常に動作することを確認する。エージングなどの言葉が使われるのは、こちらの方ですね。

つまるところ、程度の度合いになってきますが、意味的には以下のような感じですね。

ストレステスト < ロードテスト

http://www.jstqb.jp/syllabus.html
ソフトウェアテスト標準用語集 日本語版Ver 1.1 (2006/12/22 )
作成:国際ソフトウェアテスト資格認定委員会 用語集作業班
編集者:Erik van Veenendaal(オランダ)
(翻訳:Japan Software Testing Qualifications Board 技術委員会)

上記の用語集によると、以下のような記述があります。

/* 引用はじまり。*/

ストレステスト(stress testing): 要件で定義した限界、または、それを超えた条件で、システムやコンポ-ネントを評価するテスト。

ロ-ドテスト(l...続きを読む

Qcat `find ./` > for_print.txt にファイル名を入れたい!

カレントディレクトリ以下のファイルを連結したいのですが、
cat `find ./` > for_print.txt
に「ファイル名」と、
あと、「区切り」がわかるように
********************************
を入れたいのですが、
どうしたら良いでしょうか?

Aベストアンサー

セパレータの形式にこだわらないのであれば、
more `find ./` > for_print.txt
とか、
tail +0 `find ./` > for_print.txt
とか。

QUNIXシェルプログラミング ${@+"$@"}

「入門UNIXシェルプログラミング」という書籍に以下のような記述がありました。
どうも矛盾しているようで、理解できないのですが、シェルに詳しい方、解説をお願いできないでしょうか。よろしくお願い致します。

以下の文章が、もし「"$@"は""に、"$*"はNULLに置き換わります。」なら理解できるんですが・・・
誤植では、ないですよね…?

(以下引用)--------------------------------------------------------
$*をダブルクウォートで囲むと、1つの文字列になります。$@をダブルクォートで囲むと、それぞれ別々の文字列であると解釈されます。
それならいつでも、「"$@"」を使えば混乱がなくていいじゃないか、と思われるかもしれません。
ところがこれにはこれで落とし穴はあるのです。
位置パラメタに何の値もセットされていない場合、つまり、渡すべきパラメタが何もない状態のときには、"$@"はヌルに、"$*"は""に置き換わります。
ヌルの場合はパラメタとして処理しませんが、""は「何もないパラメタがある」として処理します。どちらを選択しなければならないかは、状況によって判断しなくてはなりません。
一般的には、前節で説明した${variable+value}の形式を使うのが最適でしょう。
${@+"$@"}
こう書くことで、位置パラメタに何もセットされていない場合には何もしない、という条件を作れます。

「入門UNIXシェルプログラミング」という書籍に以下のような記述がありました。
どうも矛盾しているようで、理解できないのですが、シェルに詳しい方、解説をお願いできないでしょうか。よろしくお願い致します。

以下の文章が、もし「"$@"は""に、"$*"はNULLに置き換わります。」なら理解できるんですが・・・
誤植では、ないですよね…?

(以下引用)--------------------------------------------------------
$*をダブルクウォートで囲むと、1つの文字列になります。$@をダブルクォートで囲むと、それ...続きを読む

Aベストアンサー

この記述は、パラメータ無しの時の "$@" の展開が昔と今では違っていることを踏まえて無いので一部意味不明になってます。

例えば、引数が、a "b c" d という3つの文字列のとき、"$1" は a, "$2" は "b c", "$3" は d になります。
"$@" は、a "b c" d の3つの文字列になり、"$*" は、"a b c d" と1つの文字列になります。引用符で囲まず、単に $@ や $* と書くと、a b c d という4つの文字列になります。

で、引数の個数がゼロのとき、"$*" は "" (空文字列) という1つの文字列、つまり "$*" は引数の個数に関係なく常に1つの文字列になります。これに対して、"$@" は「空」つまりゼロ個の文字列に展開されます。

つまり、シェルスクリプトの引数をできるだけそのまま子供のコマンドに伝えるときには、"$@" を使えばいい訳です。これで、引数の個数がゼロ個であれ、たくさんであれ、引数が引用符で囲まれていても常に、親スクリプトの引数と同じ物、同じ個数が子コマンドに渡ります。

ところが、昔の/bin/shでは、引数がゼロ個の時の "$@" は空でなく "" という1つの空文字列に展開されるという仕様でした。このため、「できるだけそのまま子供のコマンドに伝える」という場合には、${@+"$@"} と書く必要がありました。現在のほとんどのshでは、"$@" でOKです。もしかすると古い仕様のままのshがあるかもしれませんが。

この記述は、パラメータ無しの時の "$@" の展開が昔と今では違っていることを踏まえて無いので一部意味不明になってます。

例えば、引数が、a "b c" d という3つの文字列のとき、"$1" は a, "$2" は "b c", "$3" は d になります。
"$@" は、a "b c" d の3つの文字列になり、"$*" は、"a b c d" と1つの文字列になります。引用符で囲まず、単に $@ や $* と書くと、a b c d という4つの文字列になります。

で、引数の個数がゼロのとき、"$*" は "" (空文字列) という1つの文字列、つまり "$*" は引数の個数...続きを読む

Qawkで複数ファイルをよんで$1$2と参照できるでしょうか?

awkで複数ファイルをよみこんでファイル1の$1ファイル2の$2と参照したりできないでしょうか?

Aベストアンサー

>この場合file1とfile2のデリミタを指定するには

デリミタが同じ","の場合
gawk -F, '{A=$1;getline < "file2";print A,$2}' file1

file1が","で、file2が" "の場合
gawk -F, '{A=$1;FS=" ";getline < "file2";print A,$2;FS=","}' file1
(行が読まれる時点でのFSの値で区切られます)


人気Q&Aランキング

おすすめ情報