
Ubuntu日本語フォーラム

ログインしていません。
Skypeで自宅の監視をしていますが、ときどきSkypeが落ちることがあります。この時に自動でSkypeを起動させるためにプロセスをチェックし、SkypeのプロセスがなければSkypeを起動するように下記のシェルスクリプトを書きましたが上手く動作しません。
ps -ef|grep skype|grep -v grep|wc -l
では、「1」と返してくるのですが、処理2のelseに進まずskypeが起動してきます。
下記のシェルスクリプトの何処が問題なのか分かりません。
#!/bin/sh
pcount=`/usr/bin/ps -ef|grep skype|grep -v grep|wc -l`
if [ $pcount = 0 ]; then
skype &
else
echo No skype
fi
【環境】
ubuntu 10.04
Skype β 2.2.0.35
以上、宜しくお願い致します。
オフライン
答えではありませんが、こんなのはどうでしょう?
ps -C skype -o comm= > /dev/null || /usr/bin/skype &
オフライン
anjyu 様へ.
ps ... のところは問題ない….
となると,問題は後の if 文ということになります.
結論としては,シェルスクリプトで if 文の条件文で
数値を比較する場合は = ではなく -eq を使います.
= は文字列の比較の際に使います.
もし文字列で比較する場合は,$pcount と 0 をクォーテーションで囲む必要があります.
あと,流儀的なものもあるかもしれませんが,
パイプやリダイレクトの前後にはスペースを入れた方が,
デバッグや予期せぬエラーに出会わなくていいと思います.
また,この場合は問題ないかもしれませんが,
シェバンク行(1行目)は,#!/bin/sh よりも #!/bin/bash にした方が良いと思います.
(どういうことか理解して,意図的にそうしているのであれば,良いのですが…)
Ubuntu では,/bin/sh はデフォルトで /bin/dash というものが使われることになります.
簡単に説明すると dash は,bash の軽量版みたいなものです.
従って,bash と dash では所々,文法の解釈が異なるので,予期せぬ結果を招くことがあります.
オフライン
yama による投稿:
答えではありませんが、こんなのはどうでしょう?
コード:
ps -C skype -o comm= > /dev/null || /usr/bin/skype &
yama様
新たなコードを有難うございます。
同じ事をこんなに簡潔なコードで書けるんですね。
もっと勉強をしたいと思います。
今後もアドバイスを宜しくお願い致します。
オフライン
hellfire による投稿:
また,この場合は問題ないかもしれませんが,
シェバンク行(1行目)は,#!/bin/sh よりも #!/bin/bash にした方が良いと思います.
(どういうことか理解して,意図的にそうしているのであれば,良いのですが…)
Ubuntu では,/bin/sh はデフォルトで /bin/dash というものが使われることになります.
簡単に説明すると dash は,bash の軽量版みたいなものです.
従って,bash と dash では所々,文法の解釈が異なるので,予期せぬ結果を招くことがあります.
hellfire様
問題は、/bin/shここでした。
#!/bin/bash で考えていた動作をしました。
基本的なところで見過ごしていました。
また、数値を比較する場合は = ではなく -eq を使うことも知りませんでしたので、勉強になりました。
ご指摘を有難う御座いました。
今後とも宜しくお願い致します。
オフライン