Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

目的

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#で書くようになった!
デメリット
  • ファイル名を変えられないため、間違ってスクリプトファイルを消したり上書きしてしまう。(後々修正します)
  • デバッグが面倒
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away