|
|
行1: |
行1: |
− | Mac OS X の標準シェル
| + | #REDIRECT [[Wikipedia:Bash]] |
− | | + | |
− | == bash とは? ==
| + | |
− | | + | |
− | *http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
| + | |
− | | + | |
− | Bourne Shell の系譜を引く高機能シェルです。
| + | |
− | GNU の配布物であるため、多くの Linux ディストリビューションで
| + | |
− | 標準シェルとして使われています。詳しくは [[Wikipedia:Bash]] などを参照してください。
| + | |
− | また、そもそもシェルとは何かということについては、
| + | |
− | [[UNIX入門]]のシェルについての項を参照してください。
| + | |
− | | + | |
− | Mac OS X でも Version 10.3 (Panther) から
| + | |
− | bash が標準シェルに採用されています。
| + | |
− | | + | |
− | == 入門記事 ==
| + | |
− | | + | |
− | *bashで始めるシェルスクリプト基礎の基礎
| + | |
− | **http://www.atmarkit.co.jp/flinux/rensai/theory08/theory08a.html
| + | |
− | *bashの便利な機能を使いこなそう
| + | |
− | **http://www.atmarkit.co.jp/flinux/rensai/theory09/theory09b.html
| + | |
− | *ファイヤープロジェクト - BASHスクリプト
| + | |
− | **http://www.fireproject.jp/feature/bash/index.html
| + | |
− | *MacOSX - bash 例文辞典
| + | |
− | **http://www.openspc2.org/reibun/bash/index.html
| + | |
− | *bash 超プログラム術
| + | |
− | **http://www.nurs.or.jp/~sug/soft/super/bash.htm
| + | |
− | | + | |
− | == 文法 ==
| + | |
− | | + | |
− | === 変数 ===
| + | |
− | | + | |
− | 変数は、宣言なしに使うことができます。参照するときは $ をつけます。
| + | |
− | | + | |
− | a=1
| + | |
− | echo $a
| + | |
− | ==> "1"
| + | |
− | | + | |
− | === 引数 ===
| + | |
− | | + | |
− | 以下の特殊変数を使うと、スクリプトの引数にアクセスできます。
| + | |
− | | + | |
− | {| border="1" cellpadding="10"
| + | |
− | |-
| + | |
− | | $*
| + | |
− | |引数全部
| + | |
− | |-
| + | |
− | | $0
| + | |
− | |実行スクリプト名
| + | |
− | |-
| + | |
− | | $1
| + | |
− | |1つめの引数
| + | |
− | |-
| + | |
− | | $#
| + | |
− | |引数の数
| + | |
− | |}
| + | |
− | | + | |
− | === 条件文 ===
| + | |
− | | + | |
− | 条件文は、if で始まって fi で閉じます。[ ... ] で囲っている部分が条件式です。
| + | |
− | | + | |
− | if [ (条件) ]; then
| + | |
− | ...
| + | |
− | fi
| + | |
− | | + | |
− | 例)
| + | |
− | if [ -f /etc/bashrc ]; then
| + | |
− | . /etc/bashrc
| + | |
− | fi
| + | |
− | | + | |
− | さらに条件分岐する場合は、elif (elsif ではないことに注意) や else を使います。
| + | |
− | | + | |
− | if [ (条件) ]; then
| + | |
− | ...
| + | |
− | elif [ (条件) ]; then
| + | |
− | ...
| + | |
− | else
| + | |
− | ...
| + | |
− | fi
| + | |
− | | + | |
− | | + | |
− | === ループ ===
| + | |
− | | + | |
− | (未稿)
| + | |
− | | + | |
− | == カスタマイズ変数 ==
| + | |
− | | + | |
− | (質問)tcsh の unset autologout に相当する変数ってありましたっけ? - ぜ
| + | |
− | | + | |
− | == bash_completion ==
| + | |
− | | + | |
− | bashには、シェルの補完の動作をプログラムを書いて自由に拡張できる、
| + | |
− | プログラマブル補完機能が備わっています。
| + | |
− | このような補完の定義を自分で書くのも良いですが、
| + | |
− | 次のサイトで配布されている設定パッケージ(bash_completion)を使うと便利です。
| + | |
− | 2009年から、新しいメンテナーに開発が引き継がれています。
| + | |
− | | + | |
− | *[http://bash-completion.alioth.debian.org/ Bash Completion Official Homepage](新サイト)
| + | |
− | *[http://www.caliban.org/bash/ Working more productively with bash 2.x/3.x](旧サイト)
| + | |
− | | + | |
− | bash_completion ファイル、および bash_completion.d ディレクトリを適切な場所に設置したのち、
| + | |
− | .bashrc あるいは .bash_profile に次のように書いて、設定ファイルを読みこみます。
| + | |
− | | + | |
− | [ -n "${BASH_COMPLETION}" ] || \
| + | |
− | export BASH_COMPLETION="${HOME}/docoka/bash_completion"
| + | |
− | [ -n "${BASH_COMPLETION_DIR}" ] || \
| + | |
− | export BASH_COMPLETION_DIR="${HOME}/docoka/bash_completion.d"
| + | |
− | . ~/docoka/bash_completion
| + | |
− | | + | |
− | bash_completionをシステムにインストール(/etc/bash_completion)した場合は、
| + | |
− | 1〜4行目の BASH_COMPLETION、BASH_COMPLETION_DIR の設定は不要です。
| + | |
− | | + | |
− | *プログラマブル補完機能で open コマンド(open -a <application_name> <filename>)の <application_name> 部分も補完できたらいいですね。
| + | |
− | **↓吉武氏に補完ファイルを頂きました。中身を整理して本家にフィードバックできれば良いのですが... -- [[ぜ]]
| + | |
− | | + | |
− | <pre>
| + | |
− | _mac_applications() {
| + | |
− | local IFS=$'\t\n'
| + | |
− | COMPREPLY=( \
| + | |
− | $( compgen -W \
| + | |
− | '$( mdfind -onlyin /Applications -onlyin /Developer'\
| + | |
− | ' -onlyin $HOME/Applications -onlyin $HOME/Desktop'\
| + | |
− | ' "kMDItemContentType == '"'com.apple.application-*'"\
| + | |
− | '" | perl -p -e "s|^.*/||; s|\\.app||; s| |\\\\ |g;" )' -- $cur ) )
| + | |
− | }
| + | |
− | | + | |
− | # dfind -onlyin /Applications "kMDItemContentType==com.apple.application-*" | sed -e 's/.*\///; s/ /\\\\ /'
| + | |
− | | + | |
− | _open() {
| + | |
− | local cur prev prefix temp
| + | |
− | | + | |
− | COMPREPLY=()
| + | |
− | cur=${COMP_WORDS[COMP_CWORD]}
| + | |
− | prev=${COMP_WORDS[COMP_CWORD-1]}
| + | |
− | | + | |
− | if [ $COMP_CWORD -eq 2 ] && [[ "$prev" == -a ]]; then
| + | |
− | _mac_applications
| + | |
− | return 0
| + | |
− | elif [[ "$cur" != -* ]]; then
| + | |
− | _filedir
| + | |
− | return 0
| + | |
− | fi
| + | |
− | | + | |
− | # complete using basic options
| + | |
− | COMPREPLY=( $( compgen -W '-a -b -e -f -t -foo" "bar' -- $cur ) )
| + | |
− | | + | |
− | return 0
| + | |
− | }
| + | |
− | | + | |
− | complete -F _open open
| + | |
− | </pre>
| + | |
− | | + | |
− | == 関数を定義する ==
| + | |
− | | + | |
− | 自作のエイリアスコマンドで引数を使いたいときは、
| + | |
− | alias ...=... の代わりに function を定義します。
| + | |
− | 引数は、それぞれ $@, $1, $2 のように記述します。
| + | |
− | | + | |
− | function cd () { command cd $@ && pwd && ls -aF ; }
| + | |
− | | + | |
− | == 関連書籍 ==
| + | |
− | | + | |
− | *ニューハム,キャメロン (著)『入門bash 第3版』(オライリー・ジャパン, 2005/10/26, 2940円)
| + | |
− | **http://www.oreilly.co.jp/books/4873112540/
| + | |
− | **シェルの使い方の基本から高度なシェルプログラミングまで広範に解説されています。お薦め!!
| + | |
− | **[[ISBN:4873112540]]
| + | |
− | | + | |
− | [[Category:ソフトウェア|Bash]]
| + | |
− | [[Category:UNIX|Bash]]
| + | |