シェルスクリプトの入門コーナーをはじめました。
簡易的なプログラムをOSで標準的に備わっている言語で処理できるって中々魅力的ではないですか?
サーバに入ってバッチ処理を動かすときにも使われます。
例えば以下のコマンド
1 2 |
$ ls ~/ work project Downloads Desctop |
これもシェルスクリプトで「ホームディレクトリ配下にあるファイルやフォルダを出力して」という命令をしています。
こういった命令を自動化し、都度コマンドを打たなくてもサーバが勝手に動いてくれるようにできれば
日々のOS操作の業務がもっとシンプルになったりできるので、是非覚えておいて損はないと思います。
とりあえず"Hello World!"を出力
ほとんどのプログラム言語でも"Hello World!"からはじまるので、シェルスクリプトでもそれをやってみます。
hello-world.sh
1 2 3 |
#!/bin/bash echo "Hello World!" |
作成したら、下のコマンドで実行し「Hello World!」と出力されれば成功です。
1 2 |
$ bash hello-world.sh Hello World! |
ターミナル上で打っている
1 |
$ echo "Hello World!" |
というコマンドをを.shの拡張子のファイルに記述し、それをbashコマンドで呼び出して実行しているだけです。
複数のコマンドを実行
先程の例ではechoコマンドで文字列を出力するだけでしたが、もちろん複数のコマンドを記述して、それを順番通りに実行することも可能です。
make-files.sh
1 2 3 4 5 6 7 |
#!/bin/bash mkdir -p dir1/subdir1-1 dir1/subdir1-2 mkdir -p dir2/subdir2-1 dir2/subdir2-2 touch dir1/subdir1-1/file.txt dir1/subdir1-2/file.txt touch dir2/subdir2-1/file.txt dir2/subdir2-2/file.txt |
ディレクトリを作成して、そのディレクトリ内にファイルを作成するというコマンドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ sh make-files.sh $ tree ├── dir1 │ ├── subdir1-1 │ │ └── file.txt │ └── subdir1-2 │ └── file.txt ├── dir2 │ ├── subdir2-1 │ │ └── file.txt │ └── subdir2-2 │ └── file.txt ├── hello-world.sh └── make-files.sh |
予め決まっているコマンド群をミスすることなく実行できるので簡単な作業でもスクリプトファイルにしておくと便利です。
SSHに入ってデプロイするコマンドサンプル
GitlabのCI/CDを使って対象のサーバの自動デプロイをするときにもシェルスクリプトは応用できます。
以下の例ではLaravelのプロジェクトのリポジトリとDBを最新にするサンプルです。
ssh-deploy.sh
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash ssh target-server <<EOC cd /var/www/project git checkout -f master git pull npm i npm run dev composer install php artisan db:seed php artisan migrate EOC |
まとめ
- シェルスクリプトはOSに対する命令である。
- スクリプトファイルにコマンドの一連を記述しておけば、ファイルを実行するだけで済み、入力ミスが無くなる
- サーバに入って、デプロイなどのセンシティブな作業はスクリプトファイルにまとめて実行すべき(できれば自動で