shell script
なんかshellって忘れやすいので色々メモ
特殊変数
shellでもperlでもrubyでもいいんだけど、
特殊変数という、たとえば、$1
みたいな変数がある。
これを特殊変数というんだけど、 特殊変数という言葉を良く忘れて、ググれなくなったりする。
特殊変数とちょっと関係ありそうな奴。
$#
$@
$*
$0
$1
から $9
shift
はまたあとで書く。
$?
最後に実行した結果がはいってる。
$$
プロセス番号
$-
$!
IFS
区切り文字
環境変数
もちろん、もってますよね。実行ユーザがいるんだから。
env
とかprintenv
とかdeclare
でみれる。
消したいときは、
export -n ENV_VAR
で、変数名ごときえて、中身だけ消したければ、
export ENV_VAR=
とかやる。
ファイルネームまわり
ファイルパスの文字列からいろいろ取得するためのもろもろ
FILE_PATH="/etc/httpd/httpd.conf" # ファイル名を取得 FILE_NAME=${FILE_PATH##*/} # 拡張子を取得 EXT=${FILE_PATH##*.} # 拡張子を除いたファイル名 FILE=${FILE_NAME%.*} # ディレクトリ名を取得 DIR_NAME=${FILE_PATH%/*} # もしくは DIR_NAME=`dirname ${FILE_PATH}
良くあるかきかたとして、今実行しているファイルの絶対パス
ABS_PATH=$(cd $(dirname $0);pwd)
関数
つーか変数の話でいうと、関数の中で宣言した変数もそのままだとグローバル変数になっちゃうので、
hoge() { local VALUE='aaaa' }
みたいに、local
をつけて宣言する。
ちなみに、read_only
を付けると定数を作れる。
local read_only VALUE
とかやれば、ローカルの定数。
return
は普通のshellを実行したときの終了ステータスになるから、0から255。
返り値が欲しいときは、echoしたりする。実行側で上手く使う例えば、こんな感じ
hoge() { local VALUE='aaaa' echo ${VALUE} } HUGA=`hoge`
引数は特殊変数とshift
をつかって取得する
外部ファイルのよみだしとか
関数があるとファイル分割したくなるんで、ファイル読み出しは、
source
かもしくは、.
をつかう、 たとえば、
source 'unlearned.sh'
みたいな。