11740
シェルスクリプトを始めたばかりなのですが、  
件名の処理をどのようにしたら良いかわからず質問しました。

macにてシェルスクリプトを使って、Node.jsが入っていなければ、  
Node.jsをダウンロードするという処理を書きたいのですが  
入っていればと言うのをどのように書けば良いかわかりません。

Node.jsのダウンロードは、  
下記のコマンドで実現できました。

```

    curl -O https://nodejs.org/dist/v0.12.5/node-v0.12.5.pkg
    
```

処理としては下記のようになるはずです。

```

    #!/bin/sh
    if アプリが存在しない then
        curl -O https://nodejs.org/dist/v0.12.5/node-v0.12.5.pkg
    fi
    
```

  
MacOSX:10.10.3  

* * *

**■最終目的は下記の手順をシェルスクリプト化する事です。**

●Node.jsダウンロード

<https://nodejs.org/download/>

●ファイルサーバーとするフォルダを指定

1:フォルダ作成  
2:コマンドプロンプトから1:のフォルダへ移動  
例）cd /path/to/my/project  
3:コマンドプロンプトにて下記入力  
npm install connect

●jsファイルを１のフォルダに作成

・ｊｓファイルの中身は下記ソース

```

    var connect = require('connect'),
        serveStatic = require('serve-static');
    
    var app = connect();
    app.use(serveStatic(__dirname));
    app.listen(5000);
    
```

・適当な名前で保存  
仮にserver.jsとする。

●コマンドラインからサーバー実行  
1:コマンドプロンプトからjsファイルのフォルダへ移動  
2:下記コマンド入力  
npm install serve-static

3:下記コマンド入力  
node server.js

●下記htmlをindex.htmlという名前で作成し、  
jsファイルと同じフォルダに置く

```

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="utf-8">
    <title>hello connect</title>
    </head>
    <body>
    hello connect
    </body>
    </html>
    
```

●ブラウザから下記URLをたたいてみると、  
hello connect と表示される。  
表示されない時は、app.listen(5000)の  
ポート番号を変えてみて下さい。

<http://127.0.0.1:5000/>

* * *

06/26 追記

* * *

お力添えのおかげでとりあえず版ができました。

```

    #!/bin/sh
    node -v &> /dev/null
    if [ $? -ne 0 ]; then
      curl -O https://nodejs.org/dist/v0.12.5/node-v0.12.5.pkg
    fi
    
    Current=`pwd`
    NodePath=/NodeJs
    CheckPath=$Current$NodePath
    if [ ! -e $CheckPath ]; then
        mkdir -m 777 NodeJs
    fi
    
    cd $CheckPath
    npm install connect
    
    echo $CheckPath
    
    JsFileName=LocalServer.js
    if [ ! -e $JsFileName ]; then
        touch $JsFileName
        chmod 777 $JsFileName
    
    
        JsString="var connect = require('connect'),
            serveStatic = require('serve-static');
            var app = connect();
            app.use(serveStatic(__dirname));
            app.listen(5000);"
    
            echo "$JsString" > $JsFileName
    fi
    
    echo $JsFileName
    
    HtmlFileName=Index.html
    if [ ! -e $HtmlFileName ]; then
        touch $HtmlFileName
        chmod 777 $HtmlFileName
    
        HtmlString="<!DOCTYPE html>
        <html lang="ja">
        <head>
        <meta charset="utf-8">
        <title>hello connect</title>
        </head>
        <body>
        Make FileServer Success!
        </body>
        </html>"
    
        echo "$HtmlString" > $HtmlFileName
    fi
    
    echo $HtmlFileName
    
    npm install serve-static
    
    echo "Install End"
    
    node $JsFileName
    
```
CC BY-SA 3.0
2015-06-25T14:07:52.533
11732
2015-06-26T08:28:27.057
2015-06-26T08:28:27.057
5261
5261
question
macos node.js shellscript
シェルスクリプトでnode.jsがすでにインストール済みかチェックするには？
簡易的な方法として、`node -v`の実行に成功するかチェックするというのはどうでしょうか。

```

    node -v &> /dev/null
    if [ $? -ne 0 ]; then
      # nodeがインストールされていない
    fi
    
```
CC BY-SA 3.0
2015-06-25T14:21:50.793
11735
2015-06-25T14:21:50.793
3639
11732
answer
以下のような感じで、コマンドの存在確認用の関数を定義して、  
それを利用して、下記のサンプルコードのようにして、  
コマンドの存在確認を行ってみるといいのではないでしょうか？

```

    function command_exists {
      command -v "$1" > /dev/null;
    }
    
    # node.jsがインストール済みかチェック
    if ! command_exists node ; then
        curl -O https://nodejs.org/dist/v0.12.5/node-v0.12.5.pkg
    fi
    # npmが利用可能かチェック
    if ! command_exists npm ; then
        #npmの手動インストール処理・・・
    fi
    
```

また、シェルスクリプトを書き始めたばかりとのことでしたので、  
私がシェルスクリプトを書き始めたときに、参考にしたサイトのURLを記載しておきます。

<http://shellscript.sunone.me/>
CC BY-SA 3.0
2015-06-25T16:36:07.603
11740
2015-06-25T16:36:07.603
3104
11732
answer