Linux環境の変数のガイド。 Linux環境変数、Ubuntuシェル変数環境変数
名前が付けられ、少なくとも1つ(通常は複数)のアプリケーションで使用されるデータを含むオブジェクトは、環境変数と呼ばれます。 簡単に言えば、環境変数は名前と値を持つ変数にすぎません。
環境変数値は、システムで実行できるすべてのファイルの場所やシステムのローカル設定など、使用するデフォルトのエディターにすることができます。 初心者にとっては少し注意が必要ですが、環境変数は−です。 素晴らしい方法複数のアプリケーションとプロセス間で構成設定を共有します。
Coreutilsパッケージには、envおよびprintenvプログラムが含まれています。 現在値を持つすべての環境変数を一覧表示するには、次のように入力します。
$ printenv
bashシェルには2種類の環境変数があります。
- グローバル変数
- ローカル変数
地球環境変数
シェルセッションから、グローバル環境変数が表示され、シェルが生成するすべての子プロセスが表示されます。
一方、ローカル変数には、作成時にシェルからのみアクセスできます。 これにより、グローバル環境変数は、親プロセスからの情報を必要とし、子プロセスを生成するアプリケーションで役立ちます。
デフォルトでは、Linuxシステムはbashセッションを開始するときに特定のグローバル環境変数を設定します。 システム環境変数は、通常のユーザー環境変数と区別するために、毎回すべて大文字を使用します。
ローカル環境変数
それらの名前は、ローカル環境変数がそれらが定義されているローカルプロセスでのみ表示できることを示しているためです。 ローカル環境変数については混乱しないでください。グローバル環境変数と同様に重要です。 実際、Linuxシステムはデフォルトで標準のローカル環境変数も定義します。 ローカル環境変数のリストを表示しようとすると、注意が必要になります。 残念ながら、ローカル環境変数のみを表示するコマンドはありません。 特定のプロセスに設定されているすべての環境変数を表示するコマンドがあります。 これには、グローバル環境変数も含まれることに注意してください。
環境変数の設定
bashシェルから直接独自の環境変数を作成できます。 次のセクションでは、独自の環境変数を作成し、インタラクティブシェルまたはシェルプログラムからそれらを参照する方法を示します。
ローカル環境変数の設定
bashシェルが開始されると(またはシェルスクリプトが表示されると)、シェルプロセス内に表示されるローカル変数を作成できます。 変数の値が割り当てられている等号を使用して、環境変数を文字列または数値変数に割り当てることができます。
$ andreyex_test = tests $ echo $ andreyex_test tests $
おめでとうございます。最初の変数を作成しました。 andreyex_test環境変数の値を参照する必要があるときはいつでも、$ andreyex_testという名前で参照することを忘れないでください。
スペースを含む値の文字列を割り当てる必要がある場合は、文字列の開始と終了を示すために一重引用符を使用する必要があります:
$ andreyex_test =長い文字列のテスト-bash:a:コマンド 見つかりません$ andreyex_test = "長い文字列をテストする" $ echo $ andreyex_test長い文字列をテストする
一重引用符なしで残した場合、bashシェルは次の文字が処理する別のコマンドであると想定します。
定義したローカル環境変数には小文字を使用していることに注意してください。これまでに確認したシステム環境変数では、すべて大文字を使用しています。
bashシェルでは、これが標準の規則です。 新しい環境変数を設定する場合、これは必須ではありませんが、小文字を使用することをお勧めします。 これは、個人の環境変数をシステム環境変数の結果と区別するのに役立ちます。
ノート。 環境変数名、等号、および値の間にスペースがないことが非常に重要です。 割り当てにスペースを入れると、bashシェルはその値を別のコマンドとして解釈します。
$ andreyex_test2 = test -bash:andreyex_test2:コマンドが見つかりません$
シェルプロセスで設定されたローカル環境変数は、シェルプロセスのどこでも使用できます。 ただし、別のシェルを作成すると、子シェルでは使用できなくなります。
$ bash $ echo $ andreyex_test $ exit exit $ echo $ andreyex_test長い文字列をテストします$
この場合、子シェルを開始しました。 ご覧のとおり、andreyex_test環境変数は子シェルでは使用できません(空の値が含まれています)。 子シェルを離れて元のシェルに戻った後も、ローカル環境変数は引き続き使用可能でした。
同様に、子プロセスを終了した後に子プロセスにローカル環境変数を設定すると、ローカル環境変数は使用できなくなります。
$ bash $ andreyex_test = tests $ echo $ andreyex_test tests $ exit exit $ echo $ andreyex_test $
親シェルに戻ると、子シェルに設定されているandreyex_test環境変数は存在しません。
地球環境変数の設定
グローバル環境変数は、グローバル環境変数を設定するプロセスによって作成されたすべての子プロセスから表示されます。 グローバル環境変数の作成に使用される方法は、ローカル環境変数を作成してから、それをグローバル環境にエクスポートすることです。
これは、exportコマンドを使用して実行されます。
$ echo $ andreyex_testは長い文字列をテストします$ export andreyex_test $ bash $ echo $ andreyex_testは長い文字列をテストします$
andreyex_testローカル環境変数でコマンドexportを使用した後、新しいシェルプロセスを開始し、andreyex_test環境変数の値を確認しました。 今回は、exportコマンドでグローバル環境変数をグローバルにしたため、その値を保持しました。
ローカル環境変数でコマンドexportを実行する場合、変数名を参照するためにドル記号を使用しないことに注意してください。
環境変数の削除
もちろん、新しい環境変数を作成できる場合は、既存の環境変数を削除することもできます。 これは、unsetコマンドを使用して実行できます。
$ echo $ andreyex_testテスト$ unset andreyex_test $ echo $ andreyex_test $
unsetコマンドで環境変数を参照している場合は、ドル記号を使用しないように注意してください。
地球環境変数を扱うとき、物事はもう少し複雑になります。 子プロセスにいて、グローバル環境変数を無効にした場合、それは子プロセスにのみ適用されます。 グローバル環境変数は、親プロセスで引き続き使用できます。
$ andreyex_test = tests $ export andreyex_test $ bash $ echo $ andreyex_test tests $ unset andreyex_test $ echo $ andreyex_test $ exit exit $ echo $ andreyex_test tests $
この例では、andreyex_testというローカル環境変数を設定し、それをエクスポートしてグローバル環境変数にします。 次に、子シェルプロセスを開始し、andreyex_testグローバル環境変数が引き続き使用可能であることを確認しました。 次に、子シェルにいる間に、unsetコマンドを使用してandreyex_testグローバル環境変数を削除し、子シェルを終了しました。 元の親シェルに戻って、andreyex_test環境変数の値を確認しましたが、それはまだ有効です。
シェルのデフォルト環境変数
bashシェルがシステム環境を決定するために使用する特定の環境変数があります。 Linuxシステムで使用されるこれらの変数はいつでも数えることができます。 bashシェルは元のBourneUnixシェルの派生物であるため、そのシェルで最初に定義された環境変数も含まれています。
次の例は、bashシェルによって提供される環境変数が元のBourneUnixシェルと互換性があることを示しています。
このリストで最も価値のある環境変数は、PATH環境変数です。
シェルコマンドシェル(インターフェイス)にコマンドを入力する場合 コマンドライン)、シェルはプログラムを見つけるためにシステムを検索する必要があります。 コマンドを検索するディレクトリは、PATH環境変数によって決定されます。 Linuxシステムでは、PATH環境変数は次のようになります。
$ echo $ PATH / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / local / games:/ snap / bin $
この場合、シェルがコマンドを探すディレクトリが8つあることを示しています。 各ディレクトリはコロンで区切られ、PATH変数はディレクトリリストの最後で終わりません。 新しいディレクトリを追加し、別のコロンを追加することで、いつでもPATHにディレクトリを追加できます。 PATHには、注文を検索するクエリも表示されます。
標準のBourne環境変数に加えて、bashシェルは次のようにいくつかの変数も提供します。
Bash Shell Bourne変数:
CDPATH:cdコマンドの検索パスとして使用されるディレクトリのコロンで区切られたリスト。
HOME:現在のユーザーのホームディレクトリ。
IFS:シェルがテキスト行を区切るために使用するフィールドを区切る文字のリスト。
メール:現在のユーザーのメールボックスのファイル名。 bashシェルこのファイルで新着メールをチェックします。
MAILPATH:現在のユーザーのメールボックスの複数のファイル名のリスト。 bashシェルは、このリスト内の各ファイルで新着メールをチェックします。
OPTARG:getoptsコマンドによって処理された最後のオプション引数の値。
OPTIND:getoptsコマンドによって処理された最後のオプション引数のインデックス値。
PATH:シェルがコマンドを探すディレクトリのコロンで区切られたリスト。
PS1:メインコマンドラインコマンドラインプロンプト。
PS2:セカンダリシェルCLIプロンプト文字列。
シェルbash環境変数:
bash: フルネーム現在のbashシェルインスタンスを実行するためのパス。
BASH_ENV:インストールされると、各bashスクリプトは、実行される前に、この変数で定義されたスタートアップファイルを実行しようとします。
BASH_VERSION:bashシェルの現在のインスタンスのバージョン番号。
BASH_VERSINFO:現在のbashシェルインスタンスの個々のメジャーバージョンとマイナーバージョンを含む変数の配列。
COLUMNS:現在のbashシェルインスタンスに使用されている端末の端末幅が含まれます。
COMP_CWORD:現在のカーソル位置を含むCOMP_WORDS変数へのインデックス。
COMP_LINE:現在のコマンドライン。
COMP_POINT:現在のコマンドの先頭を基準にした現在のカーソル位置のインデックス。
COMP_WORDS:現在のコマンドラインの個々の単語を含む変数配列。
COMPREPLY:シェル関数によって生成される可能性のある完了コードを含む変数配列。
DIRSTACK:ディレクトリスタックの現在の内容を含む変数の配列。
EUID:現在のユーザーの実効ユーザーID。
FCEDIT:fcコマンドで使用されるデフォルトのエディター。
FIGNORE:ファイル名の補完を行うときに無視するサフィックスのコロンで区切られたリスト。
FUNCNAME:現在実行中のシェル関数の名前。
GLOBIGNORE:ファイル名を展開するときに無視するファイル名のセットを指定するパターンのコロンで区切られたリスト。
GROUPS:現在のユーザーがメンバーになっているグループのリストを含む変数配列。
histchars:履歴の拡張を制御する最大3文字。
HISTCMD:現在のコマンドの履歴番号。
HISTCONTROL:シェル履歴リストに入力するコマンドを制御します。
HISTFILE:シェル履歴のリストを保存するファイル名(デフォルトはhistory.bash)。
HISTFILESIZE:履歴ファイルに保存する最大行数。
HISTIGNORE:履歴ファイルで無視されるコマンドを決定するために使用される、コロンで区切られたパターンのリスト。
HISTSIZE:履歴ファイルに保存されるコマンドの最大数。
HOSTFILE:シェルがホスト名を入力する必要があるときに読み取るファイルの名前が含まれます。
HOSTNAME:現在のホストの名前。
HOSTTYPE:ホストのbashシェルを説明する文字列が実行されています。
IGNOREEOF:シェルが終了する前に受信する必要のある連続したEOF文字の数。 この値が存在しない場合、デフォルトで1になります。
INPUTRC:Readline初期化ファイルの名前(デフォルトは.inputrc)。
LANG:シェルのロケールカテゴリ。
LC_ALL:ロケールのカテゴリーを指定することにより、LANG変数をオーバーライドします。
LC_COLLATE:文字列値を並べ替えるときに使用される並べ替え順序を設定します。
LC_CTYPE:ファイル名の拡張とパターンマッチングで使用される文字の解釈を指定します。
LC_MESSAGES:ドル記号が前に付いた二重引用符で囲まれた文字列を解釈するときに使用するロケール設定を指定します。
LC_NUMERIC:を示します ローカル設定数値のフォーマットに使用されます。
LINENO:実行中のスクリプトの行番号。
LINES:端末で使用可能な回線数を指定します。
MACHTYPE:システムタイプをcpu-company-system形式で指定する文字列。
メールチェック:シェルが新着メールをチェックする頻度(デフォルトは60秒)。
OLDPWD:シェルによって使用されていた以前の作業ディレクトリ。
OPTERR:1に設定すると、bashシェルはgetoptsコマンドによって生成されたエラーを表示します。
OSTYPE:指定する文字列 オペレーティング・システムシェルが実行されている場所。
PIPESTATUS:フォアグラウンドプロセスプロセスからの終了ステータス値のリストを含む変数配列。
POSIXLY_CORRECT:設定されている場合、bashはPOSIXモードで実行されます。
PPID:bashシェルの親プロセスのプロセスID(PID)。
PROMPT_COMMAND:設定されている場合、プライマリプロンプトが表示される前に実行するコマンド。
PS3:selectコマンドを使用するように促します。
PS4:bash -xオプションが使用されている場合、コマンドラインの前に表示されるプロンプトがエコーされます。
PWD:現在の作業ディレクトリ。
RANDOM:0〜32767の乱数を返します。この変数に値を割り当てると、ジェネレーターが生成されます。 乱数.
REPLY:読み取りコマンドのデフォルト変数。
SECONDS:シェルが開始されてからの秒数。 値を割り当てると、タイマーが値にリセットされます。
SHELLOPTS:許可されたbashシェルオプションのコロンで区切られたリスト。
SHLVL:シェルレベルを指定します。新しいbashシェルが開始されるたびに1ずつ増加します。
TIMEFORMAT:シェルが時間値を表示する方法を指定する形式。
TMOUT:選択コマンドと読み取りコマンドが入力を待機する時間(秒単位)の値。 デフォルト値のゼロは、無期限に待機することを意味します。
UID:現在のユーザーの実際のユーザーID。
setコマンドを使用した後、すべてのデフォルトの環境変数が表示されるわけではないことに気付くかもしれません。 これについての説明は、これらはデフォルトの環境変数ですが、すべてに値が含まれている必要はないということかもしれません。
結論
このガイドでは、Linux環境変数の世界について説明しました。 グローバル環境変数は、多くの場合、それらが定義されているプロセスによって生成された子プロセスによってアクセスされます。 ローカル環境変数には、それらが定義されているプロセスからのみアクセスできます。
Linuxシステムは、各グローバルおよびローカル環境変数を使用して、システム環境に関する情報を格納します。 この情報には、シェルのコマンドラインインターフェイスから、および内部シェルスクリプトからアクセスできます。 bashシェルは、元のUNO Bourneシェルで定義されたシステム環境変数と、多くの新しい環境変数を使用します。 PATH環境変数は、実行可能コマンドを見つけるためにbashシェルが受け入れる検索パターンを定義します。 PATH環境変数を変更して独自のディレクトリを追加したり、プログラムを操作しやすくするために現在のディレクトリシンボルを変更したりすることができます。 独自の使用のために、独自のグローバルおよびローカル環境変数を作成することもできます。 環境変数が作成されると、シェルセッション全体で使用できるようになります。
起動後にbashシェルを起動する起動ファイルはたくさんあります。 これらのスタートアップファイルには、各bashセッションの標準環境変数を設定するための環境変数定義が含まれている場合があります。 入った後 Linuxシステム bashシェルはスタートアップファイル/ etc / profileと3つにアクセスします ローカルファイルユーザーごとに、$ HOME / .bash、$ HOME / .bash login、および$ HOME /.profileを実行します。
ユーザーは、これらのファイルをカスタマイズして、自分で使用するための環境変数と起動スクリプトを含めることができます。 bashシェルは、環境変数配列を追加で提供します。 これらの環境変数には、1つの変数に複数の値を含めることができます。 インデックス値を指定するか、一般的には環境変数配列のフルネームを指定することで、値に個別にアクセスできます。 最後に、このガイドでは、コマンドエイリアスの使用について説明する必要があります。 環境変数ではありませんが、コマンドエイリアスはほとんど環境変数のように動作します。 これらを使用すると、コマンドのエイリアスとそのオプションを定義できます。 非常に長いコマンドとオプションを入力する代わりに、単純なエイリアスを指定して、シェルセッションでいつでもエイリアスを使用できます。
Linux環境変数は、シェル変数とともに、ユーザーセッション内の設定を定義するものです。
それらは自動的にロードされますが、オーバーライドできます。 システムにログインするたびに環境が作成されます。
Linux環境変数、シェル変数
環境変数ユーザーシェルプロセスとその中で生成されたすべての子プロセスに使用されます。
シェル変数現在のセッションの状態を定義するデータが含まれています。 たとえば、現在のディレクトリ。
各セッションは、環境変数とシェル変数の両方を使用します。
環境変数のリストは、を実行することで表示できます printenvまた 環境
……
LC_MEASUREMENT = ru_RU.UTF-8
LESSCLOSE = / usr / bin / lesspipe%s%s
LC_PAPER = ru_RU.UTF-8
LC_MONETARY = ru_RU.UTF-8
LANG = en_US.UTF-8
……
違いは printenv特定の変数のデータを表示できます-例:
envの利点は、特定のコマンドに変数を渡すことが可能になることです。
例えば:
env SHELL = "/ bin / bash" ls -la / opt
環境変数を表示する
BASH = / bin / bash
BASHOPTS = checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES =()
BASH_ARGC =()
……
出力はにリダイレクトできます 以下ナビゲートしやすくするため
現在の環境を変更せずに出力内の不要な情報を取り除くために、これを行うことができます
POSIXモードでは、bashで指定された関数は出力されません。
最も一般的に使用される変数:
- シェル-コマンドを解釈するシェル
- ユーザー-ユーザー
- 障害者- カレントディレクトリ
- 学期-エミュレートされる端末のタイプ
シェルコマンドを使用すると、変数の値を変更できます。 これは、pwdが現在のディレクトリをコンソールに出力する方法です。
/ home / admin
これはPWDシェル変数です
[メール保護]:〜$セット| grep PWD
OLDPWD = / tmp
PWD = / home / admin
/ tmpに移動して、値がどのように変化するかを見てみましょう。
[メール保護]:〜$ cd / tmp /
[メール保護]:/ tmp $セット| grep PWD
OLDPWD = / home / admin
PWD = / tmp
ディレクトリを変更すると、PWDシェル変数の値が変更されるだけでなく、変更されることがわかります。 OLDPWD
環境変数またはシェル変数を設定する方法
シェル変数はこのように追加されます
SOMEVAR = "こんにちは"
これはシェル変数であり、環境変数ではないため、env出力には含まれません。
名前の前に$記号を追加すると、エコーを介してコンテンツを表示できます
やあ
環境に変数を追加するには、変数をエクスポートする必要があります
エクスポートSOMEVAR = "こんにちは"
SOMEVAR =こんにちは
その後、値は子プロセスに継承されます。
キーを使用して同じエクスポートコマンドで環境変数を削除できます -n
値は設定解除によってシェルから削除されます
ログイン時の変数の自動ロード
Linuxシステムはファイルを使用します 〜/ .bashrc, 〜/ .bash_profile, 〜/ .bash_loginまた 〜/ .profile変数を定義します。 ファイルはログイン時に読み取られます。どちらが使用されるかは、ディストリビューションによって異なります。
Ubuntu / Debainでは、これは〜/ .bashrcです。 環境変数とシェル変数の両方がそれに追加されます。
最初に読む / etc / profile。 どのファイルをどの順序で次に使用するかを指定し、再定義できます。
非ログインセッションの場合、変数は/etc/bash.bashrcに設定されます。 このようなセッションは、バックグラウンドで実行されるスクリプトでは一般的です。
ほとんどのタスクでは、編集するだけで十分です 〜/ .bashrc.
Linuxの環境変数は、シェルによって定義され、実行中にプログラムによって使用される特別な変数です。 これらは、システムとユーザーが定義できます。 Linuxシステム環境変数は、システムによって定義され、システムレベルのプログラムによって使用されます。
たとえば、PWDコマンドは、システム変数を使用して古い作業ディレクトリを保持します。 ユーザー環境変数は、現在のシェルに対して、一時的または永続的にユーザーが設定します。 シェル変数の追加と削除の全体的な概念は、複数のファイル、コマンド、およびさまざまなシェルを中心に展開されます。
より広義には、環境変数には次の3つのタイプがあります。
1.ローカル環境変数
これらの変数は、現在のセッションに対してのみ定義されます。 それらは、セッションの終了後に永久に消去されます。 リモートアクセスまたはターミナルエミュレータ。 これらはどのファイルにも保存されませんが、特別なコマンドを使用して作成および削除されます。
2.ユーザーシェル変数
これらのLinuxシェル変数は特定のユーザーに対して定義され、ユーザーがローカル端末を使用してログインするか、リモートで接続するたびにロードされます。 このような変数は通常、構成ファイル(.bashrc、.bash_profile、.bash_login、.profile、またはユーザーのディレクトリーにあるその他のファイル)に保管されます。
3.システム環境変数
これらの変数は、すべてのユーザーがシステム全体で利用できます。 これらは、システムの起動時に、システム構成ファイル/etc/environment、/etc/profile、/etc/profile.d//etc/bash.bashrcからロードされます。
Linux環境変数構成ファイル
ここでは、さまざまなものを簡単に確認します 構成ファイル、上記のリスト。システム全体または特定のユーザーの環境変数を設定するために使用されます。
.bashrc
これはユーザー固有の変数ファイルです。 ユーザーがターミナルセッションを作成する、つまり開くたびに読み込まれます 新しいターミナル。 このファイルで作成されたすべての環境変数は、新しいターミナルセッションが開始されるたびに有効になります。
.bash_profile
これらの変数は、ユーザーがSSH経由でリモート接続するたびに有効になります。 このファイルが見つからない場合、システムは.bash_loginまたは.profileを探します。
/ etc / environment
このファイルは、システムレベルで環境変数を作成、編集、および削除するためのものです。 このファイルで作成された環境変数は、システム全体、各ユーザー、およびリモート接続されている場合でも使用できます。
/etc/bash.bashrc
システムbashrc。 このファイルは、ユーザーが新しいターミナルセッションを作成するたびに、ユーザーごとに実行されます。 これは ローカルユーザー、インターネット経由で接続されている場合、そのような変数は表示されません。
/ etc / profile
システムファイルプロファイル。 このファイルのすべての変数は、リモートでログインしている場合にのみ、システム上のすべてのユーザーが使用できます。 ただし、ローカルターミナルセッションを作成するとき、つまりターミナルを開くだけの場合は使用できません。
これらのファイルで作成されたすべてのLinux環境変数は、そこから削除するだけで削除できます。 変更するたびに、ログアウトしてログインするか、次のコマンドを実行する必要があります。
ソースファイル名
Linuxでのユーザーおよびシステム環境変数の追加
少し理論がわかったところで、練習に移りましょう。 Linuxのローカル環境変数は、次のコマンドで作成できます。
var = value
$ export var = value
これらの変数は、現在のターミナルセッションでのみ使用できます。
環境変数を削除するには、いくつかのコマンドを使用できます。
1.envを使用する
デフォルトでは、envを使用して設定されたすべての環境変数を表示できます。 ただし、-iオプションを使用すると、すべてのシェル変数を一時的に削除し、変数なしでコマンドを実行できます。
env-iコマンド
Varは、このコマンドに渡す変数です。
このコマンドは、環境変数なしでシェルを開始します。
このような環境を開始した後、変数は使用できなくなりますが、終了するとすべてが元の場所に戻ります。
2.未設定の使用
これは、Linux環境変数を削除するもう1つの方法です。 Unsetは、現在のセッションが終了するまで、名前で変数を削除します。
未設定のvariable_name
3.変数値を「」に設定します
これは、Linuxで環境変数を削除する最も簡単な方法です。変数を空に設定すると、現在のセッションの残りの部分で変数を削除できます。
注:これらのメソッドを使用すると、システム変数またはユーザー変数の値を変更できますが、これらは現在のセッションにのみ関連します。
ユーザーおよびシステム環境変数の作成
このセクションでは、現在のセッションだけでなく、再起動後も効果が持続するように、システム変数とユーザー変数を設定および削除する方法について説明します。
1.Linuxでローカル変数を設定および削除します
ローカル変数VARを作成し、それを任意の値に設定してから、unsetを使用して削除し、削除されていることを確認しましょう。
VAR1 = "損失"
$エコー$ VAR1
$ unset VAR1
$エコー$ VAR1
変数を作成する別の方法は、exportコマンドを使用することです。 空の値を割り当てて削除します。
export VAR = "Loss"
$エコー$ VAR
$ var =
$エコー$ VAR
次に、変数VAR2を作成し、それに値を付けましょう。 次に、env -iを実行して、すべてのローカル変数を一時的に削除します。 変数なしでシェルを起動します。 exitと入力すると、すべての変数が復元されます。
VAR2 = "損失"
$エコー$ VAR2
$ env -i bash
$エコー$ VAR2
ユーザー変数の設定と削除
目的の変数をエクスポートするためのエクスポートコマンドを追加して、ホームディレクトリの.bashrcファイルを編集します。 次に、sourceコマンドを実行して変更を適用します。 たとえば、CD変数を作成してみましょう。
この行を追加します(o、次に貼り付け、次にEscおよび:wq):
export CD = "This is Lost Home"
ここで、構成を更新する必要があります。
ソース.bashrc
$エコー$ CD
この変数を削除するには、.bashrcから削除するだけです。
次に、.bash_profileを使用して環境変数を追加しましょう。 この変数は、ご存知のとおり、リモートでログインした場合にのみ使用できます。
vi .bash_profile
行を追加します:
export VAR2 = "これは失われた家です"
そして、これらのコマンドを実行して変更を適用し、変数の追加をテストします。
ソース.bash_profile
$エコー$ VAR2
ローカルターミナルセッションを作成したため、変数は使用できません。ssh経由で接続します。
ssh [メール保護]
$エコー$ VAR2
この環境変数は、ファイルから削除することにより、前の場合と同じ方法で削除できます。
コメント: これらの変数は常に利用可能ですが、すべてのユーザーが利用できるわけではありません。
システム環境変数の設定と削除
/etc/bash.profileに追加して、リモートセッションを除くすべてのターミナルセッションですべてのユーザーが使用できる変数を作成しましょう。
vi /etc/bash.profile
export VAR = "これはシステム全体の変数です"
次に、更新します。
ソース/etc/bash.bashrc
これで、この変数はすべてのユーザー、すべての端末で使用できます。
エコー$ VAR
$ sudo su
$エコー$ VAR
$ su-
$エコー$ VAR
このマシンにリモートで接続するすべてのユーザーが環境変数を使用できるようにする場合は、/ etc / profileファイルを編集します。
export VAR1 = "これはリモートセッションのみのシステム全体の変数です"
構成を更新し、変数の可用性を確認します。リモートでのみ使用可能になります。
ソース/ etc / profile
$エコー$ VAR1
Linuxで環境変数を追加して、リモートセッションとローカルセッションの両方で使用できるようにする必要がある場合は、それを/ etc / environmentにエクスポートします。
vi / etc / environment
export VAR12 = "私はどこでも利用できます"
チェックします:
ソース/ etc / environment
$エコー$ VAR12
$ sudo su
$エコー$ VAR12
$ exit
$ ssh localhost
$エコー$ VAR12
環境変数 ( 環境変数)は、スクリプトやプログラム全体で変数の共通の値を格納するために使用されます。 このような変数は、たとえば特定の端末シェルの操作期間やユーザーセッションの期間など、一定期間設定できます。または、システム全体に対してグローバルレベルで環境変数を設定できます。 。
環境変数
$ HOME
変数には、現在のユーザーのホームディレクトリへのパスが含まれています。 $ USER
現在のユーザー名$ PATH
実行可能プログラムを検索するためのシェルのディレクトリのリスト。 $ PWD
現在の作業ディレクトリへのパス(または pwd)。 例:dir_path = $(pwd)。 $ SHELL
デフォルトのインタプリタ$ RANDOM
変数にアクセスするたびに、乱数0..32767を生成します。 $ SECONDS
秒単位の時間。 シェルの開始以来。 $? 前のコマンドの結果。 $ HOSTNAME
コンピューター名$ HISTFILE
$ IFSインタプリタ履歴ファイルへのパス
コマンド、パラメーター、配列要素の区切り文字のリスト(デフォルト:スペース、タブ、改行)$ PS1
インタプリタプロンプト文字列テンプレート。
環境変数を一時的に設定する
セッション期間の環境変数の設定:
#新しいプロセスの場合env varname = value [コマンド]#現在のシェルとそのすべてのサブプロセスの場合export varname = value [コマンド]
変数の値は、システムが再起動されるまで保持されます。
定数値の設定
システムレベルの環境変数は、/ etc / environmentファイルを介して設定されます。
ENVIRONMENT = "dev"
〜/ .bashrcまたは〜/ .bash_profileを介したユーザー固有の環境変数の設定:
PATH = "$(PATH):/ home / user / bin:"
注意!
ファイル〜/ .bash_profileは、インタープリターが-lオプションで開始されたときに実行されます。 ローカルにログインすると、このファイルは読み取れません。
また、変更はセッションが再開された後にのみ有効になることを覚えておく必要があります。
環境変数の値の表示
環境変数の値を表示するには、printenvコマンドを使用します。
Printenv<имя_переменной>
#shell、#bash、#environment
変数タイプ
上記の例からわかるように、シェル変数を作成するのが通例です。 大文字。 Bashは、次の2つのタイプの変数のリストを格納します。
グローバル変数
グローバル変数または環境変数は、すべてのシェルで使用できます。 環境変数を表示するには、コマンドを使用できます 環境また printenv。 これらのコマンドはパッケージに含まれています sh-utils.
以下は典型的な発行結果です。
Franky〜> printenv CC = gcc CDPATH = 。:〜:/ usr / local:/ usr:/ CFLAGS = -O2 -fomit-frame-pointer COLORTERM = gnome-terminal CXXFLAGS = -O2 -fomit-frame-pointer DISPLAY =: 0 DOMAIN = hq.garrels.be e = TOR = vi FCEDIT = vi FIGNORE = .o:〜G_BROKEN_FILENAMES = 1 GDK_USE_XFT = 1 GDMSESSION = Default GNOME_DESKTOP_SESSION_ID = Default GTK_RC_FILES = / etc / gtk / gtkrc:/ nethome / franky / .gt -1.2-gnome2 GWMCOLOR = darkgreen GWMTERM = xterm HISTFILESIZE = 5000 history_control = ignoredups HISTSIZE = 2000 HOME = / nethome / franky HOSTNAME = octarine.hq.garrels.be INPUTRC = / etc / inputrc IRCNAME = franky JAVA_HOME = / usr / java / j2sdk1.4.0 LANG = en_US LDFLAGS = -s LD_LIBRARY_PATH = / usr / lib / mozilla:/ usr / lib / mozilla / plugins LESSCHARSET = latin1 LESS = -edfMQ LESSOPEN = | /usr/bin/lesspipe.sh%s LEX = flex LOCAL_MACHINE = octarine LOGNAME = francy LS_COLORS = no = 00:fi = 00:di = 01; 34:ln = 01; 36:pi = 40; 33:so = 01; 35:bd = 40; 33; 01:cd = 40; 33; 01:or = 01; 05; 37; 41:mi = 01; 05; 37; 41:ex = 01; 32:*。cmd = 01; 32:*。exe = 01; 32:*。 com = 01; 32:*。btm = 01; 32:*。bat = 01; 32:*。sh = 01; 32:*。csh = 01; 32:*。tar = 01; 31:*。tgz = 01; 31:*。arj = 01 ; 31:*。taz = 01; 31:*。lzh = 01; 31:*。zip = 01; 31:*。z = 01; 31:*。Z = 01; 31:*。gz = 01; 31 :*。bz2 = 01; 31:*。bz = 01; 31:*。tz = 01; 31:*。rpm = 01; 31:*。cpio = 01; 31:*。jpg = 01; 35:* .gif = 01; 35:*。bmp = 01; 35:*。xbm = 01; 35:*。xpm = 01; 35:*。png = 01; 35:*。tif = 01; 35:MACHINES = octarine MAILCHECK = 60 MAIL = / var / mail / francy MANPATH = / usr / man:/ usr / share / man /:/ usr / local / man:/ usr / X11R6 / man MEAN_MACHINES = octarine MOZ_DIST_BIN = / usr / lib / mozilla MOZILLA_FIVE_HOME = / usr / lib / mozilla MOZ_PROGRAM = / usr / lib / mozilla / mozilla-bin MTOOLS_FAT_COMPATIBILITY = 1 MYMALLOC = 0 NNTPPORT = 119 NNTPSERVER = news NPX_PLUGIN_PATH = / plugin / ns4plugin /:/ usr / lib / netscape / plugins OLDP / nethome / franky OS = Linux PAGER = less PATH = /nethome/franky/bin.Linux:/nethome/franky/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:/ usr / bin:/ usr / sbin:/ bin:/ sbin:。 PS1 = \ [\ 033franky is in \ w \ [\ 033 PS2 = More input> PWD = / nethome / francy SESSION_MANAGER = local / octarine.hq.garrels.be:/tmp/.ICE-unix/22106 SHELL = / bin / bash SHELL_LOGIN = -login SHLVL = 2 SSH_AGENT_PID = 22161 SSH_ASKPASS = / usr / libexec / openssh / gnome-ssh-askpass SSH_AUTH_SOCK = / tmp / ssh-XXmhQ4fC / agent.22106 START_WM = twm TERM = xterm TYPE = type USERNAME = franky USER = franky _ = / usr / bin / printenv VISUAL = vi WINDOWID = 20971661 XAPPLRESDIR = / nethome / francy / app-defaults XAUTHORITY = / nethome / franky / .Xauthority XENVIRONMENT = / nethome / franky / .Xdefaults XFILESEARCHPATH = / usr / X11R6 / lib / X11 /%L /%T /%N%C%S:/ usr / X11R6 / lib / X11 /%l /%T /%N%C%S:/ usr / X11R6 / lib / X11 /%T /%N%C%S:/ usr / X11R6 / lib / X11 /%L /%T /%N%S:/ usr / X11R6 / lib / X11 /%l /%T /%N%S :/ usr / X11R6 / lib / X11 /%T /%N%S XKEYSYMDB = / usr / X11R6 / lib / X11 / XKeysymDB [メール保護]=なしXTERMID = XWINHOME = / usr / X11R6 X = X11R6 YACC = bison -y
ローカル変数
ローカル変数は、現在のシェルでのみ使用できます。 組み込みコマンドの場合 セットするパラメータなしで使用すると、すべての変数(ランタイム変数を含む)と関数のリストが返されます。 フォーマットを使用して、変数の局所性を考慮したソートされた結果を与えましょう。
以下は、コマンドの出力を比較して作成されたdiffファイルです。 printenvと セットする、コマンドによっても表示される機能のリストから削除された後 セットする:
フランキー〜> diff set.sorted printenv.sorted | grep」<" | awk "{ print $2 }" BASE=/nethome/franky/.Shell/hq.garrels.be/octarine.aliases BASH=/bin/bash BASH_VERSINFO=(="2" BASH_VERSION="2.05b.0(1)-release" COLUMNS=80 DIRSTACK=() DO_FORTUNE= EUID=504 GROUPS=() HERE=/home/franky HISTFILE=/nethome/franky/.bash_history HOSTTYPE=i686 IFS=$" LINES=24 MACHTYPE=i686-pc-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PIPESTATUS=(="0") PPID=10099 PS4="+ PWD_REAL="pwd SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor THERE=/home/franky UID=504
変数をその内容で割る
変数をローカルとグローバルに分割するだけでなく、変数に格納されているコンテンツに基づいて変数を分類することもできます。 この点で、変数は4つのタイプに分類されます。
- 文字列変数
- 整数変数
- 変数-定数
- 変数-配列
これらのタイプの変数については、第10章で説明します。 次に、変数に整数値と文字列値を使用します。
変数の作成
変数は大文字と小文字を区別し、デフォルトでは大文字になります。 ローカル変数を書き込むために小文字を使用するのが通例である場合があります。 ただし、変数名には任意の文字を使用でき、大文字と小文字を混在させることもできます。 変数名に数字を使用することもできますが、数字で始まる名前は許可されていません。
プロンプト> export 1number = 1 bash:export: `1number = 1":有効な識別子ではありません
シェルに変数を設定するには、次のコマンドを使用します
VARNAME = "value"
等号の前後にスペースを挿入しないでください。これにより、エラーが発生します。 変数に値を割り当てるときは、文字列の内容を引用符で囲むことをお勧めします。 これにより、間違いを犯す可能性が低くなります。
大文字と小文字、数字、スペースの使用例(コマンドが見つからないというメッセージは問題を示しています- 約トランス):
フランキー〜> MYVAR1 = "2"フランキー〜>エコー$ MYVAR1 2フランキー〜> first_name = "フランキー"フランキー〜>エコー$ first_nameフランキーフランキー〜> full_name = "フランキーM.シン"フランキー〜>エコー$ full_nameフランキーM。 Singh franky〜> MYVAR-2 = "2" bash:MYVAR-2 = 2:コマンドが見つかりませんfranky〜> MYVAR1 = "2" bash:MYVAR1:コマンドが見つかりませんfranky〜> MYVAR1 = "2" bash:2:コマンドフランキーが見つかりません〜>設定されていないMYVAR1 first_name full_nameフランキー〜> echo $ MYVAR1 $ first_name $ full_name<--no output-->フランキー〜>
変数のエクスポート
上記の例に示すように作成された変数は、現在のシェルでのみ使用できます。 これはローカル変数です。現在のシェルの子プロセスはこの変数を認識しません。 変数をサブシェルに渡すには、次が必要です。 輸出組み込みコマンドでそれ 輸出。 エクスポートされる変数は、環境変数と呼ばれます。 値の割り当てとエクスポートは通常、1つのステップで実行されます。
VARNAME = "value"をエクスポート
サブシェルは、親プロセスから継承された変数を変更できますが、子プロセスによって行われた変更は、親プロセスには影響しません。 これは、次の例で示されています。
Franky〜> full_name = "Franky M. Singh" franky〜> bash franky〜> echo $ full_name franky〜> exit franky〜> export full_name franky〜> bash franky〜> echo $ full_name Franky M. Singh franky〜> export full_name = "チャールズザグレート"フランキー〜>エコー$ full_nameチャールズザグレートフランキー〜>終了フランキー〜>エコー$ full_nameフランキーM.シンフランキー〜>
サブシェルが初めてfull_nameの値を読み取ろうとしたときに、値が設定されていません(コマンド エコー空の行を示しています)。 サブシェルが終了すると、full_name変数が親シェルにエクスポートされます。変数には、値が割り当てられた後にエクスポートできます。 次に、新しいサブシェルが起動され、親シェルからエクスポートされた変数が表示されます。 変数が変更され、別の値が格納されますが、この変数の値は親シェルで同じままです。
予約変数
BourneShellの予約変数
Bashは、Bourneシェルと同様に、特定のシェル変数を使用します。 場合によっては、Bashはデフォルト値を変数に割り当てます。 下の表は 簡単な説明これらの単純なシェル変数:
表3.1。 BourneShellの予約変数
変数名 | 意味 |
組み込みコマンドによるパスファインディングで使用される、コロンで区切られたディレクトリのリスト CD. |
|
現在のユーザーのホームディレクトリ。 組み込みコマンドでデフォルトで使用されます CD。 この変数の値は、チルダ文字の代わりにも使用されます。 |
|
フィールドを区切るために使用される文字のリスト。 シェルがすべての置換を行った後、結果を別々の単語に分割するときに使用されます。 |
|
このオプションがファイル名に設定されていて、MAILPATHが設定されていない場合、Bashは指定されたファイルでメールを受信したことをユーザーに通知します。 |
|
シェルが定期的に新着メールをチェックするファイル名のコロンで区切られたリスト。 |
|
組み込みコマンドによって処理されるパラメーターの最後の引数の値 getopts. |
|
組み込みコマンドによって処理された最後のパラメーター引数のインデックス getopts. |
|
シェルがコマンドを検索するディレクトリのコロンで区切られたリスト。 |
|
プライマリプロンプト文字列。 デフォルト値は "" \ s- \ v \ $ ""です。 |
|
二次プロンプト文字列。 デフォルト値は「>」「」です。 |
Bashの予約変数
これらの変数の値はBashで設定または使用されますが、通常、他のシェルでは特別なものとして扱われません。
表3.2。 Bashの予約変数
変数名 | 意味 |
この変数は、シェルがユーザーと対話してタスクを実行する方法を制御します。 |
|
フルパス。Bashの現在のインスタンスを開始するために使用されます。 |
|
スクリプトを実行するためにBashが呼び出されたときにこの変数が設定されている場合、その値は、スクリプトを実行する前に読み取る必要がある起動ファイルの名前として使用されます。 |
|
現在のBashインスタンスのバージョン番号。 |
|
変数は読み取り専用の配列であり、その配列要素は特定のBashインスタンスのバージョンに関する情報を格納します。 |
|
選択したリストを印刷する場合、組み込みコマンドによって使用されます 選択する端子の幅を決定します。 信号受信時に自動設定 SIGWINCH. |
|
現在のカーソル位置を保持する単語の$(COMP_WORDS)へのポインター。 |
|
現在のコマンドライン。 |
|
現在のコマンドの開始を基準にしたカーソルの現在の位置へのポインター。 |
|
変数は、現在のコマンドラインで使用されている個々の単語で構成される配列です。 |
|
変数-Bashが読み取る配列 可能なオプションプログラミング終了専用のサービスによって呼び出されるシェル関数によって生成される文字列終了 |
|
変数は、ディレクトリスタックの現在の状態を格納する配列です。 |
|
数値有効ユーザーID現在のユーザーのID。 |
|
組み込みコマンドでデフォルトで使用されるエディター fc-eオプションが指定されている |
|
ファイル名の自動補完を実行するときに無視されるサフィックスのコロンで区切られたリスト。 |
|
現在実行中のシェル関数の名前。 |
|
ファイル名を置き換えるときに無視するファイル名のセットを指定する、コロンで区切られたパターンのリスト。 |
|
変数は、現在のユーザーが属するグループのリストを含む配列です。 |
|
コマンド履歴の置換、迅速な置換、および行われた置換のトークン化を制御する最大3文字。 |
|
コマンド履歴内の現在のコマンドの番号、またはコマンド履歴リスト内のそのポインター。 |
|
コマンドをコマンド履歴ファイルに追加するかどうかを指定します。 |
|
コマンド履歴が保存されているファイルの名前。 デフォルト値:〜/ .bash_history。 |
|
コマンド履歴ファイルに含まれる最大行数は、デフォルトで500行です。 |
|
コマンドをコマンド履歴リストに保管するかどうかを指定する、コロンで区切られたパターンのリスト。 |
|
コマンド履歴リストに記憶できるコマンドの最大数は、デフォルトで500です。 |
|
シェルがホスト名を完成させる必要があるときに読み取ることができる/ etc / hostsファイルと同じ形式のファイル名が含まれています。 |
|
現在のホストの名前。 |
|
Bashが実行されているマシンを説明する文字列。 |
|
入力ストリームの終了文字として文字を受け取ったときのシェルの動作を制御します。 EOF(ファイルの終わり文字)。 |
|
デフォルトの/ etc / inputrcファイルを置き換えるReadline初期化ファイルの名前。 |
|
名前が文字LC_で始まる変数を使用して明示的に定義されていないすべてのカテゴリのローカリゼーションカテゴリ(ロケール)を定義するために使用されます。 |
|
この変数は、LANG変数、およびローカリゼーションカテゴリを指定する文字LC_で始まる他のすべての変数の値をオーバーライドします。 |
|
この変数は、ワイルドカードファイル名を並べ替えるときに使用する並べ替え順序を指定し、範囲の解釈、一致クラス、およびファイル名の置換とパターン一致の文字比較規則を定義します。 |
|
この変数は、文字の解釈と、ファイル名の置換およびパターンマッチングのために文字が特定のクラスに属するかどうかを決定します。 |
|
この変数は、$記号が前に付いた二重引用符で囲まれた文字列を処理するために使用されるローカリゼーションカテゴリを定義します。 |
|
この変数は、数値形式のローカリゼーションカテゴリを指定します。 |
|
現在実行中のスクリプトまたはシェル関数の行番号。 |
|
組み込みコマンドで使用 選択する選択したリストが表示される列の長さを決定します。 |
|
標準のGNUCPU-COMPANY-SYSTEM形式を使用して、Bashが実行されているシステムのタイプを完全に説明する文字列。 |
|
MAILPATHまたはMAIL変数で指定されたファイルでシェルがメールをチェックする頻度を(秒単位で)指定します。 |
|
組み込みコマンドで設定された以前の作業ディレクトリ CD. |
|
1に設定すると、Bashは組み込みコマンドによって生成されたエラーメッセージを表示します getopts. |
|
Bashが実行されているオペレーティングシステムを説明する文字列。 |
|
変数は、最後のパイプライン(1つの命令の場合もあります)のプロセスの終了ステータス値のリストを含む配列です。 |
|
bashの開始時にこの変数が環境に追加されると、シェルはPOSIXモードになります。 |
|
この変数が設定されている場合、値は、プライマリプロンプト文字列(PS1)が発行される前に実行されるコマンドとして解釈されます。 |
|
この変数の値はコマンドに使用されます 選択するプロンプト文字列として。 ディフォルト - ""#? "" |
|
コマンドラインのエコーを有効にするために-xオプションが設定されている場合に、コマンドラインの前に発行されるプロンプト文字列の値。 デフォルトは "" + ""です。 |
|
組み込みコマンドによって設定された現在の作業ディレクトリ CD. |
|
このパラメーターにアクセスするたびに、0〜32767の範囲のランダムな整数が生成されます。この変数の値は、乱数ジェネレーターで使用されます。 |
|
組み込みコマンドでデフォルトで使用される変数 読む. |
|
この変数は、シェルが開始されてから経過した秒数を指定します。 |
|
シェルで設定されたオプションのリスト。 コロンで区切られます。 |
|
Bashの新しいインスタンスが開始されるたびに1ずつ増加します。 |
|
このパラメーターの値は、予約語が前に付いたパイプラインのランタイム情報を出力するための形式を指定する文字列として使用されます。 時間. |
|
TMOUT変数がゼロより大きい値に設定されている場合、組み込みコマンドで使用されるデフォルトのタイムアウトとして扱われます。 読む。 シェルがインタラクティブモードで開始された場合、この値は、シェルがプライマリプロンプト文字列を発行した後に入力を待機する秒数として解釈されます。 入力データが受信されない場合、この時間の後にBashは終了します。 |
|
数値、現在のユーザーの実際のユーザーID。 |
詳細については、Bashのmanページまたはドキュメントを参照してください。 一部の変数は読み取り専用であり、一部は自動的に設定され、一部はデフォルト以外の値に設定されると意味を失います。
特別なオプション
シェルはいくつかのオプションを特別な方法で扱います。 これらのパラメータは、それらから値を取得するためにのみ使用でき、値を割り当てることはできません。
表3.3。 bash特殊変数
シンボル | 意味 |
最初のパラメータから始めて、位置パラメータを返します。 パラメータが二重引用符で囲まれている場合、IFS特殊変数の最初の文字で区切られた各パラメータの値を含む単一の単語に置き換えられます。 |
|
最初のパラメータから始めて、位置パラメータを返します。 パラメーターが二重引用符で囲まれている場合、各パラメーターは別々の単語で返されます。 |
|
10進値として指定された位置パラメーターの数を返します。 |
|
フォアグラウンドモードで実行された最後のパイプラインのリターンコードを返します。 |
|
「ハイフン」パラメーターを使用すると、組み込みコマンドが呼び出されたときに設定されたとおりに、現在のパラメーターのフラグが返されます。 セットする、または自分でインストールした場合 シェル(例:-i)。 |
|
シェルのプロセスIDを返します。 |
|
バックグラウンド(非同期)モードで実行された最後のコマンドのプロセスIDを返します。 |
|
シェルまたはスクリプトの名前を返します。 |
|
「アンダースコア」パラメーターの値は、シェルの開始時に設定され、引数リストで渡されたときに実行されているシェルまたはスクリプトの完全修飾名が含まれます。 その後、値は前のコマンドの最後の引数に置き換えられます。 このパラメーターは、実行され、そのコマンドにエクスポートされた環境に配置された各コマンドへのフルパスも指定します。 メールをチェックする場合、このパラメータにはメールファイルの名前が含まれます。 |
位置パラメータは、シェルスクリプトの名前に続く単語です。 それらは変数$ 1、$ 2、$ 3などに格納されます。 変数は、必要に応じて内部配列に追加されます。 $#変数は、次のようにパラメーターの総数を指定します。 簡単なスクリプト:
#positional.sh#このスクリプトは、3つの位置パラメーターを読み取り、それらを出力します。 POSPAR1 = "$ 1" POSPAR2 = "$ 2" POSPAR3 = "$ 3" echo "$ 1は最初の位置パラメーター\ $ 1です。" echo "$ 2は2番目の位置パラメータ\ $ 2です。" echo "$ 3は 第3位置パラメータ、\ $ 3。 "echo echo"位置パラメータの総数は$#です。 "
スクリプトを実行するときは、任意の数の引数を指定できます。
フランキー〜> position.sh 1 2 3 4 5 1は、最初の位置パラメーター$ 1です。 2つは2番目の位置パラメーター$ 2です。 3つは3番目の位置パラメーター$ 3です。 位置パラメータの総数は5です。franky〜> position.sh one two oneは、最初の位置パラメータ$ 1です。 2つは2番目の位置パラメーター$ 2です。 3番目の位置パラメータ$ 3です。 位置パラメータの総数は2です。
これらのオプションの使用の詳細については、第7章「条件文」および「Shift組み込みコマンド」を参照してください。
他の特別なオプションのいくつかの例:
フランキー〜> grep辞書/ usr / share / dict / words辞書franky〜> echo $ _ / usr / share / dict / words franky〜> echo $$ 10662 franky〜> mozilla&11064 franky〜> echo $! 11064 franky〜> echo $ 0 bash franky〜> echo $? 0 franky〜> ls doesnotexist ls:doesnotexist:そのようなファイルまたはディレクトリはありませんfranky〜> echo $? 1フランキー〜>
ユーザー フランキーコマンドを入力することから始まります grep、変数_に値を割り当てます。 このシェルのプロセスIDは10662です。あるジョブの実行が次のように変換される場合 バックグラウンドモード、変数で! バックグラウンドジョブのプロセスIDが含まれます。 実行中のシェルは bash。 エラーが発生した場合、変数で? 0(ゼロ)以外の戻りコードが含まれます。
変数を持つスクリプトの範囲を拡大する
スクリプトを読みやすくするだけでなく、変数は、さまざまな条件やその他の目的でスクリプトをより迅速に適用するのにも役立ちます。 次の例を考えてみましょう。これは非常に単純なスクリプトです。 リモートサーバー バックアップユーザーのホームディレクトリ フランキー:
#!/ bin / bash#このスクリプトは私のホームディレクトリのバックアップを作成します。 cd / home#これによりアーカイブtarが作成されますcf /var/tmp/home_franky.tar franky> / dev / null 2>&1#最初に古いbzip2ファイルを削除します。 アーカイブ#が存在しない場合にエラーが発生するため、エラーをリダイレクトします。 次に、新しい圧縮ファイルを作成します。 rm /var/tmp/home_franky.tar.bz2 2> / dev / null bzip2 /var/tmp/home_franky.tar#ファイルを別のホストにコピーします-介入なしでこれを機能させるためのsshキーがあります。 scp /var/tmp/home_franky.tar.bz2 bordeaux:/ opt / backup / franky> / dev / null 2>&1#ログファイルにタイムスタンプを作成します。 日付>> / home / franky / log / home_backup.logエコーバックアップが成功しました>> / home / franky / log / home_backup.log
まず、必要なときにファイルやディレクトリを手動で指定すると、間違いを犯しやすくなります。 次に、ユーザーが フランキーこのスクリプトをユーザーに渡したい キャロル、その後前 キャロルスクリプトを使用して コピーを予約彼のホームディレクトリでは、かなり多くの編集を行う必要があります。 ユーザーが フランキーこのスクリプトを使用して他のディレクトリをバックアップしたいと考えています。 スコープを拡張するには、すべてのファイル、ディレクトリ、ユーザー名、サーバー名などに変数を使用します。 次に、値を1回変更するだけで、スクリプト全体を調べて特定のパラメーターが発生するすべての場所を見つける必要はありません。 例:
#!/ bin / bash#このスクリプトは私のホームディレクトリのバックアップを作成します。 #変数の値をに変更します 作るスクリプトが機能します:BACKUPDIR = / home BACKUPFILES = francy TARFILE = /var/tmp/home_franky.tar BZIPFILE = /var/tmp/home_franky.tar.bz2 SERVER = bordeaux REMOTEDIR = / opt / backup / franky LOGFILE = / home / franky / log / home_backup.log cd $ BACKUPDIR#これにより、アーカイブtarが作成されます。cf$ TARFILE $ BACKUPFILES> / dev / null 2>&1#最初に古いbzip2ファイルを削除します。 アーカイブ#が存在しない場合にエラーが発生するため、エラーをリダイレクトします。 次に、新しい圧縮ファイルを作成します。 rm $ BZIPFILE 2> / dev / null bzip2 $ TARFILE#ファイルを別のホストにコピーします-介入なしでこれを機能させるためのsshキーがあります。 scp $ BZIPFILE $ SERVER:$ REMOTEDIR> / dev / null 2>&1#ログファイルにタイムスタンプを作成します。 日付>> $ LOGFILEエコーバックアップが成功しました>> $ LOGFILE