Linuxで「スクリプト」を学びたいと思ったことはありませんか?作るのは案外簡単です。スクリプト(シェルスクリプトやbashスクリプトと呼ばれることが多い)は、内部に複雑なコードを含む本物のプログラムであることもあります。また、Linuxで物事をより速く、より簡単に行うためにユーザーがまとめた長いタスクのリストに過ぎないこともあります。

この記事では、Linuxで基本的なシェルスクリプトを作成する方法を学びます。まず、シェルスクリプトの基本的な要件とやっていいことと悪いことについて学び、次にスクリプトを介してユーザーの入力を受け取り、それをターミナル画面にプリントアウトする方法を学びます。Linuxでスクリプトを始めることがいかに簡単か(そしてベストプラクティス)を学びます。

ヒント: 正規表現のチートシートをチェックしてみてください。

Why Would You Make a Script?

Linux でスクリプトを作成することは、非常に有用なスキルです。bashスクリプトを使えば、繰り返しの作業を自動化することができます。うまくやれば、あなたの生産性を高め、より短い時間でより多くのことを達成することができます。

例えば、あなたは Arch Linux をゼロからビルドしたとします。オペレーティングシステムがインストールされ、すべての基本パッケージとともにインストールされ、オペレーティングシステムが起動するとターミナルをブートできるようになっています。Arch Linux はセットアップに時間がかかるので、プロセスは完了しません。

この時点で、ユーザーはBashスクリプトを書き、すべてを一度に達成することができます。これはプログラミングでもなければ、高度なものでもない。しかし、ユーザーが Arch Linux の動作について十分に理解しているのであれば、セットアップ後のプロセス(デスクトップ環境、ドライバ、ユーザー設定など)のほとんどを自動化できるはずです。

あなたの bash スクリプトに対する唯一の制限は、あなた自身の Linux と Bash の知識です! 作るのは思ったより簡単です。

はじめに

コードを書くときに必要なものは、指定したり、リソースをロードする必要があります。シェルでスクリプトを書くときにも、指定が必要なものがあります。bashスクリプトでは、これを “shebang “と呼びます。スクリプトで使用されるシェバングは、スクリプトがどのインタープリタの下で実行されるべきかを伝えます。これは、Bashでも、あなたのシステムで利用可能な他のスクリプトでもかまいません。言語によって、独自のシバングがあることに注意してください。

例えば、Pythonスクリプトを書く場合、shebangは #!/usr/bin/python となります。

Bashには様々なshebangがありますが、ほとんどのユーザーは #!/bin/bash しか見たことがないのではないでしょうか。一般的なルールとして、簡単なスクリプトを書くときは #!/bin/bash を使い、Linux から持ち出す予定はありません。最近のLinuxディストリビューションはすべて同じバージョンのbashを搭載しており、bashシェルは通常同じ場所にあります。

もう一つのshebangは #!/usr/bin/env bash というもので、それ自体が有用であることを証明しています。これは移植性のために設計されており、スクリプトが他のUnixライクなオペレーティングシステム(BSD、macOSなど)で動作するように設計されている場合に使用されるべきものです。

ベストプラクティス

Bashでスクリプトを書くのは、複雑な作業になることがあります。多くの場合、スクリプトはさまざまな操作の集まりに過ぎません。ファイルを移動したり、何かをダウンロードしたり、プログラムをインス トールしたり、そういうことです。

スクリプトを作る

スクリプトを作成するのに必要なのは、テキストエディタだけです。簡単なテキストエディタであれば何でも構いません。複雑なものである必要はありませんし、包括的なものである必要もありません。ここでは、Geditというエディタを用いて、簡単な挨拶文のスクリプトを作成します。

Geditでスクリプトを作成し、開きます。

greetings.sh という名前のスクリプトを作成し、Gedit エディターで開いてください。このスクリプトの最初の部分は、前述したようにshebangです。これはスクリプトがインタープリタに、コードを理解するために何を使うべきかを伝えるためのものです。

#!/bin/bash

次に、コメントを書きましょう。これによって、スクリプトを使う人は誰でも、このコードが何を意味しているのかを理解できるようになります。コメントは # シンボルを置くことでスクリプトに追加することができます。これ以降はスクリプトに拾われません。

# 私の最初のLinuxスクリプト

シンプルな Hello World を表示する

出力を表示するには、bash の echo コマンドを使用します。もし、“Hello world” と出力したい場合は、以下のようなコマンドになります。

echo "ハローワールド"

スクリプトを実行可能にする

スクリプトを実行可能にするために、chmodコマンドを使用します。

chmod +x greetings.sh

この +x は、スクリプトファイルに実行権限を追加することを意味します。スクリプトを実行するには、スクリプト名を相対パスで呼び出します。

./greetings.sh

ユーザー入力の取得

ユーザーからの入力を受け取ることは、bashスクリプトの最も基本的な機能であり、bashの変数についての概念を持っている必要があります。変数とは、値を格納するストレージのようなものです。今回は、ユーザーの入力をbashの変数に保存しています。入力を行うには、ユーザーに質問をします。

echo -e "あなたの名前は何ですか: "

ユーザが自分の名前を入力したら、 inputname という bash 変数を使ってその入力を読み取ることができます。

echo -e "あなたの名前は何ですか: "
inputname を読み込む

変数名は自由につけることができますが、 echo コマンドの直後に read コマンドを追加することを忘れないようにしてください。

あいさつ文の印刷

格納されているユーザー名は inputname 変数です。ユーザーに挨拶をするために、再び echo コマンドを使用します。

echo "おはようございます $inputname"

ここでは、文字列の中の変数を表すために $ 記号を使用しています。スクリプトを保存して、./greetings.shコマンドで実行します。

これで、自分だけのグリーティングを作って、友達と共有することができます。

ファイル拡張子

スクリプトのファイル拡張子に差はありません。拡張子が”.sh “のファイル名を付けても、プログラムの実行方法にはほとんど影響を与えません。Bash スクリプトは、正しいコマンドと引数が存在する限り、ファイル拡張子なしでも - 空白のテキストファイルでも何でも - 実行されます。

Bashシェルがファイル拡張子を無視するとしても、スクリプト作成者がそうすべきなわけではありません。シェルスクリプトを起動時に実行するように設定できるデスクトップ環境の中には、スクリプトのファイル拡張子が正しい「.sh」であることに依存しているものがあります。これも整理整頓のために役立ちます。

結局のところ、ほとんどのシェルスクリプトは移植性のために「.sh」ファイルとして保存されます。この “sh “はBash自体とは関係なく、スクリプトは互換性のあるあらゆるシェルで実行できます。

また、スクリプトは .bash や .ksh (Unix korn shell) などで保存することもできます。これらのファイル拡張子は劣悪で、スクリプトの有用性を本当に制限してしまいます。これは、これらの拡張子を使用するシェルのためにのみ設計されているためです。

よくある質問

bash スクリプトを学ぶのは簡単ですか?

もしあなたがプログラミング言語に触れたことがあるなら、bash スクリプトはかなり簡単に思えるでしょう。変数やループなど、プログラミングの概念と同じです。しかし、もしあなたがプログラミングについて何も知らないのであれば、pythonから始めることをお勧めします。Pythonはとても簡単に学べますし、それでスクリプトを作ることもできます。

bash は学ぶ価値がありますか?

もし、あなたが毎日Linuxを運転していたり、仕事場でLinuxを使っているならば、bashスクリプトを学ぶべきでしょう。また、日々の作業を自動化するためにbashを学ぶのもよいでしょう。そうでなければ、ソフトウェア開発業界ではbashの使い道はないでしょう。

Windowsでbashスクリプトを学ぶにはどうしたらいいですか?

Windowsでbashを学ぶネイティブな方法はありませんが、Windows subsystem for Linux(WSL)を使って、Windowsマシン内でLinuxディストリビューションを実行し、それを使ってbashコマンドを実行することはできます。

画像引用:Unsplash. すべてのスクリーンショットはHrishikesh Pathakによるものです。

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。