非エンジニアのエンジニア道

非エンジニアからエンジニアに転向!その勉強の軌跡を載せていきます。

シェルスクリプト基本

ざっくり基本編ということで。
関数とか続きは、次回へ。

シェルスクリプト

複数の処理をまとめて行う(バッチ処理)ときに使われる、OSのシェルが直接解釈・処理できるスクリプト。
シェルとは、ユーザの操作を受け付けて、与えられた指示をOSの中核部分に伝えるソフトウェア。

基本

#! /bin/sh

1行目に書く


PARAM="string"
echo $PARAM
echo "PARAM ${PARAM}"

変数代入、参照
変数をセットする際に=の前後にはスペースをいれてはいけない


echo `date '+%Y-%m-%d'`

コマンドの場合、``で囲む


$#   引数の個数
$@   全引数リスト
$?   最後に実行したコマンドの戻り値
$0   ファイル名
$1~  第1引数~の値

特殊な変数


echo "a = `expr 5 + 5`"

計算する場合、exprコマンドを使用する


制御構造

if [ 条件式1 ]
then
     条件式1が真の時の処理
elif [ 条件式2 ]
then
     条件式2が真の時の処理
else
     すべての条件式が偽の時の処理
fi

[]の前後に半角スペースを入れる


case $a in
     *.txt)
          echo "テキストです"
          ;;
     *)
          echo "知らない"
          ;;
esac

;;でcase文を抜ける


for var in a b c
do
    echo $var
done

リストに対しての繰り返し


while [ 条件 ]
do
     コマンド
done

条件が真の場合、繰り返す


count=11
until [ $count -eq 0 ]
do
    count=`expr $count - 1`

    if [ `expr $count % 2` -ne 0 ]
    then
        continue 2
    else
        echo $count
    fi

    if [ $count -eq 4 ]
    then
        break 1
    fi
done

条件が偽の場合、繰り返す。continueとbreakも追加

比較

if文やwhile文などで使う


数値評価演算子 真になる場合
$a -eq $b 等しい
$a -ne $b 異なる
$a -gt $b $aより$bが大きい
$a -lt $b $aより$bが小さい
$a -ge $b $aが$bより大きいか等しい
$a -le $b $aが$bより小さいか等しい
文字列評価演算子 真になる場合
$s 長さが0より大きい
! $s 長さが0
$s = $t 等しい
$s != $t 等しくない
論理結合演算子 真になる場合
! hoge hogeが偽
hoge -a fuga hogeとfugaが真
hoge -o fuga hogeもしくはfugaが真
ファイルチェック演算子 真になる場合
-d $a ディレクトリ名
-f $a ファイル名
-L $a シンボリック
-r $a 読み取り可能ファイル
-w $a 書き込み可能ファイル
-x $a 実行可能ファイル
-s $a サイズが0より大きい
$a -nt $b $aが$bより新しい
$a -ot $b $aが$bより古い

勉強やりかけのものも、進めなければ…。