LinuxProgram学習

ShellScriptの基本(変数/配列/if/forなど)

Linux

AWS上でInfrastructure as Codeをやっていると、やたらとShell Scriptを使うことがあります。 Cloud FormationでUserDataでセットアップするときが多いです。

やはり、何も追加でインストールしなくても利用できるというのは相当なメリットがありますので、複雑なものでなければシェルスクリプトを利用しています。

ただ、結構ShellScriptはクセが強いので、記載方法などをミスることが多いです。 自分用のメモとなります。

1.1. 宣言の記載方法

1.1.1. 通常

#!/bin/sh

1.1.2. デバック(-x -v -i)

  • 実行直前のコマンド行を表示し、変更値を表示する
#!/bin/sh -x
  • 実行するコマンド行を表示する(-v -i)
#!/bin/sh -vi

1.1.3. シェルスクリプトを実行せずに構文チェックのみする(-n)

  • 実行する際につけるオプション
/bin/sh -n sample.sh

1.2. シェルスクリプトの変数

  • 変数への値の設定
変数名=値
user=testuser
  • 表示する方法
echo ${user}
testuser

1.3. シェルスクリプトの配列

1.3.1. 配列に値を設定する

  • 一度に値を入れる方法
配列名=(値1 値2 値3)
array=("aaa" "bbb" "ccc")
  • 表示する方法
echo $array

// すべての内容を表示
echo ${array[@]}
aaa bbb ccc

1.3.2. 配列に値を設定する(後で追加する)

  • 配列を1行で記載できるけど見づらい場合にも利用します
array=("aaa" "bbb" "ccc")
array+=("ddd")

echo ${array[@]}
aaa bbb ccc ddd
  • 注意) array+="ddd"のようにカッコがない場合には先頭文字列と結合されるのでちゅい(今回の場合はaaadddになります)

1.4. シェルスクリプトのif文

  • 鍵カッコの後の空白とかをミスりやすいので注意

1.4.1. 変数が文字列と一致しているかどうか

if [ ${status_code} != "200" ] ; then
    echo "status code is not 200 = [$status_code]"
    exit 0
  fi
  echo "status code is 200 = [$status_code]"

1.4.2. 変数が存在するかどうか

if [ -z ${status_code} ] ; then
  echo "can't get status_code"
  exit 0
fi

1.4.3. ファイルのサイズが一致しているかどうか

size01=$(wc -c <file> | awk '{print $1}')
size02=$(wc -c <file> | awk '{print $1}')
if [ ${size01} -eq ${size02} ] ; then
    echo "match file size !!  ${size01} : ${size02}"
    exit 0
fi

1.5. シェルスクリプトのfor文

  • 使いかた
for 変数 in 値リスト
do
  処理
done

1.5.1. 配列をforで回してみる

array=("aaa" "bbb" "ccc")
for v in ${array[@]}
do
  echo ${v}
done

1.6. その他

1.6.1. timestampの取得

timestamp=$(date "+%s") 

// YYYYmmDDHHMMSS
timestamp=$(date "+%Y%m%d%H%M%S")

Pythonのオススメ勉強方法

私がオススメするPython初心者向けの最初に購入すべき書籍は「シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全です。

シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全

この書籍は実際にシリコンバレーの一流エンジニアとして活躍している酒井潤さんが書いた本です。

内容も初心者から上級者までまとめられており、各Lessonも長すぎずに分かりやすくまとめられているので、初心者の方にもおすすめです。

シリコンバレー一流プログラマーが教える Pythonプロフェッショナル大全

今回は以上となります。

コメント

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