シェル変数は、グローバル変数またはローカル変数として使用できます。グローバル変数(つまり、環境変数)は、すべてのシェルでアクセスできます。対照的に、ローカル変数は、現在のシェルでのみアクセスできます。
すべての環境変数を表示するには、printenvコマンドを使用します。特別な変数が必要な場合は、変数名を引数として挿入してます
printenv PATH
変数は、echoコマンドでも表示できます。
echo $PATH
この例では、PATH変数をプリントします。ローカル変数を設定するには、変数名の後に等号を入れ、その後に値を指定します。
PROJECT="SLED"
等号の前後にスペースを挿入しないでください。スペースを挿入すると、エラーになります。環境変数を設定するには、exportを使用します。
export NAME="tux"
変数を削除するには、unsetをしようします。
unset NAME
次のテーブルに、シェルスクリプトで使用できる共通環境変数を示します。
表 5-5 便利な環境変数
HOME |
現在のユーザのホームディレクトリ |
HOST |
現在のホスト名 |
LANG |
ツールをローカライズする場合、ツールは、この環境変数からの言語を使用します。英語をCに設定することも可能です。 |
PATH |
シェルのサーチパス。コロンで区切ったディレクトリのリストを含みます。 |
PS1 |
各コマンドの前にプリントされる通常のプロンプトを指定します。 |
PS2 |
複数行コマンドの実行時にプリントされるセカンダリプロンプトを指定します。 |
PWD |
現在の作業ディレクトリ |
ユーザ |
現在のユーザ |
たとえば、スクリプトfoo.shは、次のように実行できます。
foo.sh "Tux Penguin" 2000
スクリプトに渡される引数すべてにアクセスするには、位置パラメータが必要です。これらのパラメータは、最初の引数には$1、2つ目の引数には$2という順序で割り当てます。パラメータは最大9つまで使用できます。スクリプト名を取得するには、$0を使用します。
次のスクリプトfoo.shは、1から4までのすべての引数をプリントします。
#!/bin/sh echo \"$1\" \"$2\" \"$3\" \"$4\"
このスクリプトを既出例の引数を使用して実行すると、次の結果が出力されます。
"Tux Penguin" "2000" "" ""
変数置換では、変数のコンテンツに、左側または右側からパターンを適用します。次のリストに、可能な構文形式を示します。
左側から最も短い一致を削除します。
file=/home/tux/book/book.tar.bz2 echo ${file#*/} home/tux/book/book.tar.bz2
左側から最も長い一致を削除します。
file=/home/tux/book/book.tar.bz2 echo ${file##*/} book.tar.bz2
右側から最も短い一致を削除します。
file=/home/tux/book/book.tar.bz2 echo ${file%.*} /home/tux/book/book.tar
右側から最も長い一致を削除します。
file=/home/tux/book/book.tar.bz2 echo ${file%%.*} /home/tux/book/book