スニペット
公開日:
更新日:
環境変数$PATHの後にパス追加
export PATH="$PATH:追加したいパスA:追加したいパスB"
$PATH変数の前にパス追加
PATH="pathA:pathB${PATH+:}${PATH-}"
${PATH+:}
: $PATH
が定義されていたら:
${PATH-}
: $PATH
が定義されていたら$PATH
シェル変数の展開書式[1]
${var}
の動作についての補足.
基本以下の条件が当てはまらないときは, $var
が読まれる.
書式 | 条件と動作 |
---|---|
${var-word} | 変数$var が未定義の場合, 文字列"word"が読みだされる. |
${var:-word} | 変数$var が未定義か空文字の場合, 文字列"word"が読みだされる. |
${var+word} | 変数$var が定義されている場合, 文字列"word"が読みだされる. |
${var:+word} | 変数$var が定義されている(空文字でない)場合, 文字列"word"が読みだされる. |
シェルスクリプトの前に書く, 環境設定
set -u export LC_ALL=C type Command >/dev/null 2>&1 && type getconf >/dev/null 2>&1 && export PATH="$(command -p getconf PATH)${PATH+:}${PATH-}" export UNIX_STD=2003 # to make HP-UX conform to POSIX
引数がなければ即終了
case $# in 0) exit 1;;esac
#
は引数の数
コマンド名を取得する
${0##*/}
$0
はコマンドパス
コマンドパスから前から検索をかけて最後にある/
まで切り落とされる.
コマンドのヘルプオプションがあるか?
case "${1:-}" in --help|--version|-h) print_usage_and_exit;; esac
$1
は, 引数1つ目.
ファイルを開く(ファイルの末尾に改行がないとき, 改行させる)
grep '' ${file:+"$file"}
$file
にはファイルパスを設定する
エラーメッセージと終了値を引数に持つ終了関数
# === FUNC: error exit with message and return code ==================== # arg : $1=ret; $2=message # ret : return code # stderr : message error_exit() { ${2+:} false && echo "${0##*/}: $2" 1>&2 exit $1 }
${2+:}
は, 二つ目の引数が定義されているとき:
を呼ぶ.
false
のときは, &&
以降のコードは読まれないが, : false
のときは, 実行される.
コマンドの使い方を表示して終了
usage=" Usage: ${0##*/} [options] Options: -h, --help display this help and exit Version: 1.0.0 " print_usage_and_exit () { echo "$usage" 1>&2 exit 1 }
コマンドのオプションごとの処理
opta=0 optb=0 optc=0 while [ $# -gt 0 ]; do case $1 in --a) opta=1; shift; continue;; --b) optb=1; shift; continue;; --c) optc=1; shift; continue;; --help|--version|-h) print_usage_and_exit;; *) print_usage_and_exit;; esac done case $opta in 0) : ;; 1) echo オプションAの処理 esac case $optb in 0) : ;; 1) echo オプションAの処理 esac case $optc in 0) : ;; 1) echo オプションAの処理 esac
コマンドを用いたファイル追記
cat >> ~/.bashrc <<EOF # .bashrcに追加書き込みたいことを書く # ... EOF
pkill
, pgrep
などのコマンドで渡すための, ttyを取得する
ttyの確認によく使われるコマンドtty
がありますが, 出力は, /dev/pts/0
や/dev/tty2
であり, pkill
pgrep
の-t
オプションで渡すttyの値は, 先頭の/dev/
を取り除いた値で, 適していません.
以下のスニペットで, 先頭の/dev/
を取り除いた, pkill
, pgrep
の-t
オプションで渡せるttyの値を取得します.
current_tty=$(ps -p $$ | tail -n 1 | awk '{ print $2 }')
awk
を使わないならば,
current_tty=$( ps -p $$ | tail -n 1 | ( set $(cat) printf "$2" ) )
だが, ps
コマンドのTTYの列が, 数字のみの場合(FreeBSD 9.1-RELEASE-p24)があったので, もしかしたら, 以下の方がいいかも.
current_tty=$(tty | sed -e "s:/dev/::")