雰囲気でやる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.半々ぐらい?