はじめに
set
commandは、シェルおよびLinux環境変数の名前と値を表示および設定する組み込みのLinuxシェルコマンドです。 Unixライクなオペレーティングシステムでは、 set
Bourneシェル内のコマンド機能( sh
)、Cシェル( csh
)、およびKornシェル( ksh
。
このチュートリアルでは、set
の内容を学習します コマンドとその使用方法。
前提条件
- Linuxを実行しているシステム。
- 端末/コマンドラインへのアクセス。
Linuxsetコマンド構文
set
の一般的な構文 コマンドは次のとおりです:
set [options] [arguments]
オプション
set
のコンテキストで コマンド、 [options]
Bashシェル環境で設定または設定解除される設定またはフラグです。これを使用して、定義されたシェルスクリプトの動作に影響を与え、目的のタスクの実行を支援します。
- マイナス記号を使用してオプションを設定します(
--
)その後に適切なオプションが続きます。 - プラス記号(
+
)を使用してオプションの設定を解除します )その後に適切なオプションが続きます。
引数
[arguments]
は位置パラメータであり、次のパラメータの順に割り当てられます。
-
$1
-
$2
- ...
-
$n
オプションや引数を指定しないと、コマンドはすべてのシェル変数を出力します。
終了値
set
コマンドには3つの終了値があります:
-
0
。正常に完了したことを示します。 -
1
。無効な引数が原因で失敗しました。 -
2
。失敗すると、通常は引数が欠落しているために使用法メッセージが表示されます。
Linuxsetコマンドオプション
set
コマンドは、組み合わせることができるオプションの広範なリストを提供します。
ほとんどのオプションには、対応する-o flag
があります オプションを呼び出すために使用できます。次の表に、-o flag
を使用したすべてのオプションとそれぞれの代替形式を示します。 構文。
オプション | -oフラグ | 説明 |
---|---|---|
-a | -o allexport | 作成または変更されたすべての変数または関数をエクスポート用にマークします。 |
-b | -o notify | バックグラウンドジョブの終了時にユーザーに警告します。 |
-e | -o errexit | コマンドが失敗した場合、つまりゼロ以外の終了ステータスを出力した場合に終了するようにシェルに指示します。 |
-f | -o noglob | ファイル名の生成(グロブ)を無効にします。 |
-h | -o hashall | 関数が定義されているときに、関数コマンドを見つけて保存します。 -h オプションはデフォルトで有効になっています。 |
-k | -o keyword | コマンド名の前にあるものだけでなく、コマンドの環境にすべての割り当て引数を配置します。 |
-n | -o noexec | コマンドを読み取りますが、実行しません。 |
-m | -o monitor | タスクが完了するとメッセージを表示します。 |
-p | -o privileged | $ENV を無効にします ファイル処理とシェル関数のインポート。 -p 実際のユーザーIDと有効なユーザーIDが一致しない場合、このオプションはデフォルトで有効になっています。オフにすると、有効なuidとgidが実際のuidとgidに設定されます。 |
-t | -o onecmd | 1つのコマンドを読み取ってから、終了します。 |
-u | -o nounset | 未設定または未定義の変数を置換時(パラメーター展開中)のエラーとして扱います。ワイルドカード* などの特別なパラメータには適用されません または@ 。 |
-v | -o verbose | シェル入力行を読み取りながら出力します。 |
-x | -o xtrace | 実行中にコマンド引数を出力します。 |
-B | -o braceexpand | シェルブレースの拡張を実行します。 |
-C | -o noclobber | 出力リダイレクトによって既存の通常のファイルが上書きされるのを防ぎます。デフォルトでは、Bashはリダイレクトされた出力が既存のファイルを上書きすることを許可します。 |
-E | -o errtrace | シェル関数にERRトラップを継承させます。 |
-H | -o histexpand | スタイル履歴の置換を有効にします。シェルがインタラクティブな場合、このオプションはデフォルトでオンになっています。 |
-P | -o physical | コマンド実行時のシンボリックリンクの追跡を防止します。 |
-T | -o functrace | シェル関数にDEBUGトラップを継承させます。 |
-- | n / a | 残りの引数を位置パラメータに割り当てます。引数が残っていない場合は、位置パラメータの設定を解除します。 |
-- | 該当なし | 残りの引数を位置パラメータに割り当てます。 -x をオフにします および-v オプション。 |
該当なし | -o emacs | emacsスタイルのライン編集インターフェイスを使用します。 |
該当なし | -o history | コマンド履歴を有効にします。 |
該当なし | -o ignoreeof | ファイルの終わりを読み取ってもシェルは終了しません。 |
該当なし | -o interactive-comments | インタラクティブコマンドでコメントを許可します。 |
該当なし | -o nolog | 関数定義を履歴ファイルに記録しません。 |
該当なし | -o pipefail | パイプラインの戻り値は、終了時にゼロ以外のステータスを持っていた最後のコマンドのステータスです。終了時にゼロ以外のステータスを持つコマンドがない場合、値はゼロです。 |
該当なし | -o posix | デフォルトの操作がPosix標準と異なる場合、Bashが標準と一致するようにします。 |
該当なし | -o vi | vi と同様の行編集インターフェースを使用します 。 |
Linuxsetコマンドの例
このセクションでは、 set
の最も一般的な使用例を示します。 コマンド。
オプションなしでsetコマンドを使用する
オプションや引数を指定せずにコマンドを実行すると、すべての設定のリスト(すべてのシェル変数と関数の名前と値)が出力されます。リストは非常に長いため、 Page Upを使用してリストをスクロールできます。 およびPageDown キー。
以下は、部分的なset
の例です。 コマンド出力:
スクリプトのデバッグ
set
このコマンドは、スクリプトをデバッグするときに特に便利です。 -x
を使用します set
のオプション コマンドを実行して、スクリプト内のどのコマンドが結果の後に実行されているかを確認し、各コマンドの結果を判別できるようにします。
次の例は、 set -x
を使用してスクリプトをデバッグする方法を示しています。 。以下の手順に従ってください:
1. set -x
を実行します :
set -x
2.お気に入りのテキストエディタ(viエディタを使用)を使用してスクリプトを作成します。 -x
を表示できる単純なループを作成しました オプション効果:
x=10
while [ $x -gt 0 ]; do
x=$[ $x-1 ]
echo $x
sleep 2
done
3.スクリプトをchmodして、実行可能にします。この手順は常にスクリプトを実行する前に必須です 。構文は次のとおりです。
chmod +x [script-name.sh]
4.スクリプトを実行します。構文は次のとおりです。
./[script-name.sh]
出力は一度に1行を印刷して実行し、結果があればそれを示して、次の行に進みます。
デバッグを有効にする別の方法は、 -x
を配置することです。 スクリプトのシバン行のフラグ:
#!/bin/bash -x
スクリプトのエクスポート
-a
を使用して作成された変数または関数を自動的にエクスポートします オプション。変数または関数をエクスポートすると、他のサブシェルやスクリプトでそれらを使用できるようになります。
次のコマンドを実行して、スクリプトのエクスポートを有効にします。
set -a
次の例は、スクリプトのエクスポートがどのように機能するかを示しています。以下の手順に従ってください:
1.選択したエディターを使用して新しいスクリプトを作成します。例:
one=1
two=2
three=3
four=4
/bin/bash
/bin/bash
引数は、新しいシェルの開始を示します。
2.スクリプトが新しいシェルで機能するかどうかを確認します。
echo $one $two $three $four
この出力は、作成した関数がエクスポートされ、新しいシェルを開始した場合でも機能することを示しています。
コマンドが失敗したときに終了
-e
を使用します 実行中にエラーが発生した場合にスクリプトを終了するように指示するオプション。部分的に機能するスクリプトを停止すると、問題や誤った結果を防ぐのに役立ちます。
このオプションをテストするには、次の内容のスクリプトを作成します。
#!/bin/bash
set -e
cat nonexistingfile
echo "The end"
上記の例では、 nonexistingfile
の内容を表示しようとすると、スクリプトでエラーが発生します。 そのファイルが存在しないため、その時点でファイルが終了します。したがって、最後のecho
コマンドは実行されません。
データ損失の防止
デフォルトのBash設定は、既存のファイルを上書きすることです。ただし、 -C
を使用する オプションは、 >
を使用した出力リダイレクト時に既存のファイルを上書きしないようにBashを構成します 、 >&
、または <>
そのファイルにリダイレクトされます。
例:
Bashを使用すると、最初に listing.txt
を上書きできます。 ファイル。ただし、 set -C
を実行した後 コマンドを実行すると、Bashは既存のファイルを上書きできないことを示すメッセージを出力します。
存在しない変数を報告する
Bashのデフォルト設定では、存在しない変数を無視し、既存の変数を処理します。 -u
を使用する オプションは、Bashが存在しない変数を無視するのを防ぎ、問題を報告させます。
たとえば、次のスクリプトには set -u
が含まれていません コマンドとBashはその$var2
を無視します 定義されていません。
#!/bin/bash
var1="123"
echo $var1 $var2
出力には$var1
のみが含まれます 。
ただし、スクリプトを変更して set -u
を追加します コマンドは、Bashが問題を無視するのを防ぎ、それを報告します:
#!/bin/bash
set -u
var1="123"
echo $var1 $var2
位置パラメータの設定
set
コマンドは、位置パラメータに値を割り当てることもできます。位置パラメータは、次の構文を使用して値が参照されるシェル変数です。
$[N]
[N]
valueは、パラメーターの位置を示す数字です。例: $1
最初の位置パラメータ、 $2
2番目のパラメータなどです。
例:
set first second third
上記のコマンドを実行すると、first
が設定されます $1
に対応する 位置パラメータ、second
$2
へ 、およびthird
$3
へ 。 echoコマンドでこれを確認してください:
echo $2
実行して位置パラメータの設定を解除します:
set --
文字列の分割
set
を使用します スペースに基づいて文字列を個別の変数に分割するコマンド。たとえば、 myvar
という変数で文字列を分割します 、「これはテストです」 。
myvar="This is a test"
set -- $myvar
echo $1
echo $2
echo $3
echo $4
このオプションを使用して、awkコマンドと同様に、コマンドの出力から情報を抽出して除外します。
allexportを設定してフラグに通知
-o allexport
フラグを使用すると、 -o notify
の間に、後続で定義されるすべての変数を自動的にエクスポートできます。 flagは、ジョブ完了メッセージをすぐに印刷するようにシェルに指示します。
フラグを設定するには、次を実行します:
set -o allexport -o notify
次の例では、スクリプトがエクスポートされてから、シェルがバックグラウンドジョブの完了時に通知することがわかります。