シェルスクリプトで開発環境の自動構築


こんにちは. 今回はシェルスクリプトに軽く触れたので初心者向け&備忘録です.

シェルスクリプトとは

OSを操作するためのシェル上で実行できる簡単ななプログラミング言語のこと.また、そのような言語によって書かれた、複数のOSコマンドや制御文などを組み合わせた簡易なプログラムを指します.一行がシェルにおける一行のコマンド入力に対応しており、複数のコマンド実行の流れをまとめて指定することができます.

シェルとは?

シェルはOSと対話するためのインターフェースであり,コマンド等を制御する環境でもあります.

上図のようにUbuntuの核となるカーネルを覆っている核がシェルだと考えるとわかりやすいです.
シェルやカーネルやターミナルの関係図は以下の図のようにあらわすことができます.

シェルがあることでユーザーからのコマンドを受け付け,OSとの対話を可能とする.
シェルはコマンドを実行する際にカーネルが解釈可能な形へ変換し,カーネルは実行を行う.
この実行結果を私たちが私達が日頃ターミナルで見ているような形へ変換してくれるのもシェルなのである.
CUI環境においてシェルは最も身近なインターフェースの1つとなっています.
UbuntuをはじめとするLinuxのディストリビューションにおいて一般的なシェルに「bash」があります.
今回はこのbashを用いてやっていきます.

世界へこんにちは

世界へ挨拶するためのファイルを作成します.

#!/bin/bash

echo "Hello, World!"

シェルスクリプトのファイルは基本的に.shの拡張子で作成します.
実際に動作させるコードの前に#!/bin/bashを書き,システムにこれはシェルスクリプトですよ~と知らせるものです.
単純にシェルスクリプトを実行させたい場合は#!/bin/shでも構いません.

実行方法は,まずファイルを実行ファイルに変えます.

$ chmod 755 [ファイル名].sh
$ ./[ファイル名].sh

そして以下のどちらかのコマンドで実行できます.

$ sh [ファイル名].sh
$ bash [ファイル名].sh

ファイルを実行すると,Hello, World!と世界に挨拶できます.

環境構築

ターミナルで実行しているコマンド群を1つにまとめることができるため,今回はそれを用いて環境構築をしていきます.
今回はpythonとSQLiteデータベースの環境を自動構築したいと思います.

#!/bin/bash

sudo apt update
sudo apt upgrade
sudo apt install -y python3 python3-pip python python-pip build-essential libncursesw5-dev libgdbm-dev libc6-dev zlib1g-dev libsqlite3-dev tk-dev libssl-dev openssl libbz2-dev libreadline-dev sqlite3
python3 create_db.py
sudo apt autoremove
create_db.py
import sqlite3

conn = sqlite3.connect([ファイル保存先パス])
curs = conn.cursor()
curs.execute("CREATE TABLE [テーブル名]([要素])")
conn.commit()
curs.close()
conn.close()

このように何度も行うような依存関係のインストールや別ファイルの実行などを書いてあげることが可能です.
さらに,システムでcronなどを用いて定期実行させたいという場合にもシェルスクリプトで書いてあげることが可能です.

#!/bin/bash

crontab -l > tempfile
echo "*/10 * * * * python3 hello_world.py" >> tempfile
crontab -u pi tempfile
sudo rm ./tempfile

一時的に今保存されているcronの状況をファイル出力させることで追記可能にしています.

おわりに

シェルスクリプトをはじめてちゃんと触り,便利だな~と思いました(今更).
みなさんも是非使ってみましょう!

参考

【1分でわかる】シェルスクリプトとは?