はじめに
【自己紹介】インフラ歴4年半のシステムエンジニア。LinuC Level3 所持。
はじめて仕事でシェルスクリプトを作る人に「とりあえず、これを読んでおいて」という読み物を作りたいと思い、このページを書きました。
現場ですぐに使えるテクニックも織り交ぜつつ解説してみました。
目次
1. はじめに
2. とりあえず書こう
3. なんだかんだで便利なviさん
4. 恒例の儀式をおこなう
5. #!/bin/bash ってなにもの?
6. スクリプトの保存と実行するための権限付与
7. シェルの実行とコマンド入力の効率化
8. 現場で使う重要コマンド echo $?
9. おわりに
とりあえず書こう
シェルスクリプトもプログラミングの一種なので、他の言語と同様、一度実行すれば処理が走って結果がでます。
とりあえず、書いて動かして徐々に慣れる。そうしたら自然にLinuxコマンドも覚えている。そういう構成でこのシリーズを書いていきたいなと考えています。
なんだかんだで便利なviさん
普通のエディタと比べれば、「慣れないとちと扱いづらい」viさん。
ただ、慣れればLinuxでの作業はだいぶ捗る。ちょっとした修正もすぐに行える。
あと、テキストエディタが使えない環境で、ドキュメントを修正しなければならない場面は、インフラ屋さんならほぼ必ずやってくると思います。その時あたふたするのはカッコ悪い(新人の頃の私です 笑)
エンジニアしてる感も味わえ、モチベも上がると思うので、ここではviを使ってシェルを書いていきます。迷いなく扱えるように進めますので安心してください!
恒例の儀式をおこなう
どんな言語でもまず始めに行うのはそう、Hello Worldの出力。
しかし、Hello Worldと侮るなかれ。
このシェルを書いて実行するだけでも、現場で即役に立つノウハウが沢山あるのだ。
ではさっそくviコマンドを実行しよう。
画面に以下のように入力したらEnterを入力します。
するとこのような画面になります。
現在はコマンドモードと呼ばれる状態です。viでコードを書いていくには、この状態からキーボードの「 i 」を入力します。すると画面の下に「挿入」と表示されます。
そうすると、文字入力が行えます。そのまま#!/bin/bash と入力し、
終わったらEnterキー、次にecho "Hello World"と書いていきます。
#!/bin/bash ってなにもの?
一行目に #!/bin/bash というコードを書きましたが、これはシバンと呼ばれるものです。
こいつが一体何者かというと、「このシェルスクリプトはbashを使って動かします!」という宣言をしているものです。シェルには色々種類があり、bashの他にもsh、csh、tcsh、ksh、zshなどがあります。
これらの分類は、プログラミング言語を例にするとCとかJavaとかpythonなどに近いものです。
ここでは、もっとも一般的に使われるbashでスクリプトを実行するよう設定しています。はじめのうちは、シェルの一番最初の行に必ず書くものだと覚えておけば問題ありません。
二行目に書いた echo は文字列をコンソールに出力するというシンプルなコマンドです。
しかし、echoというのはそれ以外にも色々な用途で使用するとても重要なコマンドです。その一例は後述する 8. 現場で使う重要コマンド echo $? に記載しています。
スクリプトの保存と実行するための権限付与
では、キーボードの「Esc」を入力し、コマンドモードにした後、「:wq!」と入力してみましょう。
「:」はテキストを保存するか閉じる際に最初に書く記号で、「w」は保存、「q」はエディターを閉じるという意味です。
:wq!が入力できない場合はShiftキーを押しながら「zz」を押すと同じ意味の操作となります。
昔、本番環境で:wq!が使えなくなるトラブルがあり、Shift + zzで事なきを得たという場面がありました。覚えておいて損はない知識です。
入力できたらEnterキーを入力します。これでファイルの保存は完了です。
元の画面に戻ったら ls -l を入力しEnterキーを入力します。
hello.shができていますね!
ただこのままでは実行権限が無いのでシェルを動かすことができません。
権限とは画面の左端にある、これのことです。
-rw-rw-r--
ここに「x」がついていないと、シェルスクリプトが実行できません。
スクリプトに権限をつけるためにはchmodというコマンドを使います。
これをコンソールで実行してみましょう。
chmod u+x hello.sh
実行できたら再びls -l を入力します。
今度は実行権限がついています。
-rwxrw-r--
これではれてコマンドが実行できる訳です。
余談ですがジョブにシェルを登録して実行を自動化したのになぜか動かない。。という時に、「実は権限がついていませんでした」というオチはあるあるなので、シェルが動かないトラブルが起きた際は、まず権限を確認してみましょう。
シェルの実行とコマンド入力の効率化
権限もついたことなので、作ったシェルを実行してみます。
./hel
小ネタですが、この状態でTabボタンを入力すると、
./hello.sh
入力結果を予測してLinuxが文字を入力してくれます。
この機能はファイルやディレクトリ、全てに有効です。
覚えるとLinux操作が劇的に快適になります。
ただし、似たような名前のファイルやディレクトリがあると、一発で予測入力してくれないので注意が必要です。
では、Enterを入力です。
これでHello Worldシェルスクリプトは完成です!
現場で使う重要コマンド echo $?
シェルスクリプトのコマンドが成功したら、次のコマンドを入力してみて下さい。
echo $?
実行すると
「0」と表示されます。
この「0」という数字はコマンドやシェルの実行が成功していることを意味します。
失敗していると「0」以外の数字が出力されます。
試しにファイルの内容を確認するコマンド「cat」で存在しないファイルを開けようとしてみます。
そうするとエラーが表示されますので、その後 echo $? と入力すると以下のような結果となります。
このecho $? はシェルスクリプト作成において非常に重要なコマンドです。
シェルスクリプトの中で、処理が失敗した時の判定にはこのコマンドを使用します。
そのことを知っているだけで、現場でシェル作成をする際の困りごとがひとつ減る訳です。
大事なことなのでもう一度言いますが、このコマンドは超重要です。必ず覚えましょう。
おわりに
いかがだったでしょうか。
Hello Worldスクリプトを作成するだけでも伝えたいことが山程あり、これでも情報をだいぶ削っています。
評判がよければ、今度は引数とif文を使った処理の実装について書きたいなと思っています。この記事がいいなと思ったら、GOODボタンで応援お願いします!