スクリプトの使い方を覚えましょう
シェルスクリプトとは?
シェルスクリプトとは、UNIX/Linuxのコマンドの手続きを1つのファイルに記述したものです。
シェルスクリプトに複数の処理を記述して、大量の作業を一気に実行させ自動化する事ができます。
シェルの種類
B系シェルとC系シェルがよく使われていますが、このサイトでは、Ubuntuで多く使われているB系シェルのshスクリプトで作業を行います。
#!/bin/sh
for f in *.txt
do
nkf -w -Lu --overwrite $f
done
このファイルがシェルスクリプトであることをUNIX/Linuxに伝えるために最初の1行目に
#!/bisn/sh
と書きます。(この場合Bシェル[ sh ] を使うと宣言しています。)
シェルスクリプトを書いてみよう
端末エミュレータに「 Hello Wold!! 」と表示させる。
#!/bin/sh
echo "Hello World!!"
端末エミュレータ上で viエディタ( → linuxのエディタ vi 参照)などを使い上記のようなテキストファイルを作成します。
今回は、hello.sh という名前で保存します。
hello.sh に chmod 755 hello.sh で実行権限を付加します。( → パーミッションの記事を参照 )
端末エミュレータ上で、 ./hello.sh または sh hello.sh と入力してシェルスクリプトを実行します。
シェルスクリプト for do done の使い方を覚えましょう
あるディレクトリにある、拡張子が「.txt」のファイルを一度に utf-8コードに変換し、上書きするスクリプトの解説
for 変数 in リスト
do
処理;
done
for は繰り返しの制御文。
シェルスクリプト制御構文
- if
処理を条件分岐させる
if [ 条件文 ]
then
実行処理
elif [ 条件文 ]
then
実行処理
else
実行処理
fi - case
変数の値によって複数列挙された条件分岐を行うcase 変数 in
条件文) 実行処理;;
条件文) 実行処理;;
条件文 | 条件文) 実行処理;;
*) 実行処理;; ← 全ての条件文にもあてはまらない場合
esac - for
指定回数処理を繰り返し(ループ)実行するfor 変数 in 引数1 引数2 …
do
実行処理
done処理を途中で中断してループを抜けたい場合は「break」、ループの先頭に戻りたい場合は「continue」を使用。
- while
条件が真である限り、繰り返し(ループ)処理while [ 条件文 ]
do
実行処理
done処理を途中で中断してループを抜けたい場合は「break」、ループの先頭に戻りたい場合は「continue」を使用。
- until
条件が偽である限り、繰り返し処理を実行until [ 条件文 ]
do
実行処理
done処理を途中で中断してループを抜けたい場合は「break」、ループの先頭に戻りたい場合は「continue」を使用。
シェルスクリプトの変数
数名に使える文字は、英数字または「 _ 」(アンダーバー)です。 数名の大文字と小文字は区別されます。 頭1文字目に数字は使えません。 |
数に値を代入するには「変数名=値」とします。 |
「= 」の前後にはスペースやタブを入れることはできません。 |
数を参照するには、変数名の前に「$」を付けます。 |
シェルスクリプトの特殊変数
$$ | 自プロセス(シェル)のPID(プロセスID) |
$! | シェルが最後に実行したバックグラウンドプロセスのPID |
$? | 最後に実行したコマンドの終了コード(戻り値) |
$* | 全引数リスト。「”$*”」と記述すると、全引数を一つにまとめた文字列として展開します。つまり、「”$1 |
$@ | 全引数リスト。「”$@”」と記述すると、それぞれの引数を個別にダブルクォートで囲んで展開します。つまり、「”$1″ |
$# | シェルに与えられた引数の個数 |
$0 | 第0引数です。シェルスクリプトのファイル名となります。 |
$1~$n | シェルに与えられた引数の値。$1は第1引数、$2は第2引数…となります。 |
変数の代入と参照
変数に値を代入する際の「”」ダブルクォートの有無は、変数を参照する際には同じになります。 |
変数参照で文字列と変数を区別するためには、変数名を「{ }」で囲みます。 |
コマンドの結果を変数に格納する場合は、「``」でコマンド部分を囲みます。 kyou=`date` echo ${kyou} |