作業効率が何倍もアップ!! スクリプトの使い方を覚えましょう

スクリプトの使い方を覚えましょう

 

シェルスクリプトとは?

シェルスクリプトとは、UNIX/Linuxのコマンドの手続きを1つのファイルに記述したものです。
シェルスクリプトに複数の処理を記述して、大量の作業を一気に実行させ自動化する事ができます。

UNIX/Linuxのシェルとカーネルとは? 参照

シェルの種類
B系シェルとC系シェルがよく使われていますが、このサイトでは、Ubuntuで多く使われているB系シェルのshスクリプトで作業を行います。

あるディレクトリにある、拡張子が「.txt」のファイルを一度に utf-8コードに変換し、上書きするスクリプト

#!/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}