Skip to main content

Ash - Linuxコマンド

【NGSハンズオン】UNIX/Linuxとスクリプト言語 - シェルスクリプト入門 (かもしれません 2024)

【NGSハンズオン】UNIX/Linuxとスクリプト言語 - シェルスクリプト入門 (かもしれません 2024)
Anonim

sh - コマンドインタプリタ(シェル)

シノプシス

sh -/ + aCefnuvxIimqsVEbc -o ロングネーム - ワード ターゲット…

DESCRIPTION

Shはシステムの標準コマンドインタープリタです。現在のバージョンsh は、現在の環境に適合するように変更されています。POSIX 1003.2および1003.2aシェルの仕様。このバージョンにはいくつかの点でKornシェルと似たような多くの機能がありますが、Kornシェルクローンではありません(ksh(1)を参照)。によって指定された機能のみPOSIX いくつかのBerkeley拡張機能がこのシェルに組み込まれています。私たちは期待するPOSIX 4.4 BSDがリリースされるまでの適合。このマニュアルページは、チュートリアルやシェルの完全な仕様ではありません。

概要

シェルは、ファイルまたは端末のいずれかから行を読み込み、解釈し、一般に他のコマンドを実行するコマンドです。ユーザーがシステムにログインするときに実行されるプログラムです(ユーザーがchsh(1)コマンドで別のシェルを選択することもできます)。シェルは、フロー制御構造を持つ言語を実装しています。マクロ機能は、データストレージに加えてさまざまな機能を提供し、履歴と行編集機能も組み込まれています。インタラクティブな使用を支援するための多くの機能が組み込まれており、インタラクティブおよび非インタラクティブな使用(シェルスクリプト)の両方に共通の解釈言語があるという利点があります。つまり、コマンドは実行中のシェルに直接入力することも、ファイルに入れることもでき、シェルが直接実行することもできます。

呼び出し

argsが存在せず、シェルの標準入力が端末に接続されている場合(または - フラグがセットされている)、 - c オプションが存在しない場合、シェルは対話シェルとみなされます。対話型シェルは、一般に各コマンドの前にプロンプ​​トを表示し、プログラミングとコマンドのエラーを別々に処理します(後述)。最初の起動時にシェルは引数0を検査し、ダッシュ ` - 'で始まる場合はシェルもログインシェルとみなされます。これは、通常、ユーザーが最初にログインしたときにシステムによって自動的に行われます。ログインシェルは、/ etc / profileファイルと.profileファイルからコマンドを読み込みます。環境変数ENV シェルへの入力時に設定されるか、ログインシェルの.profileに設定されると、次にシェルはinENVしたがって、ユーザはログイン時にのみ実行されるコマンドを.profileファイルに置き、シェル内のすべてのシェルに対して実行されるコマンドENV ファイル。設定するにはENV 変数をいくつかのファイルに追加するには、ホームディレクトリの.profileに次の行を置きます

ENV = $ HOME / .shinit;輸出ENV

あなたが望む任意のファイル名を `` .shinit ''に置き換えます。以来、ENV シェルスクリプトや非対話型シェルを含むシェルの呼び出しごとにファイルが読み込まれますが、次のパラダイムはENV インタラクティブな呼び出しにファイルします。以下の `` case ''と `` esac ''の中にコマンドを置きます(これらのコマンドについては後述します)。

case $ - in * i *)

#対話的な使用のための#コマンド

エッサック

オプション以外のコマンドライン引数が指定されている場合、シェルは最初の引数をコマンドの読み込み元のファイル名(シェルスクリプト)として扱い、残りの引数はシェルの位置パラメータとして設定します($ 1 、$ 2など)。それ以外の場合、シェルは標準入力からコマンドを読み取ります。

引数リスト処理

すべての一文字オプションには、対応する名前が付いています。この名前は、o オプション。セット - o 名前は、以下の説明の1文字オプションの隣に表示されます。ダッシュを指定する `` - ''はオプションをオンにし、プラス `` + ''を使うとオプションを無効にします。次のオプションは、コマンドラインまたはset(1)組み込みコマンド(後述)で設定できます。

-a アレックスポート

に割り当てられたすべての変数をエクスポートします。 (4.4αのためのUNIMPLEMENTED)

-c

コマンドラインからコマンドを読み込みます。コマンドは標準入力から読み取られません。

-C ノークラバー

既存のファイルを ``> ''で上書きしないでください(4.4alphaではUNIMPLEMENTED)

-e 間違った

対話型でない場合は、テストされていないコマンドが失敗した場合は直ちに終了します。コマンドの終了ステータスは、コマンドを使用してif elifwhile または〜まで またはコマンドが `` && ''または `` || ''演算子の左辺オペランドである場合

-f ノグロブ

パス名の展開を無効にします。

-n noexec

インタラクティブでない場合は、コマンドを読み込みますが、実行しないでください。これは、シェルスクリプトの構文をチェックするのに便利です。

-u 名詞セット

設定されていない変数を展開しようとすると標準エラーにメッセージを書き、シェルが対話型でない場合はすぐに終了します。 (4.4αのためのUNIMPLEMENTED)

-v 詳細

シェルは、読み取ったときにその入力を標準エラーに書き込みます。デバッグに便利です。

-バツ xtrace

各コマンドを標準エラーに書き込みます(実行前に `+ 'が付いています。デバッグに便利です)。

-q quietprofile

もし - v または - バツ オプションが設定されていて、初期化ファイルを読み込むときには適用されません。これらは/ etc / profile .profileであり、ENV 環境変数。

-私 無視する

インタラクティブなときに入力からのEOFを無視する。

-私 インタラクティブ

シェルが対話的に動作するようにします。

-m モニター

ジョブ制御をオンにします(対話型の場合は自動的に設定されます)。

-s スタンダード

標準入力からコマンドを読み込みます(ファイル引数がない場合は自動的に設定されます)。このオプションは、シェルがすでに実行を開始した後(set(1)を使用して)に設定しても効果がありません。

-V vi

組み込みのvi(1)コマンドラインエディタを有効にします(無効 - E それが設定されている場合)。

-E エマックス

組み込みのemacs(1)コマンドラインエディタを有効にします(無効 - V それが設定されている場合)。

-b 通知する

バックグラウンドジョブの完了の非同期通知を有効にします。 (4.4αのためのUNIMPLEMENTED)

レキシカル構造

シェルはファイルからの行の入力を読み込み、空白(空白とタブ)の単語と、 ``演算子 ''と呼ばれるシェルに特有の文字列に分割します。演算子には2種類あります。制御演算子とリダイレクション演算子(その意味は後述します)。以下は演算子のリストです:

"制御演算子:"

& && ( ) ; ;; | ||

"リダイレクト演算子:"

< > >| << >> <& >& <<- <>

引用

クォートは、演算子、空白、キーワードなどの特定の文字や単語のシェルへの特殊な意味を削除するために使用されます。クォーテーションには、一重引用符、二重引用符、バックスラッシュの3種類があります。

バックスラッシュ

バックスラッシュは、Aq改行を除いて、次の文字の文字どおりの意味を保持します。 Aq改行に先行するバックスラッシュは改行として扱われます。

シングルクォート

文字を一重引用符で囲むと、すべての文字のリテラル意味が保持されます(一重引用符を除くと、一重引用符を一重引用符で囲むことは不可能です)。

二重引用符

二重引用符で囲まれた文字は、ドル記号($)、バッククォート( `)、バックスラッシュ()を除くすべての文字のリテラル意味を保持します。二重引用符で囲まれたバックスラッシュは歴史的に奇妙で、

$ `

それ以外の場合はリテラルのままです。

予約語

予約語とは、シェルにとって特別な意味を持つ語で、行頭および制御演算子の後に認識されます。以下は予約語です:

! Taelif Ta fi Taの間に

そうでなければTaTaの場合はTa {Ta}

TaをするTaの場合はTaまで

それらの意味については後述する。

エイリアス

エイリアスは、alias(1)組み込みコマンドを使用して設定される名前と対応する値です。予約語が出現すると(上記を参照)、予約語をチェックした後、シェルはその語を検査してエイリアスと一致するかどうかを調べます。存在する場合は、入力ストリームの値をその値に置き換えます。たとえば、値 `` ls -F ''を持つ `` lf ''というエイリアスがある場合、次のように入力します。

l foobar

になる

ls -F foobar

エイリアスは、素朴なユーザーが引数付き関数を作成する方法を習得することなく、コマンドの簡略化を作成するための便利な方法を提供します。これらは、語彙的に不明瞭なコードを作成するためにも使用できます。この使用はお勧めしません。

コマンド

シェルは、読み込まれた単語を言語に応じて解釈します。その仕様はこのマニュアルページの範囲外です(BNFを参照してください)。POSIX 1003.2文書)。本質的には、行が読み込まれ、行の最初の単語(または制御演算子の後ろ)が予約語でない場合、シェルは単純なコマンドを認識しています。それ以外の場合は、複雑なコマンドやその他の特殊な構成が認識されている可能性があります。

簡単なコマンド

単純なコマンドが認識された場合、シェルは次のアクションを実行します。

  1. `` name = value ''の形式の先頭の単語は取り除かれ、単純なコマンドの環境に割り当てられます。リダイレクション演算子とその引数(後述)は取り除かれ、処理のために保存されます。

  2. 残りの単語は `` Expansions ''の項で説明したように展開され、残りの最初の単語はコマンド名とみなされ、コマンドが配置されます。残りの単語はコマンドの引数とみなされます。コマンド名がなければ、項目1で認識された `` name = value ''変数の代入は現在のシェルに影響します。

  3. リダイレクトは、次のセクションで説明するように実行されます。

リダイレクト

リダイレクションは、コマンドが入力を読み取る場所や出力を送信する場所を変更するために使用されます。一般に、リダイレクトは、ファイルへの既存の参照をオープン、クローズ、または複製します。リダイレクトに使用される全体的な形式は次のとおりです。

n redir-opファイル

どこで redir-op 前述のリダイレクション演算子の1つです。次に、可能なリダイレクトのリストを示します。 Bq nは `3 'のように任意の数です(ファイル記述子を参照する` Bq 3'ではなく)。

n>ファイル

標準出力(またはn)をファイルにリダイレクトします。

n> |ファイル

同じですが、C オプション。

n >>ファイル

標準出力(またはn)をファイルに追加します。

n <ファイル

ファイルから標準入力(またはn)をリダイレクトします。

n1 <&n2

ファイル記述子n2からの標準入力(またはn1)を複製します。

n <& -

標準入力(またはn)を閉じます。

n1>&n2

n2からの標準出力(またはn1)が重複しています。

n>& -

標準出力(またはn)を閉じます。

n <>ファイル

標準入力(またはn)で読み書きするファイルを開きます。

次のリダイレクションはしばしば `` here-document ''と呼ばれます

n <<区切り文字

here-doc-text …

デリミタ

区切り文字までの連続した行のすべてのテキストは保存され、標準入力のコマンド、または指定されている場合はファイル記述子nで使用可能になります。最初の行で指定された区切り文字が引用符で囲まれている場合、here-doc-textは文字通りに扱われます。そうでなければ、テキストはパラメータ展開、コマンド置換、算術展開( ``拡張) '演算子が `` << "の代わりに` `<< - ' 'の場合、here-doc-textの先頭のタブは削除されます。

検索と実行

コマンドには、シェル関数、組み込みコマンド、および通常のプログラムの3種類があり、コマンドはその順番で(名前で)検索されます。それらはそれぞれ異なる方法で実行されます。

シェル関数が実行されると、シェル関数の引数にシェル位置パラメータ($ 0以外は変更されない)がすべて設定されます。コマンドの環境に明示的に配置された変数(関数名の前に代入を代入することによって)は、関数に対してローカルに行われ、与えられた値に設定されます。関数定義で与えられたコマンドが実行されます。コマンドが完了すると、位置パラメーターは元の値に復元されます。これはすべて現在のシェル内で行われます。

シェルの組み込み関数は、新しいプロセスを生成することなくシェルの内部で実行されます。

それ以外の場合、コマンド名が関数または組み込み関数と一致しない場合、コマンドはファイルシステム内の通常のプログラムとして検索されます(次のセクションで説明します)。通常のプログラムが実行されると、シェルはプログラムを実行し、引数と環境をプログラムに渡します。プログラムが通常の実行可能ファイルでない場合(すなわち、「マジックナンバー」で始まらない場合)ASCII 表現は "#!"なので、execve(2)はEr ENOEXECを返します。シェルはプログラムをサブシェルで解釈します。この場合、子シェルはそれ自体を再初期化するので、親シェル内にあるハッシュされたコマンドの位置は、親シェル内に保存されていることを除いて、新しいシェルが呼び出されたかのようになります。子。

このドキュメントの以前のバージョンとソースコード自体は、誤って散発的に「シェルプロシージャ」としてのマジックナンバーのないシェルスクリプトを参照していることに注意してください。

パス検索

コマンドを見つけるとき、シェルは最初にその名前のシェル関数があるかどうかを調べます。次に、その名前で組み込みコマンドを探します。組み込みコマンドが見つからない場合、次の2つのうちの1つが発生します。

  1. スラッシュを含むコマンド名は、検索を実行せずに単に実行されます。

  2. シェルは、パス コマンドのために順番に。の価値パス変数はコロンで区切られた一連の項目でなければなりません。各エントリはディレクトリ名で構成されています。現在のディレクトリは、空のディレクトリ名によって暗黙的に、または明示的に単一のピリオドで示されます。

コマンド終了ステータス

各コマンドには、他のシェルコマンドの動作に影響を与える可能性のある終了ステータスがあります。このパラダイムは、コマンドが正常または成功の場合にはゼロで終了し、失敗、エラー、または誤った指示の場合にはゼロでないことです。各コマンドのマニュアルページには、さまざまな終了コードとその意味を示す必要があります。さらに、組み込みコマンドは、実行されたシェル関数と同様に、終了コードを返します。

複雑なコマンド

複雑なコマンドは、単純なコマンドと制御演算子または予約語の組み合わせで、より複雑なコマンドを作成します。より一般的には、コマンドは次のいずれかです。

  • 単純なコマンド
  • パイプライン
  • リストまたは複合リスト
  • 複合コマンド
  • 関数定義

特に指定のない限り、コマンドの終了ステータスは、コマンドによって最後に実行された単純コマンドの終了ステータスです。

パイプライン

パイプラインは、制御演算子|で区切られた1つ以上のコマンドのシーケンスです。最後のコマンド以外のすべての標準出力は、次のコマンドの標準入力に接続されます。最後のコマンドの標準出力は、通常どおりシェルから継承されます。

パイプラインの形式は次のとおりです。

! command1 | command2 …

command1の標準出力はcommand2の標準入力に接続されています。コマンドの標準入力、標準出力、または両方は、コマンドの一部であるリダイレクション演算子によって指定されたリダイレクトの前に、パイプラインによって割り当てられるとみなされます。

パイプラインがバックグラウンドにない場合(後述)、シェルはすべてのコマンドが完了するのを待ちます。

予約語の場合!がパイプラインの前にない場合、終了ステータスはパイプラインで指定された最後のコマンドの終了ステータスです。それ以外の場合、終了ステータスは、最後のコマンドの終了ステータスの論理NOTです。つまり、最後のコマンドが0を返した場合、終了ステータスは1です。最後のコマンドが0より大きい値を返した場合、終了ステータスはゼロです。

標準入力または標準出力または両方のパイプライン割り当てはリダイレクトの前に行われるため、リダイレクトによって変更できます。例えば:

$ command1 2>&1 | command2

command1の標準出力と標準エラーの両方をcommand2の標準入力に送ります。

A;または ターミネータは、先行するAND-ORリスト(次に説明する)を順次実行させる。 a&は、先行するAND-ORリストの非同期実行を引き起こします。

他のいくつかのシェルとは異なり、パイプライン内の各プロセスは起動シェルの子であることに注意してください(シェル組み込みでない場合、現在のシェルで実行されますが、環境に及ぼす影響はすべて消去されます)。

バックグラウンドコマンド -

コマンドが制御演算子のアンパサンド(&)で終了した場合、シェルはコマンドを非同期に実行します。つまり、シェルは次のコマンドを実行する前にコマンドが終了するのを待機しません。

バックグラウンドでコマンドを実行するためのフォーマットは次のとおりです。

command1&command2&…

シェルが対話型でない場合、非同期コマンドの標準入力は/ dev / nullに設定されます

リスト - 一般的に話す

リストは、改行、セミコロン、またはアンパサンドで区切られた0個以上のコマンドのシーケンスで、オプションでこれらの3文字のいずれかで終了します。リスト内のコマンドは、書き込まれた順に実行されます。 commandの後にアンパサンドが続く場合、シェルはコマンドを開始してすぐに次のコマンドに進みます。それ以外の場合は、コマンドが終了してから次のコマンドに進むのを待ちます。

短絡リスト演算子

`` && ''と `` || ''はAND-ORリスト演算子です。 `` && ''は最初のコマンドを実行し、最初のコマンドの終了ステータスが0の場合は2番目のコマンドを実行します。 `` || ''も似ていますが、最初のコマンドの終了ステータスが0以外の場合は、2番目のコマンドを実行します。 `` && ''と `` || ''はどちらも同じ優先順位を持ちます。

フロー制御構成 - if、while、for、case

ifコマンドの構文は次のとおりです。

リストの場合

リスト

elifリスト

リスト …

elseリスト

fi

whileコマンドの構文は次のとおりです。

リスト中

リストを行う

完了

2つのリストは繰り返し実行され、最初のリストの終了ステータスはゼロです。 untilコマンドは似ていますが、whileの代わりにuntilという語があり、最初のリストの終了ステータスがゼロになるまで繰り返されます。

forコマンドの構文は次のとおりです。

単語の変数のために…

リストを行う

完了

単語が展開され、次に変数が各単語に順番に設定されて繰り返し実行されます。 doとdoneは `` {''と ``} ''に置き換えることができます

breakとcontinueコマンドの構文は次のとおりです。

ブレークnum

続けるnum

ブレークはnum内側のforループまたはwhileループを終了します。継続は、最も内側のループの次の反復に続きます。これらは組み込みコマンドとして実装されています。

caseコマンドの構文は次のとおりです。

大文字の単語

パターン)リスト;

エッサック

パターンは、実際には1つ以上のパターン(後述のシェルパターンを参照)で、 `` ''文字で区切って指定することができます。

コマンドのグループ化

コマンドは、

(リスト)

または

{リスト;

これらのうちの最初のコマンドは、サブシェルでコマンドを実行します。組み込みコマンドは(リスト)にグループ化されても、現在のシェルには影響しません。 2番目の形式は別のシェルをフォークしないので、やや効率的です。このようにコマンドをグループ化すると、1つのプログラムであるかのように出力をリダイレクトできます。

{こんにちは; printf world n ";}>挨拶

関数

関数定義の構文は次のとおりです。

name()コマンド

関数定義は実行可能な文です。それが実行されると、nameという名前の関数がインストールされ、ゼロの終了ステータスが返されます。コマンドは通常、 `` {''と ``} ''の間に囲まれたリストです

変数は、ローカルコマンドを使用して、関数に対してローカルに宣言することができます。これは関数の最初の文として現れ、構文は次のようになります。

ローカル変数| - …

ローカルは組み込みコマンドとして実装されています。

変数をローカルにすると、初期値を継承し、エクスポートされたフラグと読み込み専用のフラグを周囲のスコープに同じ名前の変数から継承します(存在する場合)。それ以外の場合、変数は初期設定されていません。シェルは動的スコープを使用するので、変数xを関数fに対してローカルにして関数gを呼び出すと、関数gを呼び出す変数xへの参照は、xという名前のグローバル変数ではなく、f内で宣言された変数xを参照します。 。

ローカルにすることができる特別なパラメータは、 `` - ''に `` - ''を指定するだけです。関数内のsetコマンドで変更されたシェルオプションは、関数が復帰したときに元の値に復元されます。

returnコマンドの構文は次のとおりです。

return exitstatus

現在実行中の関数を終了します。戻り値は組み込みコマンドとして実装されます。

変数とパラメータ

シェルは一連のパラメータを保持します。名前で示されるパラメータは変数と呼ばれます。起動時に、シェルはすべての環境変数をシェル変数に変換します。新しい変数はフォームを使用して設定できます

名前=値

ユーザーが設定した変数は、アルファベット、数字、およびアンダースコアのみからなる名前を持たなければなりません。最初のものは数字であってはなりません。パラメータは、以下で説明するように、数字または特殊文字で表すこともできます。

位置パラメータ

位置パラメータは、数値(n> 0)で表されるパラメータです。シェルは、これらを最初にシェルスクリプトの名前に続くコマンドライン引数の値に設定します。 set(1)組み込み関数を使用して、それらを設定またはリセットすることもできます。

特別なパラメータ

特別なパラメータは、以下の特殊文字のいずれかで示されるパラメータです。パラメータの値は文字の隣に表示されます。

*

1から始まる定位置パラメーターに展開します。二重引用符で囲まれた文字列内で展開が行われると、各パラメータの値が最初の文字で区切られた単一のフィールドに展開されますIFS 変数、または ifIFS 設定されていません。

@

1から始まる定位置パラメーターに展開します。展開が二重引用符内で行われると、各位置指定パラメータは別の引数として展開されます。位置パラメータがない場合、@を展開すると、@が二重引用符で囲まれていても、ゼロ引数が生成されます。例えば、$ 1が `` abc ''で$ 2が `` def ghi ''ならばQq $ @は二つの引数に展開されます:

abc def ghi

#

位置パラメータの数に拡張されます。

?

最新のパイプラインの終了ステータスに展開されます。

- (ハイフン)

現在のオプションフラグ(文字列に連結された1文字のオプション名)を、呼び出し時、組み込み組み込みコマンド、またはシェルによって暗黙的に指定されたものに展開します。

$

呼び出されたシェルのプロセスIDに展開されます。サブシェルは、親と同じ$の値を保持します。

!

現在のシェルから実行された最新のバックグラウンドコマンドのプロセスIDに展開されます。パイプラインの場合、プロセスIDはパイプラインの最後のコマンドのIDです。

0(ゼロ。)

シェルスクリプトまたはシェルスクリプトの名前に展開されます。

単語の展開

この節では、単語に対して実行されるさまざまな拡張について説明します。後で説明するように、すべての単語に対してすべての展開が実行されるわけではありません。

単一の単語内で発生するチルドの展開、パラメータの展開、コマンド置換、算術展開、見積もりの​​削除は、単一のフィールドに展開されます。単一の単語から複数のフィールドを作成できるのは、フィールド分割またはパス名展開のみです。このルールの例外は、上で説明したように、二重引用符で囲まれた特殊パラメータ@を展開することです。

単語の展開順序は次のとおりです。

  1. ティルド拡張、パラメータ拡張、コマンド置換、算術拡張(これらはすべて同時に発生します)。

  2. フィールド分割は、ステップ(1)で生成されたフィールドに対して実行されます。IFS 変数はnullです。

  3. パス名展開(set - f 効果があります)。

  4. 見積りの削除。

$文字は、パラメータ展開、コマンド置換、または算術評価を導入するために使用されます。

チルド拡張(ユーザーのホームディレクトリを置き換える)

引用符で囲まれていないチルダ文字(〜)で始まる単語は、チルダ展開されます。スラッシュ(/)または単語の末尾までのすべての文字はユーザー名として扱われ、ユーザーのホームディレクトリに置き換えられます。ユーザ名が見つからない場合(〜/ foobarのように)、チルダは ホーム 変数(現在のユーザーのホームディレクトリ)。

パラメータの拡張

パラメータ展開の形式は次のとおりです。

$ {式}

expressionは、バックスラッシュまたは引用符で囲まれた文字列にエスケープされた文字 ``} ''と `` ''が組み合わされ、算術拡張、コマンド置換、および変数拡張の文字は、すべての文字で構成されます。 ``} ''にマッチする

パラメータ拡張の最も簡単な形式は次のとおりです。

$ {parameter}

もしあれば、パラメータの値が代入されます。

パラメータ名またはシンボルは、複数の桁の位置パラメータを指定する場合、またはパラメータの後に名前の一部として解釈できる文字が続く場合を除き、省略可能な中括弧で囲むことができます。二重引用符で囲まれたパラメータの拡張の場合:

  1. 展開結果に対してパス名展開は実行されません。

  2. フィールド分割は、@を除いて、展開の結果に対しては実行されません。

さらに、次のいずれかの形式を使用してパラメータ拡張を変更できます。

$ {parameter:-word}

デフォルト値を使用します。パラメータが設定されていないか、またはnullの場合、単語の展開が置換されます。それ以外の場合は、parameterの値が代入されます。

$ {parameter:= word}

デフォルト値を割り当てます。 parameterが設定されていないかnullの場合、wordの展開はパラメータに代入されます。すべての場合において、パラメータの最終的な値が代入されます。この方法では、位置パラメータまたは特殊パラメータではなく、変数のみを割り当てることができます。

$ {parameter:?word}

nullまたはUnsetの場合はエラーを示します。パラメータが設定されていないか、またはnullの場合、単語の拡張子(または単語が省略されている場合はそれが設定されていないことを示すメッセージ)が標準エラーに書き込まれ、シェルは非ゼロの終了ステータスで終了します。それ以外の場合は、parameterの値が代入されます。対話シェルは終了する必要はありません。

$ {パラメータ:+ word}

代替値を使用する。パラメータが設定されていないか、またはnullの場合、nullが代入されます。それ以外の場合は、単語の拡張が置換されます。

前述のパラメータ展開では、フォーマットでコロンを使用すると、設定されていないパラメータまたはnullのテストが行​​われます。コロンを省略すると、設定されていないパラメータだけがテストされます。

$ {#パラメータ}

文字列の長さ。パラメータの値の文字数の長さ。

部分文字列の処理には、次の4種類のパラメータ拡張があります。いずれの場合も、正規表現表記ではなく、パターンマッチング表記(「シェルパターン」を参照)を使用してパターンを評価します。パラメータが*または@の場合、拡張の結果は指定されていません。完全なパラメータ展開文字列を二重引用符で囲むことによって、次の4種類のパターン文字は引用符で囲まれませんが、中括弧内の文字は引用符で囲まれます。

$ {パラメータ%word}

最小のサフィックスパターンを削除します。単語はパターンを生成するために展開されます。パラメータ拡張により、パターンが一致するサフィックスの最小部分が削除されたパラメータが生成されます。

$ {パラメータ%% word}

最大の接尾辞パターンを削除する。単語はパターンを生成するために展開されます。パラメータの展開によりパラメータが生成され、パターンによってマッチしたサフィックスの最大部分が削除されます。

$ {パラメータ#単語}

最小の接頭辞パターンを削除します。単語はパターンを生成するために展開されます。次に、パラメータを展開すると、パターンが削除されたプレフィックスの最小部分が削除されたパラメータが返されます。

$ {パラメータ##ワード}

最大のプレフィックスパターンを削除する。単語はパターンを生成するために展開されます。次に、パラメータを展開すると、パターンが削除されたプレフィックスの最大部分が削除されたパラメータが返されます。

コマンド置換

コマンド置換は、コマンド名自体の代わりにコマンド出力を置換することを可能にする。コマンド置換は、コマンドが次のように囲まれている場合に発生します。

$(コマンド)

またはポー `バッククォートされた 'バージョンPc:

`コマンド`

シェルは、サブシェル環境でコマンドを実行し、コマンド置換をコマンドの標準出力に置き換え、1つまたは複数のシーケンスを削除することによって、コマンド置換を拡張します 置換の終わりにs。 (埋め込み 出力の終わりの前には削除されません。しかし、フィールド分割の間に、それらは sの値に応じてIFS 引用符は有効です)。

算術拡張

算術展開は、算術式を評価し、その値を代入するためのメカニズムを提供します。算術展開の形式は次のとおりです。

$((式))

式は二重引用符で囲まれているかのように扱われますが、式の中の二重引用符は特別に扱われません。シェルは、パラメータ拡張、コマンド置換、および見積もり解除の式のすべてのトークンを展開します。

次に、シェルはこれを算術式として扱い、式の値を代入します。

空白分割(フィールド分割)

パラメータ拡張、コマンド置換、および算術拡張の後、シェルはフィールド分割のために二重引用符で囲まれなかった拡張および置換の結果をスキャンし、複数のフィールドが得られます。

シェルは、IFS 区切り文字として使用し、区切り文字を使用して、パラメータ展開とコマンド置換の結果をフィールドに分割します。

パス名拡張(ファイル名の生成)

もし - f フラグがセットされている場合、ワード分割が完了した後にファイル名の生成が実行されます。各単語はスラッシュで区切られた一連のパターンとして表示されます。拡張のプロセスは、指定されたパターンに一致する文字列で各パターンを置き換えることによって名前を形成できる既存のすべてのファイルの名前で単語を置き換えます。これには2つの制限があります。最初に、パターンはスラッシュを含む文字列と一致することができません。また、パターンの最初の文字がピリオドでない限り、パターンはピリオドで始まる文字列と一致できません。次のセクションでは、Pathname Expansionとcase(1)コマンドの両方で使用されるパターンについて説明します。

シェルパターン

パターンは、それ自身と一致する通常の文字とメタキャラクタで構成されます。メタ文字は ``! '' `` * '`` `?' 'と` `' 'これらの文字は引用符で囲まれていると特別な意味を失います。コマンドまたは変数の置換が実行され、ドル記号または二重引用符が二重引用符で囲まれていない場合、変数の値またはコマンドの出力がこれらの文字に対してスキャンされ、メタ文字に変換されます。

アスタリスク( `` * '')は任意の文字列にマッチします。疑問符は任意の1文字に一致します。左括弧( `` '')は文字クラスを導入します。文字クラスの最後は `` ''で示され、 `` '' 'が見つからない場合、 `` ' 'は文字クラスを導入するのではなく `` ' 'にマッチします。文字クラスは、角かっこの間の任意の文字に一致します。文字の範囲は、マイナス記号を使用して指定できます。文字クラスは、感嘆符を文字クラスの最初の文字にすることによって補完することができる。

文字クラスに `` '' 'を含めるには、最初の文字を ``!' 'の後ろに記述します。マイナス記号を含めるには、最初または最後の文字にします

ビルトイン

このセクションでは、別々のプロセスで実行できない操作を実行する必要があるため、組み込みコマンドをリストしています。これらに加えて、効率のために組み込むことができるいくつかの他のコマンドがある(例えば、エコー1)。

:

0(真)終了値を返すヌルコマンド。

。ファイル

指定されたファイル内のコマンドは、シェルによって読み込まれて実行されます。

エイリアス 名 =文字列…

もし 名前=文字列 シェルがエイリアスを定義する 名 価値のある 文字列 ただの 名 が指定されている場合、エイリアスの値 名 印刷されます。議論がなければ、エイリアス 組み込み関数は、定義されているすべてのエイリアスの名前と値を出力します(unalias)

bg 仕事 …

バックグラウンドで指定されたジョブ(またはジョブが与えられていない場合は現在のジョブ)を続行します。

コマンド コマンド引数…

指定した組み込みコマンドを実行します。 (組み込みコマンドと同じ名前のシェル関数がある場合に便利です)。

CD ディレクトリ

指定したディレクトリに切り替えます(デフォルト$ HOME) エントリがCDPATH 環境の中に現れますCD コマンドまたはシェル変数CDPATH が設定されていて、ディレクトリ名がスラッシュで始まらない場合は、CDPATH 指定されたディレクトリが検索されます。の形式CDPATHパス 対話シェルでは、CD コマンドは、ユーザーが指定した名前と異なる場合、実際に切り替えたディレクトリの名前を表示します。これらは、CDPATH メカニズムが使用されたか、シンボリックリンクが交差したためです。

評価 文字列…

すべての引数をスペースで連結します。次に、コマンドを再解析して実行します。

exec コマンド引数…

コマンドが省略されない限り、シェルプロセスは指定されたプログラム(シェル組み込み関数または関数ではなく、実際のプログラムでなければなりません)に置き換えられます。すべてのリダイレクトexecコマンドは永久的なものとしてマークされているため、exec コマンドは終了する。

出口 exitstatus

シェルプロセスを終了します。もし exitstatus シェルの終了ステータスとして使用されます。それ以外の場合は、直前のコマンドの終了ステータスが使用されます。

輸出する 名…

エクスポート-p

指定された名前は、後続のコマンドの環境に表示されるようにエクスポートされます。変数のエクスポートを解除する唯一の方法は、変数を設定解除することです。シェルは変数の値が書かれたときに同時にセットされるようにします

エクスポート名=値

引数を指定しないと、exportコマンドはすべてのエクスポートされた変数の名前をリストします。とともに -pオプションを指定すると、出力は非インタラクティブな使用のために適切にフォーマットされます。

fc-e 編集者 最初 最終

fc -l -nr 最初 最終

fc -s 古い=新しい 最初

fc 組み込みコマンドは、以前に対話型シェルに入力されたコマンドを一覧表示、編集、再実行します。

-e editor

editorで指定されたエディタを使用して、コマンドを編集します。エディタ文字列はコマンド名で、パス 変数。の値はFCEDIT 変数はデフォルトとして使用されます。e 指定されていません。もしFCEDIT nullまたは設定されていない場合、編集者 変数が使用されます。もし編集者 nullまたは設定されていない場合は、ed(1)がエディタとして使用されます。

-l(ell)

コマンドをエディタを呼び出すのではなく、一覧表示します。コマンドは、最初と最後のオペランドで指定された順序で記述されます。r 各コマンドの前にコマンド番号が付いています。

-n

-lで表示するときにコマンド番号を表示しないようにします。

-r

リストされているコマンドの順序を逆にする( - l または編集されていない( - l また、s)

-s

エディタを起動せずにコマンドを再実行してください。

最初

最終

一覧表示または編集するコマンドを選択します。以前にアクセスできるコマンドの数は、虚偽 変数。 firstまたはlastの値は、次のいずれかです。

+番号

コマンド番号を表す正の数。コマンド番号は - l オプション。

-数

以前に実行されたコマンドの数を実行したコマンドを表す負の10進数。たとえば、-1は直前のコマンドです。

文字列

その文字列で始まる最も新しいコマンドを示す文字列。古い=新しいオペランドも - で指定されていない場合 - s 第1オペランドの文字列形式には、等号を埋め込むことはできません。

以下の環境変数はfcの実行に影響します。

FCEDIT

使用するエディタの名前。

虚偽

アクセス可能な以前のコマンドの数。

fg ジョブ

指定したジョブまたは現在のジョブをフォアグラウンドに移動します。

getopts optstring var

POSIX getopts コマンドと混同しないでください。 ベル研究所 由来のgetopt(1)。

最初の引数は一連の文字でなければなりません。各文字の後にはオプションで引数が必要であることを示すコロンが続きます。指定された変数は、解析されたオプションに設定されます。

getopts コマンドは空白を含む引数を扱うため、古いgetopt(1)ユーティリティを廃止します。

getopts 組み込み関数を使用して、パラメータのリストからオプションとその引数を取得できます。呼び出されると、getopts 次のオプションの値を、指定されたシェル変数のリストのオプション文字列に置きます。 var シェル変数のインデックスですOPTIND シェルが呼び出されると、OPTIND 引数を必要とするオプションごとに、getopts 組み込み関数はシェル変数にそれを置きますOPTARG オプションが許可されていない場合 オプトストリング 次にOPTARG 設定されません。

オプトストリング 認識されたオプション文字列です。文字の後にコロンが続く場合、オプションには空白で区切られていてもいなくてもよい引数が必要です。オプション文字が期待どおりに見つからない場合は、getopts 変数を設定します var 「?」にgetopts 設定が解除されますOPTARG 出力を標準エラーに書き込みます。コロンを最初の文字として指定することにより オプトストリング すべてのエラーは無視されます。

最後のオプションに達すると、0以外の値が返されます。引数が残っていない場合は、getopts 設定する var 特別なオプション `` - ''に置き換えなければ、それは var 「?」に

次のコードは、オプションaとbと引数を必要とするオプションcを取ることができるコマンドの引数をどのように処理するかを示しています。

一方、getopts abc:f行うcase $ f in| b)フラグ= $ f ;;c)carg = $ OPTARG ;;?)echo $ USAGE;出口1 ;;エッサック完了`expr $ OPTIND - 1`をシフトする

このコードは、以下のいずれかを同等のものとして受け入れます。

cmd -acargファイルファイルcmd -a -c argファイルfilecmd -carg -aファイルファイルcmd -a -carg - ファイルファイル

ハッシュ-rv コマンド…

シェルは、コマンドの位置を記憶するハッシュテーブルを維持します。何の議論もなしに、ハッシュ コマンドはこのテーブルの内容を表示します。最後から見ていないエントリCD コマンドはアスタリスクでマークされています。これらのエントリが無効である可能性があります。

議論をすると、ハッシュ コマンドは、指定されたコマンドを(機能でない限り)ハッシュテーブルから削除してから、それらを探します。とともに -v オプションを指定すると、コマンドが見つかったときにそのコマンドの位置がハッシュ表示されます。 - r オプションを指定すると、関数を除いてハッシュ・テーブル内のすべてのエントリが削除されます。

求職者 ジョブ

ジョブ内のプロセスのプロセスIDを出力します。もし ジョブ 引数を省略すると、現在のジョブが使用されます。

ジョブ

このコマンドは、現在のシェルプロセスの子プロセスであるすべてのバックグラウンドプロセスを一覧表示します。

pwd

現在のディレクトリを表示します。組み込みコマンドは、同じ名前のプログラムと異なる場合があります。なぜなら、組み込みコマンドは、現在のディレクトリが毎回それを再計算するのではなく、記憶しているコマンドを記憶しているからです。これはより速くなります。ただし、現在のディレクトリの名前が変更された場合、pwd ディレクトリの古い名前を印刷し続けます。

読む-p プロンプト -r 変数…

このプロンプトは、 - p オプションが指定され、標準入力がターミナルです。標準入力から行が読み込まれます。末尾の改行は行から削除され、行は上の単語分割のセクションで説明したように分割され、その断片は順番に変数に割り当てられます。少なくとも1つの変数を指定する必要があります。変数より多くの部分がある場合、残りの部分(IFS それらを分離したもの)が最後の変数に割り当てられます。ピースより多くの変数がある場合、残りの変数にはヌル文字列が割り当てられます。ザ読む EOFが入力時に発生しない限り、組み込み関数は成功を示します。この場合、失敗が返されます。

デフォルトでは、 - r オプションが指定されている場合、バックスラッシュ `` ''はエスケープ文字として機能し、次の文字が文字通り扱われます。バックスラッシュの後に改行がある場合、バックスラッシュと改行は削除されます。

読み取り専用 名…

readonly -p

指定された名前は、読み取り専用としてマークされているため、後で変更または設定解除することはできません。シェルは変数の値が書込みのみで読まれると同時にセットされる

読み取り専用name = value

引数を指定しないと、readonlyコマンドはすべての読み取り専用変数の名前をリストします。とともに -p オプションを指定すると、出力は非インタラクティブな使用のために適切にフォーマットされます。

セット { -オプション| +オプション| - arg …

セット コマンドは3つの異なる機能を実行します。

引数なしでは、すべてのシェル変数の値がリストされます。

オプションが指定されている場合は、指定されたオプションフラグを設定するか、Sx引数リスト処理の節で説明されているようにオプションフラグをクリアします。

setコマンドの3番目の使用方法は、シェルの位置パラメーターの値を指定されたargsに設定することです。オプションを変更せずに位置パラメータを変更するには、設定する最初の引数として `` - ''を使います。 argsが存在しない場合、setコマンドはすべての位置パラメータをクリアします( `` shift $# ''を実行するのと同じです)。

可変値

変数に値を代入します。 (一般的に、変数=値を記述する方が良いセットヴァル セットヴァル名前がパラメータとして渡される変数に値を代入する関数で使用されることを意図しています)。

シフト n

位置パラメータをn回シフトする。 Aシフト の値を設定する $1 の値に $2 の価値 $2 の値に $3 などのように、 $# 一つ。 nが位置パラメータの数よりも大きい場合、シフト エラー・メッセージを出し、戻り状況2で終了します。

シェルおよびシェルから実行されたプロセスの累積ユーザーおよびシステム時間を出力します。戻り状況は0です。

トラップ アクション 信号…

指定されたシグナルのいずれかが受信されると、シェルが解析してアクションを実行します。シグナルはシグナル番号で指定します。もし 信号 は0 シェルが終了するとアクションが実行されます。 アクション nullまたは `` - ''の場合、指定されたシグナルは無視され、後者はデフォルトのアクションが実行されます。シェルがサブシェルをフォークすると、トラップされた(ただし無視されない)シグナルがデフォルトのアクションにリセットされます。ザトラップ コマンドは、シェルへの入力時に無視されたシグナルには影響しません。

タイプ 名前…

各名前をコマンドとして解釈し、コマンド検索の解像度を表示します。考えられる解決策は、シェルキーワード、エイリアス、シェル組み込みコマンド、コマンド、追跡エイリアス、および見つからないものです。エイリアスの場合、エイリアス展開が表示されます。コマンドと追跡されたエイリアスの場合、コマンドの完全なパス名が出力されます。

ulimit-H -S -a -tfdscmlpn

プロセスのハードまたはソフトの制限について問い合わせたり設定したり、新しい制限を設定したりします。ハードリミット(プロセスが違反することが許されていないか、それが低下した後に発生しない可能性がある)とソフトリミット(プロセスにシグナルが送られるが、必ずしも殺される必要はなく、上昇する可能性がある)の選択は、これらのフラグ:

-H

ハードリミットについて設定または問い合わせ

-S

ソフトリミットについて設定したり問い合わせたりします。もしそうでなければ - H また、S ソフトリミットが表示されるか、または両方のリミットが設定されます。両方を指定すると、最後のものが勝ちます。

これらのフラグのいずれかを指定することによって、問い合わせまたは設定される制限が選択されます。

-a

現在のすべての制限を表示する

-t

CPU時間の制限を表示または設定する(秒単位)

-f

作成可能な最大ファイルの制限を表示または設定する(512バイトブロック単位)

-d

プロセスのデータセグメントサイズの制限を表示または設定する(キロバイト単位)

-s

プロセスのスタックサイズの制限を表示または設定する(キロバイト単位)

-c

生成可能な最大のコアダンプサイズの制限を表示または設定する(512バイトブロック単位)

-m

プロセスが使用可能な物理メモリの総量の制限を表示または設定する(キロバイト単位)

-l

プロセスがmlock(2)でロックできるメモリ量の上限を表示または設定する(キロバイト単位)

-p

このユーザーが一度に持つことができるプロセスの数の制限を表示または設定する

-n

プロセスが一度に開くことができるファイル数の制限を表示または設定する

これらのいずれも指定されていない場合は、表示または設定されているファイルサイズの制限です。 valueが指定されている場合、制限はその数値に設定されます。それ以外の場合は電流制限が表示されます。

任意のプロセスの制限は、sysctl(8)ユーティリティを使用して表示また