RedHatのShellScriptで発生するエラーの原因と解決方法

このQ&Aのポイント
  • 初めて投稿します。よろしくお願いします。RedHat7.0でShellScriptを作成しています。
  • 下記スクリプトを実行すると、./test.sh:aaa:command not foundとエラーになります。原因がおわかりの方、アドバイスをいただけないでしょうか。
  • やりたいことは、変数paraにtest.txtに定義された値を代入して表示することですが、うまくいかない状況です。権限はchmod 777 test.shとchmod 777 test.txtに設定してあります。
回答を見る
  • ベストアンサー

RedHatのShellScriptについて

初めて投稿します。よろしくお願いします。 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 に設定してあります。 回答よろしくお願いいたします。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.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 への実行権限付与は意味がありません。 また、. を本来の「コマンドを実行するため」に使っていたとしても、 実行権限はつける必要がありません。

bunnyLove
質問者

お礼

a-kumaさん、回答ありがとうございます。 read para < /tmp/test.txt で、出来ました!ありがとうございます。 何も訳が解らずにサンプルコードをそのまま書いていたんです・・。 a-kumaさんの補足、とてもわかりやすく、参考になりました。 他にもつまづいている箇所がありますので、 またあらためて質問させていただくと思いますが その時はまた宜しくお願いいたします。 ありがとうございました。

関連するQ&A

  • RedHatでのシェルスクリプトについて

    こんにちは。また質問させて下さい。 redhat7.0のシェルスクリプトで、 サンプルコード片手に以下のコードを記述しました。 やりたい事は、もしaaa.txtというファイルが存在したら その内容を表示させ、存在しなければその旨のメッセージを 表示させる、という単純なものです。 この時、ファイルが存在しない時に ./test.sh: /tmp/aaa.txt: No such file or directry というエラーになってしまいます。 エラーを抜けてメッセージを表示させるには どうしたらいいでしょうか。 アドバイスよろしくお願いいたします。 *********記述したコードです。************* #!/bin/bash fileName=/tmp/aaa.txt read varStr1 varStr2 <fileName if [ -a fileName ]; then echo {$varStr1} else echo{$fileName}{$varStr2} fi

  • 変数$importfileに第1引数($1)のファイルPATHを表示したい

    下記のスクリプトを書きましたが ./aa.sh: line 6: =/tmp: command not found と言われるのはなぜですか? 変数$importfileに第1引数($1)のファイルPATHを表示したいです。 1 #/bin/bash 2 3 echo $# 4 if [ $# -eq 1 ] 5 then 6 $importfile=$1 7 echo "$importfile" 8 else 9 echo "argv file notfound" 10 exit; 11 fi 12 実行結果 ./aa.sh /tmp 1 ./aa.sh: line 6: =/tmp: command not found

  • bashの関数の引数にスペースが入るとズレる件

    bashの関数の引数にスペースが入るとズレる件 bashの関数の引数にスペースが入ると、引数が分離して、位置がズレてしまいます。 これを回避する方法はありませんか? ■aaa.sh-Top #!/bin/bash declare FuncPara1 declare FuncPara2 function f_echo() { echo 'uf_echo1='$1 echo 'uf_echo2='$2 echo 'uf_echo3='$3 } echo '---test1---' FuncPara1='aaabbb' FuncPara2='ccc' f_echo ${FuncPara1} ${FuncPara2} echo '---test2---' FuncPara1='aaa bbb' FuncPara2='ccc' f_echo ${FuncPara1} ${FuncPara2} ■aaa.sh-Bottom ■aaa.shの実行 # ./aaa.sh ---test1--- uf_echo1=aaabbb uf_echo2=ccc uf_echo3= ---test2--- uf_echo1=aaa uf_echo2=bbb uf_echo3=ccc このtest2の時に、 ---test2--- uf_echo1=aaa bbb uf_echo2=ccc uf_echo3= となって欲しい。 もしくは、何かしら「なったテイ」で、 引数1の値は「aaa bbb」 引数2の値は「ccc」 と関数側で判断できる方法はありませんか?

  • 内容によって2つのファイルに分ける(shellscript)

    仕事で、ファイルの内容をチェックして別々のファイルに仕分けることが必要になりました。どのようにshellscriptを組めばよいでしょうか? fileの内容 (注:\tはタブを示す) aaa1 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa2 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa3 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa4 \t bbbb \t 15 \t cccc \t 15 \t sssss aaa5 \t bbbb \t 60 \t cccc \t 60 \t sssss aaa6 \t bbbb \t 15 \t cccc \t 15 \t sssss 60 \t .* \t 60を含むものは test_60.txtに集め 15 \t .* \t 15を含むものは test_15.txtに集めたいのです。 sed と 正規表現を使ってうまくいくのかと考えていますが、 前に進めません。 宜しくサジェスチョンをお願い致します。

  • シェルスクリプトの1行目に#!を書いてもダメなのはなぜ?

    test.shというシェルスクリプトを #!/bin/bash echo "bash test" のように書き、chmod +x test.shを実行し、 test.shと入力すると、bash testが表示されるはずですが、 エラーbash: test.sh :command not found が出ます。which bashでパスを見ると /bin/bashなので、問題ないはずなんですが。 ちなみに、bash test.shと入力すると、正常に実行されます。 同様のことがperlスクリプト #!/usr/bin/perl print "perl test\n"; についても起こります。 何か設定がまずいのでしょうか? RedHatLinux7.2を使用しています。

  • 変数の引き継ぎ(bash)

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

  • bashで、gotoのようなラベルによるジャンプ構文をしたいのですが、方法をご教授ください。

    bashで、gotoのようなラベルによるジャンプ構文をしたいのですが、方法をご教授ください。 今はif分毎で、エラー時にメール配信処理してますが、全て同じあて先配信なので、 簡潔に処理内容をまとめたいです。 echo "aaa" if [ $? -ne 0 ] then echo "error desu" > honbun.txt mailx -s "error" aaa@aaa.c.jp < honbun.txt exit 1 else echo "ok" fi echo "bbb" if [ $? -ne 0 ] then echo "error desu" > honbun.txt mailx -s "error" aaa@aaa.c.jp < honbun.txt exit 1 else echo "ok" exit 0

  • bashシェルでのmysqlCSVファイルについて

    bashシェルでのmysqlCSVファイルについて教えて下さい。 下記のスクリプト実行するとroot権限者で実施すればうまく動作するのですが、 xxxxユーザで実施した場合は、/tmp/mysql_export_linkdata.csvのファイル所有者がxxxxではなく、mysqlになってしまい ファイル削除(rm)ができません。 何が悪くてどう直せばよいですか? chownで変更したり、chmod 777にしたりやってみたのですが 駄目でした。 #/bin/bash if [ -f /tmp/mysql_export_linkdata.csv ] then rm /tmp/mysql_export_linkdata.csv echo rm /tmp/mysql_export_linkdata.csv fi mysql --user=xxxx --password=xxxx dburl <<eof select * from linkdata into outfile "/tmp/mysql_export_linkdata.csv" fields terminated by ','; eof chown xxxx.xxxx /tmp/mysql_export_linkdata.csv chmod 777 /tmp/mysql_export_linkdata.csv ls -lrt /tmp/mysql_export_linkdata.csv echo ls -lrt /tmp/mysql_export_linkdata.csv

  • 複数bashスクリプトの定数?の共通化

    たとえば以下のように A.bash、B.bash、C.bash の3つのbashスクリプトがあるときに それぞれの先頭で export OutFile=/aaa/bbb/ccc.txt と設定していたとします このとき、 何らかの事情で以下のよう export OutFile=/aaa/ggg/ccc.txt 変えなければならなくなった時に、 じか書きしている場合3ファイルとも 編集しなくてはいけません そうではなくて A.bash、B.bash、C.bashの3スクリプトの先頭で 設定ファイルを読み込んで export OutFile=/aaa/bbb/ccc.txt を取得するようにし、以下のように変更が発生した 場合も、 export OutFile=/aaa/ggg/ccc.txt 設定ファイルひとつだけ編集すればいいように したいのですが、そのようなことはできるのでしょうか? 説明べたでわかりにくいかも知れませんがお願いします。

  • RedHatのシェルスクリプトで・・・・

    こんにちは。何度もすみません。また質問させて下さい。 RedHat7.0でシェルスクリプトを作成しているのですが、 初心者の為(Linux自体よくわかってません)悪戦苦闘中です。 今回つまづいたのは、 #!/bin/bash FName=/home/my/aaa.txt read str1 str2 str3 <$FName とした時、まず、実行している場所が /tmp な為、FNameに/home/myとやるとファイルがありません、 と言われてしまいます。 ../home/myでもだめなんですね~・・・どうしてでしょう・・・。 もうひとつ、 aaa.txtの中身に記述されているデータが、空白区切りの時は うまくstr1 str2 str3に値が入ってくれるのですが、 カンマ区切りデータが入っていると値が入ってくれません。 自分なりに調べて-dを使うと出来るっぽい所までは わかったのですが、具体的な使い方がいまいちわからないのです。 read str1 str2 str3 <$FName -d, なんて書いてみたのですが・・・全然だめのようです。 なかなか良いサンプルコードが見つからなくて・・・。 すみませんが、アドバイスいただけたら、と思います。 宜しくお願いいたします。

専門家に質問してみよう