スクリプトのエラー「unexpected EOF while looking for matching `"'」の解決法は?

このQ&Aのポイント
  • RedHat9上で作成しているスクリプトに関しての質問です。
  • スクリプトの「if [ -z "$SSH_PORT_FWD_KEKKA" ]; then」で引っかかっているエラーについて解決法を教えてください。
  • スペースがある文字列を引数に用いる際は、""で括る必要があります。該当箇所を修正することでエラーを解消することができます。
回答を見る
  • ベストアンサー

スクリプトのエラー「unexpected EOF while looking for matching `"'」の解決法は?

RedHat9上で作成しているスクリプトに関しての質問です。 #!/bin/bash -x /bin/date MAIL=user33 SCRPT_NAME=sshPortFoward.cron HOST=foo.hoge.com UNAME=user01 PASSWD=xxxxxxxx SRC_FWD_PORT=60143 DST_FWD_PORT=143 SSH_PORT=60001 SSH_PORT_FWD_KEKKA=`/bin/ps ax | /bin/grep $HOST | /bin/grep $SRC_FWD_PORT | /bin/grep $DST_FWD_PORT | /bin/grep $UNAME` if [ -z "$SSH_PORT_FWD_KEKKA" ]; then ( /bin/date ; /bin/ps ax | /bin/grep $HOST | /bin/grep $SRC_FWD_PORT | /bin/grep $DST_FWD_PORT | /bin/grep $UNAME) | \ /bin/mail -s $SCRPT_NAME":could ssh port forward $MAIL fi というスクリプトで 「if [ -z "$SSH_PORT_FWD_KEKKA" ]; then」で引っかかっているみたいです。 ++ /bin/ps ax ++ /bin/grep foo.hoge.com ++ /bin/grep 60143 ++ /bin/grep 143 ++ /bin/grep user01 + SSH_PORT_FWD_KEKKA= /etc/cron/ip_adr_change.cron/sshPortFoward.cron: line 17: unexpected EOF while looking for matching `"' /etc/cron/ip_adr_change.cron/sshPortFoward.cron: line 19: syntax error: unexpected end of file とエラーになってしまいます。 「予想外のEOF!?」という意味ですかね。 文字列にスペースがあるので「""」で括っているのですが、、、 どういう風に訂正したらいいんでしょうか?

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

  • ベストアンサー
  • yosi_yosi
  • ベストアンサー率35% (165/468)
回答No.1

hhozumiさんが書かれたスクリプト中で、 /bin/mail -s $SCRPT_NAME":could ssh port forward $MAIL の行中の$SCRPT_NAMEの始めの「"」がありません。写し間違えでなければですが...

hhozumi
質問者

お礼

有難うございます。 「/bin/mail -s $SCRPT_NAME":could ssh port forward 「$MAIL」 で解決できました。どうもお騒がせ致しました。

関連するQ&A

  • tcpdumpをログファイルにリダイレクトできません

    以下の様なスクリプトをRedhat9環境下のcronで回して #!/bin/bash -x LOG_FILE=/var/log/tcpudumpPop.log if [ -f $LOG_FILE ];then touch $LOG_FILE fi /usr/sbin/tcpdump -i eth0 -a -vvv \( dst port 110 and dst host hoge.dyndns.net \) \ >> /var/log/tcpdumpPop.log & として /var/log/tcpdumpPop.log にPOPアクセスに関するログを吐かせようとしています。 # ls -l /var/log/tcpdumpPop.log -rw-r--r-- 1 root root 0 11月 30 23:42 /var/log/tcpdumpPop.log # ps ax | grep tcpdump 8253 pts/2 S 0:00 [tcpdump] 10339 pts/2 S 0:00 grep tcpdump となりまして、実験的にPOPアクセスしてみても # tail -f /var/log/tcpdumpPop.log には何も表示されません。 直接 # /usr/sbin/tcpdump -i eth0 -a -vvv \( dst port 110 and dst host hoge.dyndns.net \) とした場合にはコマンドライン上にチャンと表示されます。 どうしてリダイレクトされないでしょうか?

  • サーバ側ではsshポートフォワーディングのプロセスが表示されない!?

    RedHat9の環境です。 [user01@local.host.co.jp]$ ssh -L 60143:remote.host.co.jp user01@remote.host.co.jp password: [user01@remote.host.co.jp]$ として ポートフォワーディングを行いました。 ローカルホスト上では [root@local.host.co.jp]# ps ax | grep ssh 24421 pts/5 S 0:00 ssh -L 60144:remote.host.co.jp:143 user01@remote.host.co.jp となりますが、 [root@remote.host.co.jp]# ps ax | grep ssh 10078 ? S 0:01 [sshd] となってしまいます。 サーバ側(remote.host.co.jp)でポートフォワーディングを監視するにはどうしたらいいのでしょうか?

  • Cygwinでデーモンが動いているかコマンドラインで知る方法は?(psコマンド?)

    WinXP homeEditionでCygwinを使用しています。 $ uname -r 1.5.16(0.128/4/2) CYGWIN sshd CYGWIN inetd CYGWIN cronが 動いているかコマンドラインで知る方法は無いのでしょうか? $ ps ax | grep cron としても何も表示されません。 でも[サービス]では状態は"開始"になっています。

  • apache停止してたら再起動させるcron

    apache停止してたら再起動させるcron アパッチ停止時してたら再起動させるcronを設定したいのですが、cronに以下を設定してもうまくいきません。 set http=`ps aux | grep -v grep | grep -c http` ; if ( $http < 2 ) /usr/local/sbin/restart_apache cronエラーとしてマスターユーザに以下エラーが来ます。 Syntax error: word unexpected (expecting "then") シェルがX-Cron-Env: <SHELL=/bin/sh>であるという記述もありcron実行時にはshを使う? ようなのですが。。。ググっても解決できずにいます! thenとendifを入れてもだめです。 おそらく1行で実行する構文?がよくないのだと思っています。 セミコロン;とかを入れてみてもうまくいきませんでした。 どなたかおわかりでしょうか

  • tcpdumpで複数のデバイスを指定するには?

    今日は。 RedHat9でのtcpdumpでppp0かeth0へのパケットをキャプチャしたいのですが上手くい きません。 どのうように記述したらいいのでしょうか? #rpm -qa |grep tcpdump tcpdump-3.7.2-7.9.1 # /usr/sbin/tcpdump -i \( ppp or eth0 \) -a -vvv \( dst port 110 and dst host yy.mine.nu \) tcpdump: ioctl: No such device

  • sshで接続できない

    こんにちは。 サーバーへsshで接続できないので質問させていただきます。 クライアントから、 $ ssh -p **** user@***.***.***.*** と実行すると、 ssh: connect to host ***.***.***.*** port ****: Connection refused と返されました。 サーバー側で # /etc/init.d/ssh start を叩いても、 # ps -A | grep ssh には何も表示されません。 インストールしていないのかと思い、 # apt-get install openssh-server を叩くと、インストール済みだと返されました。 OSはUbuntu Server 14.04 LTSで、sshのポートが解放できているのは確認しています。 サーバー運営はほぼ初めてなので、色々と筋違いなこと等言っているかもしれませんが、 よろしくお願いします。

  • #! /bin/sh のファイルのトークンでエラー

    Linuxで #! /bin/sh ・・・ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in alpha:OSF1:*:*) というソースで '/sbin/config.guess: line 54: syntax error near unexpected token `in ./sbin/config.guess: line 54: `case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RE 'EASE}:${UNAME_VERSION}" in Hmm... inspecting your system by config.guess failed? I failed to inspect your system. THIS HOST (ttt.starwish.com) IS [unknown-unknown-unknown] PLEASE DEFINE $CPU_TYPE_MANUFACTURER_OS IF POSSIBLE If you cannot define $CPU_TYPE_MANUFACTURER_OS FML may work with "unknown-unknown-unknown" (I assume BSD like if "unknown-unknown-unknown") cpu-manufacturer-os [unknown-unknown-unknown] というエラーが表示されます。 このファイルはfmlのconfig.guessです。 解決策などありましたら教えてください。

  • 自動scpスクリプトでキーが書き換わった場合にexpectでのif文の書き方は?

    度々スイマセン。 自動パスワード入力でscpコマンドを実行させたく思っています。 Win2kのCygwinで下記のスクリプトを試してみました。 $ cat ./test.sh #!/bin/bash -x HOST=foo.hoge.dyndns.net UNAME=user01 PASSWD=xxxxxxxx TARGET=/cygdrive/c/cygwin/home/root/hoge /usr/bin/zip -r $TARGET.lzh $TARGET expect -c " set timeout 20 spawn scp -P 60001 $TARGET.zip $UNAME@$HOST:$DSTNTN ; expect \"password:\" ; send \"$PASSWD\r\" ; interact " で、成功しましたがキーが変わった時には「yes」と自動で入力させたくて expect -c " set timeout 20 spawn scp -P 60001 $TARGET.zip $UNAME@$HOST:$DSTNTN ; if [ expect \"Are you sure you want to continue connecting (yes/no)?\" ] then ; send \"yes\r\" ;# yesと入力する。 fi; expect \"password:\" ; send \"$PASSWD\r\" ; interact " としてみたのですがキーが書き換わっていない場合(いきなりパスワードが聞かれる場合)、 user01@foo.hoge.dyndns.net's password: syntax error in expression "": premature end of expression while executing "if [ expect "Are you sure you want to continue connecting (yes/no)?" ] then " となってしまいます。一方、書き換わって、受け入れるかの問い合わせされた場合も同様の文法エラーとなってしまいました。 if文を入れる場合にはどう記述したらいいのでしょうか?

  • リモート(SSH)からFirefoxをCUIで起動

    諸先輩方に、以下の目的を達成するために必要な手順をアドバイス頂きたく存じます。 【構成】 Windows(Putty)-->[SSH]-->CentOS6.0 【目的】 定期的に自動で特定URLの画面キャプチャを取得するために、SSHあるいは、CronからCentOS6上のFirefoxをCUIで起動し、CentOSのコンソール(GUI)にFirefoxを起動させたい。 (※諸々の事情により、VNC等でXを飛ばしてWindows上で処理させる方法は不可とさせて下さい。) 【環境】 [root@cdesk ~]# cat /etc/redhat-release CentOS Linux release 6.0 (Final) [root@cdesk ~]# uname -a Linux cdesk.*********** 2.6.32-71.el6.i686 #1 SMP Fri Nov 12 04:17:17 GMT 2010 i686 i686 i386 GNU/Linux [root@cdesk ~]# [root@cdesk ~]# rpm -qa | grep ssh openssh-server-5.3p1-20.el6.i686 openssh-clients-5.3p1-20.el6.i686 openssh-askpass-5.3p1-20.el6.i686 libssh2-1.2.2-7.el6.i686 openssh-5.3p1-20.el6.i686 [root@cdesk ~]# [root@cdesk ~]# rpm -qa | grep cron crontabs-1.10-32.1.el6.noarch [root@cdesk ~]# rpm -qa | grep firefox firefox-3.6.9-2.el6.centos.i686 [root@cdesk ~]# 【状況】 ・コンソールの"端末"から、以下のコマンドでFirefoxが指定のURLで起動することは確認できました。 [root@cdesk ~]# firefox http://yahoo.co.jp/ ・SSHからは上記コマンドでコンソールのGUIにFirefoxを起動することはできませんでした。 以上、情報がざっくりで申し訳ございませんが、アドバイスをお願い致します。 追加で必要な情報や質問がありましたら、出来る限り対応いたします。

  • 仮想フレームバッファXvfb上でfirefoxを実行したいが、 Gtk-WARNING **: cannot open display: となる

    .shから php test.php とし、以下のスクリプトをroot権限としてcrontab経由で実行しています。 <?php $CapAddr = 'http://google.com'; system('firefox -display :1 -remote "openurl(' . $CapAddr . '), new-window"'); ?> ところが、ssh接続したターミナル上でimportコマンドで画面のキャプチャを取得して開いてみると 指定したページが表示されていません。吐いているエラーを見ると、 (firefox-bin:6340): Gtk-WARNING **: cannot open display: となり、実行に失敗しています。 ssh接続した所で直に打ち込めば何ら問題なく言うことを聞いてくれるのですが、 shell script上で php /home/htdocs/WebPageCapture.php とするとまたしても同じエラーを吐きます。 次はやり方を変えて、呼び出さずに直接CLI版のPHPを動かす方法を試しました。 #!/usr/bin/php <?php で始まる、同一のコードです。 すると再び、同じ (firefox-bin:7802): Gtk-WARNING **: cannot open display: のエラーが発生してます。 terminalで同じ事をすると上手く行くだけに困っています。 お力を貸していただけませんでしょうか、よろしくお願いいたします 接続元:Mac OSX Tiger 接続先サーバ環境:CentOS4.2 # ps ax | grep Xvfb /usr/X11R6/bin/Xvfb :1 -screen 0 1024x2048x24