GNU/Linux >> Linux の 問題 >  >> Linux

Linuxsetコマンドとその使用方法{9例}

はじめに

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

次の例では、スクリプトがエクスポートされてから、シェルがバックグラウンドジョブの完了時に通知することがわかります。


Linux
  1. Linuxgrepコマンドの使用方法

  2. Linuxでhistoryコマンドを使用する方法

  3. LinuxでSuコマンドを使用する方法

  1. Linux screen コマンドの使用方法

  2. Linux で ldconfig コマンドを使用する方法

  3. Linux で ipset コマンドを使用する方法

  1. LinuxでDisownコマンドを使用する方法

  2. LinuxSSコマンドの使用方法

  3. Linuxnohupコマンドの使用方法