[ShellScript] Switch文で簡易インターフェースの作成

このブログで PowerShell を使って簡易インターフェースを作るという記事を書きました。
PowerShellでインタラクティブな簡易インターフェースをつくる

Android上のTermux上でこのようなインターフェースを動作させたいので、「ShellScript」を使って同じようなプログラムを作成します。Termux上でPowerShellを動作させる方法はあるかもしれませんが、情報が見つかりくいため断念しています。

スポンサーリンク

ShellScriptのSwitch文

ShellScript は Switch文の条件分岐をさせたいときは Switch ではなく caseを使います。

while :
do

echo ""
echo 1: create_table.py
echo 2: drop_table.py
echo 3: insert_user.py
echo 4: delte_user.py
echo 5: tables.py
echo 6: users.py
echo 7: update_user.py
echo 8: where_name.py
echo q: quit
echo ""

echo please enter program_number?:
read str

case $str in
    1 ) python create_table.py;;
    2 ) python drop_table.py;;
    3 ) python insert_user.py;;
    4 ) python delete_user.py;;
    5 ) python tables.py;;
    6 ) python users.py;;
    7 ) python update_user.py;;
    8 ) python where_name.py;;
    "q" ) echo "\ quit"
          break;;
    * ) echo no such number;;
esac
done

exit 0

ShellScriptで改行する方法がわからなかったので、echoを列挙しています。
入力受付はreadを使えばよいようです。
今回新たに無限ループをさせてみました。

while :
do

while は上記のように2行で書かないとエラーになるのですが 1行で書きたい場合はwhile :; doでもよいようです。無限ループを抜けるにはbreakを使います。

ShellScriptには他の言語のSwitch文のようにdefaultがないので、30行目のように*ワイルドカードを使います。このときcase文の処理ブロックの一番下に書くようにします。そうでないと、ワイルドカードが先に評価されてしまい思った通りの動作にならないです。

スポンサーリンク

おまけ: Linuxで隠しファイルを消す

Linuxの隠しファイルを確認するには、以下のコマンドを使います。

ls -a
# .file

隠しファイルはファイル名の先頭が .ドット ではじまるものです。これをrm *fileのようにしても削除することはできないので、rm .fileのようにきちんとドットまで書くようにします。

また、隠しファイルとは直接関係しませんが、ファイル名にバックスラッシュが含まれている場合は、削除時にきちんとエスケープしてやる必要があります

rm \\file\\

おまけ: ファイル内置換

こちらはpythonプログラムになります。Termux上でいろいろやるとき、作りました。

filepath = input("filepath?: ")
replace_before = input("replace_before?: ")
replace_after = input("replace_after?: ")

contents = []
with open(filepath, 'r') as f:
    for line in f:
        line = line.replace(replace_before, repl
        contents.append(line)
with open(filepath, 'w') as f:
    for content in contents:
        f.write(content)

コメント

タイトルとURLをコピーしました