雰囲気でやるbash script(シェルスクリプト) 

3月 16日 @ 22:00 ~ 23:00 講演者:uturned

資料

音声データ

https://drive.google.com/open?id=1Gkv-7jd_i2M2SIwok_hLIc34LzO49tLa 

bash scriptってなに?

何ができるの?

  • 定期処理の自動実行など

どう便利なの?

  • どのOSでも使える
  • インストール作業不要
    • (追加インストールにうるさい現場でも安心)

何に使ってるの? zabbixで使いまくり

書き方の基礎

shebang

#!/bin/bash

bash-scriptであることを示すため最初に記述します

変数の使い方

script.sh

#!/bin/bash MYDATE="zzzzzzzzz zzzzzzzzzzzzz" echo $MYDATE MYDATE_DUBBLE="$MYDATE" MYDATE_SINGLE='$MYDATE' echo MYDATE_DUBBLE=$MYDATE_DUBBLE echo MYDATE_SINGLE=$MYDATE_SINGLE

script.sh の実行

[root@cent70 infra]# bash script.sh

script.sh の実行結果

zzzzzzzzz zzzzzzzzzzzzz MYDATE_DUBBLE=zzzzzzzzz zzzzzzzzzzzzz MYDATE_SINGLE=$MYDATE

ワンライナー

date; date; date #dateが3回実行される

if 文

if [[ $VAR -eq 2 ]] ; then echo 2 desu # VARが2の時の処理 elif [[ $VAR -eq 1 ]]; then echo 1 desu # 1の時の処理 else echo else desu # 2でも1でもないときの処理 fi

for 文

for i in $VAR # VARの中にあるものを1つずつiに入れる do echo "FOR: $i" done

exitコード

[root@cent70 infra]# pwd /tmp/infra [root@cent70 infra]# echo $?  #直前の実行結果を返す 0

コマンド成功時には0 失敗時には1 (コマンドによっては0以外)

[root@cent70 infra]# sonnnakomanndonai -bash: sonnnakomanndonai: command not found [root@cent70 infra]# echo $? 127

引数

script.sh

#!/bin/bash echo $1

script.sh の実行結果

[root@cent70 infra]# bash script.sh [root@cent70 infra]# bash script.sh aaa aaa [root@cent70 infra]# bash script.sh zzz zzz [root@cent70 infra]#

scriptのinclude

script.sh

#!/bin/bash echo A=$A echo B=$B . default.sh echo A=$A echo B=$B

default.sh

#!/bin/bash echo loading default values... A=1 B=2

script.sh の実行結果

A= B= loading default values... A=1 B=2

shebangとは

ファイル名単体で呼び出した時に使われる

bashの絶対パス

#!/bin/bash

envを指定

#!/usr/bin/env bash
[root@cent70 infra]# python script.sh File "script.sh", line 3 echo A=$A ^ SyntaxError: invalid syntax

聴講者の声

最近はちゃんとシェル名で拡張子付けようって風潮が強くなってきてますね。bashなら.bash

ワンライナー接続方法には ; , && , || がありますが、「論理演算ではなく、前後関係なくただ接続する」のは ; ですかねー。

スクリプトも「コマンドと一緒」とみなされるので、そのスクリプト自体が「終了ステータス」を返すことができて、それは exit 数値 で書けます…ですかね。

. と コマンドを 半スペで離すのが重要ごとです!

本来の意味的には「スクリプトを継続したままで、外のスクリプトも陸続きに実行する」だったりする(scriptのinclude)

bash -vx でスクリプト実行のトレースができます

  • シェルスクリプトのデバッグに役立つbashのオプション
    • -x : 処理を愚直に書き出す(デバッグ)的な?
    • -v : ソースコードを表示させます
    • -u : 未定義の変数があればエラーを返す
    • -n : 文法チェック
  • シェルスクリプト内でオプションを切り替えたい場合の例
    set -x #ここから #トレースしたい処理 set +x #ここまで

Q & A

  • Q.皆さん. と sourceどっち使ってるんです?
    • A.半々ぐらい?