• ベストアンサー

シェルスクリプト 引数の引渡しについて

こんにちは。現在シェルスクリプトを勉強中なのですがどうしてもわからないことがあり投稿させていただきました。 シェルスクリプトにて作成した引数(引数にスペースがある場合)を別のシェルスクリプトへ渡そうとしたときにうまく引き渡せなくて困っています。 詳しくは以下のスクリプト参照願います。 (1)引数作成のスクリプト _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh a="HELLO" b="\"WOW WOW\"" test.sh $a $b _/_/_/_/_/_/_/_/_/_/_/_/ (2)test.sh _/_/_/_/_/_/_/_/_/_/_/_/ #!/bin/sh echo $1 echo $2 echo $3 _/_/_/_/_/_/_/_/_/_/_/_/ これを実行すると $1=HELLO $2="WOW $3=WOW" となってしまいます。 これを $1=HELLO $2=WOW WOW $3=NULL(空欄) となるようにシェルスクリプトで作成することはできないのでしょうか? ご教授よろしくお願いします。 よろしくお願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

sh ./test.sh HELLO wow "WOW WOW" bau と入力すれば目的の動作を果たします. ということで, b="wow \"WOW WOW\" bau" からどのように上のコマンドを作るかという勝負になって結論: eval "sh ./test.sh HELLO $b" "sh~" で上のコマンドを「文字列として」作り, それを eval で実行します.

tea_oolong
質問者

お礼

Tacosanさん 返信ありがとうございます! 目的の動作を確認できました! ありがとうございました。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

a="HELLO" b="\"WOW WOW\"" こっちでクォートするんじゃなくて、 test.sh $a $b を test.sh "$a" "$b" にすればOK。

tea_oolong
質問者

補足

sakusaker7さん さっそく返答ありがとうございます。 期待通りの結果が出力されました。 シェルを呼び出すときにダブルクォーテーションつけるんですね^^ ついでに質問なのですが、 b="wow \"WOW WOW\" bau" としたときに $1=HELLO $2=wow $3=WOW WOW $4=bau という結果を得たいのですが、この場合はどのようにすればよいかおわかりになりますでしょうか? お分かりになればおしえていただけたらありがたいです。 よろしくお願いします。

関連するQ&A

  • 簡単なシェルスクリプトを見てください。

    次のようなシェルスクリプトを作成しました。 #!/bin/sh echo [$1] awk '/"0312345678"/ {print}' /test > /test1 awk '/$1/ {print}' /test > /test2 のように簡単なスクリプトです。 $ sample \"0312345678\" で実行させたら、echo では"0312345678"に出力されます。 しかし、test1にはちゃんと結果が入っていますが、test2は空のファイルです。 なぜ、結果が違うのですか? 実行時、引数を渡す方法で、test1と同じ結果を得たければ、どうすればいいのですか?

  • telnet 110 のシェルスクリプトについて

    linux初心者です。 telnet localhost 110 の確認スクリプトを作成したいのですが、調べた結果以下のスクリプトを作成しましたがうまく動作してくれません。 お分かりになる方ご教授ください。 test.sh #!/bin/bash sleep 1; echo user $1 sleep 1; echo pass $2 sleep 1; echo stat sleep 1; echo quit test1.sh #!/bin/bash sh ./test.sh | telnet localhost 110 ./test1.sh hogeuser hogepass 同じアカウントの場合$1 $2の部分にuser名 パスワードを記入すればいいのは分かるのですが、毎回アカウント・パスワードが違うため引数に渡したいと思います。 よろしくお願いいたします。

  • シェルスクリプトに引数を渡す方法?

    次のようなシェルスクリプトを作り、バッチ処理で実行したいのですが、うまくいかず困っています。 %ls test.sh data %less test.sh #!/bin/sh calc.exe input=$1 コマンドから通常実行するときは、 % test.sh data でうまく行きます。 これを、qsubを使ったバッチ処理で実行しなければならなくて、 %qsub test.sh data とすると、qsubは引数を1つしか取れないので、構文エラーとなり、うまく入力引数"data"を渡せません。 %qsub "test.sh data" %qsub 'test.sh data' で、引数を1つにしようとしましたが、ダメでした。 引数ファイル名"data"は、名前が変わるので、できるだけ可変になるようにしたいです。 どなたか、解決法もしくは、参考URLなど教えてください。

  • 【初心者】シェルスクリプトの引数に関して

    現在、シェルスクリプトを作成しようと奮闘中です。 そこで引数に関してお伺いさせてください。 以下が実施したい内容になります。 (1)./test.sh ⇒引数を指定していないため、「引数を指定してください。」と出力し処理終了 (2)./test.sh daily⇒引数で指定した[daily]の処理を実行 (3)./test.sh weekly⇒引数で指定した[weekly]の処理を実行 (1)~(3)の条件を含んだシェルスクリプトを作成するには、 どのような実行処理が必要かご教授お願いします。 ※処理内容に関しては特に指定はございません。 例: daily=特定ディレクトリのコピー weekly=dailyで処理したディレクトリをtarで圧縮し別のディレクトリへ移動 など分かりやすい内容だと幸いです。 また、情報に不備などがありましたらご指摘おねがいします。

  • PHP シェルスクリプト 引数

    失礼します。現在PHPからシェルスクリプトを引数を付けて実行し、戻り値で確認が出来るか試しているのですがなかなか参考になる記事がなく実現が出来ない状態です 調べたところ、 phpからhoge.shというシェルファイルをargという引数で実行したいとします。 引数を"'. .'"で囲う事で、引数を渡せるようです。 $output = shell_exec('/bin/sh /path/to/hoge.sh "'.$arg.'"') var_dump($output) 上記のような記事を見つけたのですがhoge.shはどのように$argを受け取り、戻り値を渡しているのでしょうか?また、$argの値の中身は渡す引数の内容という認識で正しいのでしょうか?サンプルコードなどがあるとうれしいです。 ご教授よろしくお願い致します。

  • シェルスクリプトだと動かない [ -L fileS ] && echo "シンボリックリンクです"

    コマンドライン上で カレントディレクトリにある fileS がシンボリックリンクであるか調べる事ができるか、学習しております。コマンドライン上で [ -L fileS ] && echo "シンボリックリンクです" と打つと、動作する事を確認しました。 しかし、シェルスクリプトで(slink.sh) ======================= #!/bin/sh [ -L fileS ] && echo "シンボリックリンクです" ======================= と、同ディレクトリにスクリプトファイルを作成。 chmod ug+x slink.sh して ./slink.sh と打つと slink.sh: test: 引数が足りません。 と怒られます。 どこがどのように間違っているかわからないので ご教授いただけないでしょうか お願い致します。

  • シェルスクリプト内の「exit」

    クライアントからteratermでservAに接続します。 そこからservBに接続します。 $ ssh servB サーバーBに個人のディレクトリがあり、そこにシェルスクリプトを作っています。 そのシェルスクリプトは「exit 0」で終わっています。 これを実行すると、サーバーBからログアウトしてしまいます。 exitはシェルスクリプト内で使うと、シェルスクリプトを終了するだけかと思ったのですが、ログアウトもしてしまうものなのでしょうか? exitを書かなければ、ログアウトすることなく、カレントディレクトリは変わらないままです。 実行するたびに $ ssh servB $ cd work/mydir と実行しないと自分のディレクトリに戻ってこれないので不便です。 色々と調べたのですが、なぜログアウトしてしまうのかわかりません。 どうすれば、ログアウトしないのか教えて下さい。 よろしくお願いいたします。 シェルスクリプト(TEST) #!/bin/bash -xv echo hello! exit 0 実行結果 [company@servB mydir]$ . TEST hello! Connection to servB closed. [company@servA ~]$

  • シェルスクリプトの引数について

    test.sh '*.c' といったコマンドを入力した時に、 シェルスクリプト内で引数$1を受け取ったときに$1='*.c'となるのではなく、 カレントディレクトリ内にある'*.c'の正規表現にマッチするファイルが入ってしまっています。 例)カレントディレクト内にaaa.cファイルbbb.cファイルといったファイルがある時は、 $1=aaa.c bbb.cとなっています。 '*.c'の正規表現自体をシェルスクリプト内で受け取る方法はないのでしょうか? シェルはbashを使用しています。

  • linuxのシェルスクリプト

    linuxのシェルスクリプト シェルスクリプトの質問をどこですればよいのかよくわからないので、ここでさせていただきます。 最近、始めてシェルスクリプトの勉強を始めました。 スクリプトに渡す引数を出力したいと思い、 echo $1 echo $2 echo $3 とかくと、スクリプトに渡した引数が出力されます。 これを、for文で書くと for i in 1 2 3 do echo $i done とねるのですが、これでは1,2,3が出力されてしまいます。 どうなおしたらいいのでしょうか? よろしくお願いいたします。

  • シェルスクリプトの問題が分かりません。

    引数に複数の整数を与えたときに、それらの和を計算するシェルスクリプトを作成する。具体的には $ ./sum.sh 1 2 3 4 5 15 のようになるシェルスクリプトである(引数の個数は可変とする)。 どうしてもわかりません。どうか、よろしくお願いします。

専門家に質問してみよう