UnixやLinuxを使う場合には、常日頃からシェルスクリプトを書いていましたが、今となっては新しくサーバを構築する際にしか必要としなくなってしまいました。
使わないと人は忘れてしまう生き物。
いざって時に調べて歩くのは大変なので基本的な構文を備忘録として残しておきたいと思います。
シバン(shebang)
スクリプトファイルの先頭行に記載する「#!」から始まる行のこと。
#!/bin/bash
先頭行にシバンを記載することで、使用するインタプリタを指定することが出来ます。
シェルには、たくさんの種類があり、それぞれ構文も異なります。
シバンを活用して、覚えるシェルは極力減らしたいところです。
For文
for x in $(コマンド)
do
echo "$x"
done
コマンドの部分には、Linuxコマンドを記載することが出来ます。
例えば
for x in $(ls)
のように記載すれば、lsコマンドで取得できるカレントディレクトリのファイルを順に処理することが出来ます。
連番でループさせる
1~10まで順番に処理したい場合は、以下のようにします。
for x in $(seq 1 10)
do
echo "$x"
done
ちなみに、seqコマンドは、引数を3つ指定すると、ステップ数を指定することが出来ます。
for x in $(seq 1 2 10)
この場合は、【1, 3, 5, 7, 9】の奇数が取得出来ます。
While文
私の場合、使う場面は限られていてファイルを1行ずつ読み込む場合に使用します。
while read line
do
echo "$line"
done < sample.txt
このような書き方をすると、sample.txtを1行ずつ読み込んで変数lineに文字列が格納されます。
文字列の連結
変数とリテラルを連結する方法です。
頭では理解しているものの毎回確認しているので残しておきます。
STR1="Step"
STR2=1
echo "This blog name is ${STR1}${STR2}"
出力
This blog name is Step1
変数は、$STR1 と{}無しでも記載することは出来ます。しかし、リテラルと連結したい場合、下のように記載するとひと繋ぎに解釈されてしまうため{}を付けて区切るクセを付けておくと良いです。
$STR1-2
文字列の分割
スペース区切りの文字列は、簡単に分割することが出来ます。
STR="Apple Orange Lemon"
FRUIT=(${STR})
文字列を括弧で括るだけ。
echo FRUIT[0]
# Apple
echo FRUIT[1]
# Orange
echo FRUIT[2]
# Lemon
配列
配列を定義する場合、以下のように記載する。
SHOPS=('十条' '赤羽' '江戸川橋')
二次元配列(もどき)
二次元配列を宣言することは出来ないので、1行の文字列として定義することで二次元配列もどきを作ることが出来る。
SHOPS=(
"十条 TEL1 ADDRESS1"
"赤羽 TEL2 ADDRESS2"
"江戸川橋 TEL3 ADDRESS3"
)
データを取り出すには、次のようにします。
for data in "${SHOPS[@]}"
do
shop=(${data})
SHOP_ID=${shop[0]}
echo ${SHOP_ID}
done
ポイント①
配列を展開する際には、${SHOPS[@]} を ” (ダブルクォーテーション)で括る必要があります。
ポイント②
スペース区切りの文字列を配列として展開するには、${data[@]} を括弧で括る必要があります。
ポイント③
配列の各要素には、要素番号(${shop[0]})で参照することが出来ます。
環境変数
環境変数はシェルスクリプトからでも参照可能です。
echo $PATH
環境変数を設定する場合は、exportを付けます。
環境変数PATHにホームディレクトリのbinディレクトリを追加する場合は以下のように設定します。
export PATH=$PATH:~/bin
コメント