Lから始まるLinux

2章68話
その他のコマンド
3章1話 シェルスクリプト
もくじ
3章2話
コメント
シェルスクリプト
若木 みどり
お兄ちゃん! この前作った 「おみくじ」なんだけど 時々使いたくなるんだよね! これをコマンドみたいに 簡単に実行できないかな?
cat << EOF | shuf | head -n 1
大吉
中吉
中吉
小吉
小吉
小吉
吉
吉
吉
吉
EOF
若木 しげる
できるよ!今回は「シェルスクリプト(shell script)」を学ぼう!以降、単に「スクリプト(script)」と呼ぶよ
若木 みどり(驚き)
おおっ!なんだか凄そうな名前だね!
「対話的」「非対話的」
若木 しげる
最初に「対話的(interactive)」「非対話的(non-interactive)」を覚えよう!
若木 みどり
「対話的」って…なんだろう?
若木 しげる
今までみどりがやってきたようにシェルにコマンドを打ち込むとシェルが実行してプロンプトを返してくれるこれを「対話的」と言うんだよ
若木 みどり
なるほど!確かにシェルと「対話」しているような感じだったよね
若木 しげる
一方「非対話的」と言う操作もあるんだこれは事前にやりたいことをテキストファイルにまとめてそれをシェルに解釈してもらうやり方だよ
若木 みどり
コマンドを1つずつ入力するのではなくてあらかじめやって欲しいことをまとめて書いてそれをシェルに全部お願いするような感じ?
若木 しげる
そうそう!例えるならレストランで注文票を渡して料理ができるまで待っているようなものだねその注文票にあたるのが「シェルスクリプト」なんだ
若木 みどり
だから「スクリプト(script)」つまり「台本」「手順書」などの意味なんだね!
シェルスクリプト作成
若木 しげる
早速おみくじをシェルスクリプトにしてみよう!まずは omikuji ファイルを編集しよう
vim omikuji
若木 みどり
このファイルにスクリプトを書くんだね内容はどうすればよいのかな?
若木 しげる
内容は以下のとおりだよ
#!/bin/bash
cat << EOF | shuf | head -n 1
大吉
中吉
中吉
小吉
小吉
小吉
吉
吉
吉
吉
EOF
若木 みどり
1行目以外は以前書いたものと同じだね!
若木 みどり
この最初の1行目に見慣れない記述があるけど…これは何なのかな?
若木 しげる
これは「シェバン(shebang)」という記述だよ1行目の #! の後の実行ファイルで2行目以降の内容を実行するように指定しているんだ
若木 みどり
1行目は「このプログラムで実行して下さい」と教える目印なんだ!
若木 みどり(笑顔)
シェル /bin/bash解釈してもらうから「シェルスクリプト」なんだね!
シェルスクリプトを実行可能にする
若木 しげる
次にこの omikuji ファイルを実行可能にするよパーミッションの実行権限のことを覚えているかな?
若木 みどり
うん、覚えているよ!こうすればいいんだよね?
chmod a+x omikuji
若木 しげる
そのとおり!実行後は ls -l で確認しよう!
ls -l
若木 みどり
実行権限(x)が付いていればいいんだね!
-rwxr-xr-x 1 midori midori 104 Jan  3 19:10 omikuji
若木 みどり
パーミッションはrwxr-xr-x だから…ちゃんと実行権限が付いているね!
シェルスクリプトを実行する
若木 みどり
よし!早速実行しよう!
omikuji
若木 みどり
日頃の行いが良いから「大吉」かな?
/bin/bash: omikuji: command not found
若木 みどり(驚き)
…あれ?「コマンドが見つからない」って意味だよね?ちゃんと実行可能にしたのに?
若木 しげる
これは PATH 変数の問題だね
若木 みどり
PATH 変数の値はコマンドを探す場所を「コロン(:)」区切りで指定したものだよね?
若木 しげる
そうだよコマンドは PATH 変数の値で決められた場所から探すんだ指定の場所に無いとコマンドとしては実行されないよ
若木 みどり
じゃあこれからどうすればいいんだろう?
若木 しげる
PATH 変数に含まれないディレクトリにあるスクリプトでも実行できるよスクリプトのパスを指定するんだ以下のようにしてみよう
./omikuji
若木 みどり
ええっと….「ワーキングディレクトリ」すなわち今私がいるディレクトリだよね?
若木 しげる
そうそう!./omikuji「現在のディレクトリにある omikuji」を実行するという意味になるんだこれでスクリプトをパスで指定したことになるよ!
若木 みどり
なるほど!じゃあやってみるね!
大吉
若木 みどり(笑顔)
おおっ!動いた動いた!
若木 しげる
いいね!これでおみくじスクリプトが完成したね!
まとめ
若木 みどり
今回はシェルスクリプトを書いて実行したよ!
  1. スクリプトの1行目にシェバン、2行目以降にコマンドを書く
  2. スクリプトに実行権限を与える
  3. ./スクリプト でスクリプトを実行する
若木 しげる
お気に入りの操作はシェルスクリプトにしよう!ファイルだから無くなることはないよ!