bash (Bourne again shell)

/etc/profile

/etc/profile とは、どのログインユーザでも共通の処理を記述したスクリプトシェルである。ログインシェルがshまたはbashの場合、ユーザがログインしたとき自動的に実行される。

~/.bash_profile

bashが対話型ログインシェルとして起動されると、/etc/profile ファイルからコマンドを読み込んで実行する。

次に、ログインユーザのホームディレクトリから次のファイルを上から順に検索して、最初に見つかったファイルからコマンドを読み込んで実行する。

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

これらのファイルが複数存在していても、最初に見つかったファイル以外はコマンドを読み込まない。たとえば、~/.bash_profile があれば ~/.bash_login は読み取られない。

var=value

bashで変数を設定するには、変数名に続けて等号と値を指定する。

$ EXAMPLE1=1
$ EXAMPLE2="foo"

配列の特定の要素に値を設定することができる。

var=`command`

変数にコマンドの実行結果を設定するには、実行するコマンドをバックスラッシュで囲む。

$ TODAY=`date`
$ echo "現在の時刻は $TODAY です。"
現在の時刻は Fri Aug 20 13:22:11 JST 2021 です。

local var=value

bashではローカル変数を使用できる。ローカル変数とは、変数を設定した関数内でのみ参照できる変数である。

bashでローカル変数を設定するには、localキーワードを指定して変数を設定する。

$ local EXAMPLE1=1
$ local EXAMPLE2="foo"

unset var

bashで変数を削除するには、unsetコマンドの引数に変数名を指定する。

$ unset EXAMPLE1

PS2

PS1はプロンプトとして表示する文字列を設定する変数である。プロンプトの文字列には次の表に示す特殊文字を使うことができる。

PS1に設定できる特殊文字
特殊文字 説明
\h ホスト名
\u 現在のユーザ名
$ PS1="\u@\h$ "
tsuka@examplehost$ PS1="$ "
$

eval

式を評価したうえでシェルのコマンドとして実行する。

eval [ argument ... ]

次のシェルスクリプトを実行すると $var=/tmp がエラーとなり、変数tmp_dirが設定されない。

#!/bin/sh
var=tmp_dir
$var=/tmp
echo $var
$ eval1
eval1: tmp_dir=/tmp: 見つかりません。

evalを使うと、$var=/tmptmp_dir=/tmp と評価され、変数tmp_dirが設定されるようになる。

#!/bin/sh
var=tmp_dir
eval $var=/tmp
echo $var
$ eval2
/tmp

exit

exit はシェルを終了させるコマンドです。呼び出し元のシェルまたはシェルスクリプトを、数値で指定した終了ステータスで終了させます。

exit 1

数値を省略すると、最後に実行されたコマンドの終了ステータスがシェルの終了ステータスになります。

exit

これは、最後に実行したコマンドが返した10進数を指定したときと同じです。

exit $?

shift

$n+1 ... から始まる一連の定位置パラメタを $1 ... に 再命名 (リネーム) します。nを省略すると、1 とみなされます。

shift [n]
$ cat example.sh
echo $1 $2 $3
shift 1
echo $1 $2
shift 1
echo $1
$ sh example.sh foo bar baz
foo bar baz
bar baz
baz