LoginSignup
6
5

More than 5 years have passed since last update.

C#でちょっとしたコードを試したいときに使えるシェルスクリプトを書いてみた

Posted at

目的

C#のコード書いてちょっとした計算したいけど、いちいちファイル作ってコンパイルして実行するのが面倒くさい!
そうだ、自動化するシェルスクリプトを書こう!

というわけで書いてみました。

ideoneを使えば解決するかもしれませんが、ここではローカルで実行したい場合を想定しています。

使い方

  1. 以下のスクリプトをパスの通った場所に置き、実行権限を付与します。
    chmod a+x CSscript
    実行するにはCSscriptというコマンドを叩きます。
    .が環境変数PATHに追加されていない場合は./CSscriptというコマンドになります。

  2. 初回起動時にはcurlGitHub-Gist-CSharpScriptTemplate.csからテンプレートをダウンロードします。

  3. vimが起動するので、Solve関数内に処理を記述して保存し、終了してください。

  4. シェルスクリプトがコンパイルし、実行します。

  5. オプションを指定していた場合は対象のファイルが削除されます。

オプション

オプション 備考
-h, --help ヘルプ。オプションの解説。
-v, --version バージョン表示
-w テンプレートファイルで上書きする
-r, --remove スクリプトを削除する
-rt, --rtemplate テンプレートを削除する

シェルスクリプト

シェルスクリプトの更新はGitHub-Gist-CSscript.shに示します。

CSscript
#!/bin/sh
ROGNAME=$(basename $0)
VERSION="1.0"
HELP_MSG="'$PROGNAME -h'と指定することでヘルプを見ることができます"i
FLG_W=0
FLG_R=0
FLG_RT=0

# ヘルプメッセージ
usage() {
    echo "Usage: $PROGNAME [オプション]"
    echo
    echo "オプション:"
    echo "  -h,  --help"
    echo "  -v   --version"
    echo "  -w                テンプレートファイルで上書きする"
    echo "  -r,  --remove     スクリプトを削除する"
    echo "  -rt, --rtemplate  テンプレートファイルを削除する"
    echo "スクリプトファイルは~/csscript-tmp.csに保存されます"
    echo "テンプレートファイルは~/.csscript.csに保存されます"
    exit 1
}

# オプション解析
for OPT in "$@"
do
    case "$OPT" in
        # ヘルプメッセージ
        '-h'|'--help' )
        usage
        exit 0
        ;;
        # バージョンメッセージ
        '-v'|'--version' )
        echo $VERSION
        exit 0
        ;;
        # オプション-w
        '-w' )
        # テンプレートファイルで上書きする
        FLG_W=1
        shift 1
        ;;
        # オプション-r
        '-r'|'--remove' )
        # スクリプトを削除する
        FLG_R=1
        shift 1
        ;;
        # オプション-rt
        '-rt'|'--rtemplate' )
        # テンプレートを削除する
        FLG_RT=1
        shift 1
        ;;
esac
done

if [ -e ~/.csscript.cs ]; then
    :
else
    # 存在しない場合
    echo "curl "https://gist.githubusercontent.com/NotFounds/cb9b25c5dad105ae3638/raw/3edcd7d168bf5da95f83b3da5846023849d2c802/CSharpScriptTemplate.cs" > ~/.csscript.cs"
    curl "https://gist.githubusercontent.com/NotFounds/cb9b25c5dad105ae3638/raw/3edcd7d168bf5da95f83b3da5846023849d2c802/CSharpScriptTemplate.cs" > ~/.csscript.cs
    if [ $? -eq 0 ]; then
        echo "スクリプトテンプレートを取得に成功しました"
    else
        echo "スクリプトテンプレートの取得に失敗しました"
    fi
fi

if ( [ $FLG_W -eq 1 ] || [ ! -e ~/csscript-tmp.cs ] ) ; then
    # テンプレートファイルで上書き
    cp -f ~/.csscript.cs ~/csscript-tmp.cs
fi

vim ~/csscript-tmp.cs

if [ $? -eq 0 ]; then
    echo
    echo "Compile : mcs -warn:0 -o+ -r:System.Numerics ~/csscript-tmp.cs"
    mcs -warn:0 -o+ -r:System.Numerics ~/csscript-tmp.cs

    if [ $? -eq 0 ]; then
        echo
        echo "mono ~/csscript-tmp.exe"
        echo "        実行"
        echo "--------------------"
        mono ~/csscript-tmp.exe
        echo "--------------------"
        echo
        echo "rm ~/csscript-tmp.exe"
        rm ~/csscript-tmp.exe
    fi
fi

# -rのオプションが指定された場合
if [ $FLG_R -eq 1 ]; then
    echo "rm ~/csscript-tmp.cs"
    rm ~/csscript-tmp.cs
    echo "スクリプトファイルは削除されました"
fi

# -rtのオプションが指定された場合
if [ $FLG_RT -eq 1 ]; then
    echo "rm ~/.csscript.cs"
    rm ~/.csscript.cs
    echo "テンプレートファイルは削除されました"
fi

まとめ

メリット
  • 競技プログラミングの問題解くときにも便利!
  • C#に触れやすくなった!
  • ちょっとした処理・計算をシェルスクリプト→C#で書くようになった!
デメリット
  • ファイル名を変えられないため、間違ってスクリプトファイルを消したり上書きしてしまう。(後々修正します)
  • デバッグが面倒
6
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5