Linuxシェルの基礎とシェルスクリプト入門のポイント – パートI
百聞は一見に如かず——以下の図を見れば、Linuxの仕組みがひと目でわかります。
関連記事
- シェルプログラミングを学べる5つのシェルスクリプト – パートII
- Linux BASHスクリプティングの世界を旅する – パートIII
Linuxシェルの基礎用語
- シェル(Shell): ユーザーとオペレーティングシステム(OS)をつなぐコマンドラインインタプリタ。コマンドの実行や、テキスト形式のスクリプト作成が可能です。
- プロセス(Process): ユーザーがシステム上で実行するあらゆるタスクのこと。単なる「タスク」より少し複雑な概念です。
- ファイル(File): ハードディスク(HDD)上に存在し、特定のユーザーが所有するデータの集合です。
- Xウィンドウ(X-windows): Linuxの動作モードの一つで、画面(モニター)を「ウィンドウ」と呼ばれる小さな領域に分割できます。複数の作業を同時に進めたり、タスクを簡単に切り替えたり、グラフィックスを快適に表示したりできるのが特徴です。
- テキスト端末(Text terminal): テキスト表示のみに対応したモニターで、グラフィック表示機能を持たないか、ごく基本的なものしかありません。
- セッション(Session): システムにログオンしてからログアウトするまでの時間のことです。
標準的なLinuxディストリビューションで使われるシェルの種類
Bourneシェル(sh): 初期のUNIXで広く使われ、事実上の標準となったシェルです。ベル研究所(Bell Labs)のStephen Bourne氏によって開発されました。すべてのUnix系システムには、少なくとも1つBourneシェルと互換性のあるシェルが搭載されています。プログラム名は「sh」で、通常はファイルシステム階層の/bin/shに配置されています。
Cシェル(csh): Bill Joy氏がBerkeley Software Distribution(BSD)向けに開発したシェルです。構文はC言語をモデルとしており、主に対話型の端末操作向けに使われます。スクリプトやOS制御にはあまり向いていませんが、対話的に使えるコマンドが豊富なのが強みです。
さあ、始めよう!(Linuxシェル)
コマンドラインで使えるコマンドは数千種類あります。そのすべてを覚えるのは……無理ですよね。コンピュータの真価は作業を楽にすることにこそあります。処理を自動化するためには、スクリプトが必要になります。
スクリプトとは、コマンドの集まりをファイルに保存したものです。シェルはこのファイルを読み込み、キーボードから入力されたかのようにコマンドを順番に実行します。さらにシェルには、スクリプトを強力にするための便利なプログラミング機能が多数用意されています。
シェルプログラミングの基本
- Linuxシェルを使うには、まずターミナルを起動します。
- 現在使用中のシェルを確認するには、echo $SHELL を実行します。
- Linuxでは、ドル記号($)はシェル変数を表します。
- 「echo」コマンドは、指定した文字列をそのまま出力します。
- 複数のコマンドをつなげたいときは、パイプ(|)が活躍します。
- Linuxのコマンドにはそれぞれ固有の構文があり、Linuxはミスを許しません。ただし、コマンドを間違えても壊れたり故障したりするわけではなく、単に動作しないだけなので安心してください。
- #!/bin/sh —— これは「シバン(shebang)」と呼ばれます。シェルスクリプトの先頭に記述し、プログラム/bin/shへの指示を渡す役割を担います。
シェルスクリプトとは
シェルスクリプトとは、拡張子「.sh」を持つシンプルなテキストファイルで、実行権限が付与されているものです。
スクリプトの作成と実行の手順
- ターミナルを開きます。
- 「cd」コマンドで、スクリプトを作成したいディレクトリへ移動します。
- cd(Enter)—— プロンプトがホームディレクトリに移動します。
- touch hello.sh —— ここではスクリプト名を「hello」としました。「.sh」拡張子は必須なので忘れずに。
- vi hello.sh(または nano hello.sh)—— お好みのエディタで編集できます。
- chmod 744 hello.sh —— スクリプトに実行権限を付与します。
- sh hello.sh または ./hello.sh —— スクリプトを実行します。
最初のスクリプトを書いてみよう
#!/bin/bash # My first script echo "Hello World!"
上記のコードをテキストファイルに保存し、実行権限を付けて、前述の手順どおりに実行してください。
実行結果の例
Hello World!
上記コードの解説:
#!/bin/bash(シバン) # My first script(コメント。「#」以降はすべてコメント) echo "Hello World!"(このスクリプトのメイン部分)
2つ目のスクリプトを書いてみよう
次のスクリプトでは、あなたの「ユーザー名」を表示し、現在実行中のプロセス一覧を出力します。
#! /bin/bash echo "Hello $USER" echo "Hey i am" $USER "and will be telling you about the current processes" echo "Running processes List" ps
上記のコードを含むファイルを作成し、任意の名前で保存します(拡張子は「.sh」に)。実行権限を付けたら、ターミナルから実行してみましょう。
実行結果の例
Hello tecmint Hey i am tecmint and will be telling you about the current processes Running processes List PID TTY TIME CMD 1111 pts/0 00:00:00 bash 1287 pts/0 00:00:00 sh 1288 pts/0 00:00:00 ps
面白いと思いませんか? スクリプトを書くのは、アイデアを思いついて、パイプでつないだコマンドを書くのと同じくらいシンプルです。もちろん制約もあります。シェルスクリプトは、簡潔なファイルシステム操作や、既存のフィルタ・コマンドラインツールをパイプで組み合わせる処理に最適です。
しかし、機能性・堅牢性・パフォーマンス・効率など、より高度な要件が必要になった場合は、本格的なプログラミング言語への移行を検討するとよいでしょう。
C/Perl/Pythonなどのプログラミング言語の経験があれば、スクリプト言語の習得はそれほど難しくないはずです。
3つ目のスクリプトを書いてみよう
最後に紹介するのは、今回の記事で扱う3つ目のスクリプトです。これはユーザーとのやり取りを行う対話型(interactive)スクリプトになっています。ぜひ自分の手で実行して、その感触を確かめてみてください。
#! /bin/bash echo "Hey what's Your First Name?"; read a; echo "welcome Mr./Mrs. $a, would you like to tell us, Your Last Name"; read b; echo "Thanks Mr./Mrs. $a $b for telling us your name"; echo "*******************" echo "Mr./Mrs. $b, it's time to say you good bye"
実行結果の例
Hey what's Your First Name? Avishek welcome Mr./Mrs. Avishek, would you like to tell us, Your Last Name Kumar Thanks Mr./Mrs. Avishek Kumar for telling us your name ****************************************************** Mr./Mrs. Kumar, it's time to say you good bye
以上で終わりではありません。今回はシェルスクリプティングのほんの入り口をご紹介しました。今後の記事では、奥深く終わりのないテーマであるシェルスクリプトについて、さらに詳しく掘り下げていく予定です。コメント欄での貴重なご意見をお待ちしています。いいね!やシェアで、ぜひ記事の拡散にご協力ください。それではまた次回、お楽しみに!
関連記事: シェルプログラミングを学べる5つのシェルスクリプト – パートII
-
OS X 31日間のヒント:AutomatorとシェルスクリプトでMacのファイルを自動クリーンアップ
月も終わりに近づいてきたので、今回は少し上級者向けのMacテクニックをご紹介します。Automatorを使って週に一度シェルスクリプトを実行するようスケジュール設定し、Macのゴミ箱とダウンロードフォルダを自動的に整理する方法です。 難しそうに聞こえるかもしれませんが、心配はいりません。必要なのはほんの少しの時間だけです。 このスクリプトができること このスクリプトは主に2つの役割を果たします。 ゴミ箱を毎週自動で空にする——ベテランのMacユーザーでも意外と忘れがちな作業です。 ダウンロードフォルダのファイルを別フォルダへアーカイブ——あとで必要になったときのために、ファイルを退避させて
-
実用的な5つの例で学ぶBashスクリプト入門チュートリアル
Unix SedやUnix Awkシリーズと同様に、本シリーズではBashスクリプティングに関する記事を複数回にわたって公開します。実用的なサンプルを交えながら、Bashスクリプティングのテクニックを幅広く解説していきます。 シェルとは、ユーザーが入力したコマンドを解釈して実行するプログラムです。コマンドはユーザーが直接入力するか、「シェルスクリプト」と呼ばれるファイルから読み込まれます。 ユーザーからの入力を直接読み取る場合、そのシェルは対話型(インタラクティブ)シェルと呼ばれます。 一方、ファイルからコマンドを読み込んで実行する場合は非対話型(ノンインタラクティブ)シェルと呼ばれます。この