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="$ "
$

alias

alias

別名を全て表示します。

alias 別名=値

別名を設定します。

unalias 別名 ...

別名を削除します。

unalias -a

全ての別名を削除します。

case

case コマンドは、処理の流れ(フロー)を制御する構文です。変数の値によって、実行するアクションを変えることができます。

case 変数 in [ パターンのリスト ) コマンドリスト ;; ] ... esac

case コマンドは、変数 に一致する最初の パターンのリスト に対応した コマンドリスト を実行します。 パターンの形式は、ファイル名生成に使用される形式と同じです。 ただしスラッシュ、先行するドット、およびスラッシュ直後のドットは、明示的に一致しなくてもかまいません。

パターンのリストには、ひとつ以上の値を指定します。複数の値を列挙するには、パイプ記号(|)で区切ります。

変数の値がパターンのリストのいずれかに一致すると、対応するコマンドリストを実行します。コマンドリストには、0個以上のコマンドを指定します。複数のコマンドを列挙するには、セミコロン記号(;)または改行で区切ります。コマンドリストの終端は、;; で表します。

case "$0" in
-sh | -ksh | -jsh)
    echo "hello"
    ;;
esac
case $? in
0)
    echo "hello"
    ;;
1)
    echo "world"
    ;;
esac

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 $?

bash

Bourne Againシェルで変数をエクスポートするには、シェル組み込みコマンドのexportを実行する。

export [[name[=word]] ...

変数に値を代入するのと、変数のエクスポートを同時に行うことができる。たとえば、

$ PATH=/usr/local/HULFT/bin:$PATH
$ export PATH

は、次のようにすることができる。

$ export PATH=/usr/local/HULFT/bin:$PATH

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

until

until コマンドリスト1 do コマンドリスト2 done

while

while または until コマンドは、処理の流れ(フロー)を制御する構文です。指定した条件を満たす間、特定のアクションを繰り返し実行させることができます。

while コマンドリスト1 do コマンドリスト2 done

while コマンドは、while コマンドリスト1 を繰り返し実行し、コマンドリスト1 中の最後のコマンドの終了ステータスが 0 の場合、do コマンドリスト2 を実行します。それ以外の場合、ループは終了しま す。 do コマンドリスト2 中のコマンドを実行しない場合、while コマンドは 0 の終了ステータスを返します。 ループ終了条件の判定を逆にするには、while の代わりに until を使用します。