#Tips
/bin/shを利用したTips
コマンドライン引数を利用したい場合に
getopts
example
while getopts "ab:" argument # 引数をargumentへ代入
# 付与された引数を検知し、以降の処理で判定、実行を行う
# オプションに引数を指定する倍位には":"を付与する
キーボード入力によって処理を中断したい場合に
trap
example
trap 'echo "EXIT"; exit' INT
# INTで検知するシグナルを指定する
# kill -l にてシグナルの一覧を閲覧できる
入力値を表示しないようにする
stty
example
stty -echo # 入力値非表示化
read pswd
stty echo # 入力値表示化
キーバッファを行わない
stty
example
stty raw # キーバッファ無効化
# y/n制御時の利用が例として挙げられる
カレンダー機能
dialog --calendar
example
dialog --calendar "select date" 2 60 2> test.tmp
デフォルト値の判定
:= :?
example
cp file ${EXAMPLE:=/tmp}
# 変数が存在しない、もしくは、空だった場合に/tmpへファイルがコピーされる
: ${EXAMPLE:=/tmp}
# 処理の先頭での初期化に利用できる
: ${EXAMPLE:? 未定義変数}
# 変数が存在しない、もしくは、空だった場合に、文言を出力
値がint(整数)か判断
test
example
test $1 -eq 0 2>/dev/null
echo $? #0 or 1 or 2
# 0 = 0が渡されている場合。
# 1 = 0以外の整数が渡されている場合
# 2 = int以外が渡されている場合
ファイルが存在する時だけ、外部ファイルを読み込む
[ -f ]
example
[ -f ./funcs.sh ] && . ./funcs.sh
# []はtestを省略した形
未定義変数をエラーとして扱う
set -u
example
set -u
$EXAMPLE # エラーとして出力される
# バグを防ぐ、ひとつの方法として挙げられる
# コマンドライン引数を複数扱う場合には、エラーが発生する可能性が高くなるので注意が必要
実行ユーザによって影響されないモジュールの記述方法
dirname
example
cd "$(dirname "$0")"
# 絶対パス、相対パス、どちらの実行にも対応することができる
# 絶対パス記述でもよいが、運用保守がめんどうになる
コマンドライン引数の上限を超えて扱う
xargs
example
find ./ -name "*.txt" -print | xargs grep "example" /dev/null
example
example
example