PR

Bashやコマンドってサーバ構築の時しか触らないから忘れちゃうよね!?Bash(ShellScript)の備忘録

プログラミング

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

コメント

タイトルとURLをコピーしました