BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

4 つのサンプル シェル スクリプトで説明する Bash の特別なパラメータ

進行中の bash チュートリアル シリーズの一環として、前回の記事で bash の位置パラメータについて説明しました。この記事では、いくつかの実用的なシェル スクリプトの例を使用して、bash の特別なパラメーターについて説明します。

この記事で説明する bash の特別なパラメーターの一部は次のとおりです:$*、$@、$#、$$、$!、$?、$-、$_

位置パラメータのリスト全体にアクセスするには、2 つの特別なパラメータ $* と $@ を使用できます。二重引用符の外では、これら 2 つは同等です:どちらも $1 で始まる位置パラメータのリストに展開されます (スペースで区切られています)。

ただし、二重引用符内では異なります。二重引用符のペア内の $* は、IFS の最初の文字「$1c$2c$3…」で​​区切られた位置パラメーターのリストと同等です。

二重引用符のペア内の $@ は、引用符で囲まれていないスペースで区切られた位置パラメータのリストと同等です。つまり、「$1」「$2」..「$N」です。

例 1:Bash $* と $@ を使用して位置パラメータを展開する

この例は、$* および $@ で使用可能な値を示しています。

まず、以下に示すように expan.sh を作成します。

<センター>
$ cat expan.sh
#!/bin/bash

export IFS='-'

cnt=1

# Printing the data available in $*
echo "Values of \"\$*\":"
for arg in "$*"
do
 echo "Arg #$cnt= $arg"
 let "cnt+=1"
done

cnt=1

# Printing the data available in $@
echo "Values of \"\$@\":"
for arg in "$@"
do
 echo "Arg #$cnt= $arg"
 let "cnt+=1"
done

次に、以下に示すように expan.sh を実行して、$* と $@ がどのように機能するかを確認します。

$ ./expan.sh "This is" 2 3
Values of "$*":
Arg #1= This is-2-3
Values of "$@":
Arg #1= This is
Arg #2= 2
Arg #3= 3
  • 上記のスクリプトは、IFS (Internal Field Separator) の値を「-」でエクスポートしました。
  • スクリプト expan.sh には、$1="This is"、$2="2"、$3="3" という 3 つのパラメータが渡されます。
  • 特別なパラメータ「$*」の各値を出力すると、IFS で区切られた位置パラメータ全体である 1 つの値のみが得られます。
  • 「$@」は、各パラメータを個別の単語として提供します。

例 2:$# を使用して位置パラメータをカウントする

$# は bash の特別なパラメーターで、位置パラメーターの数を 10 進数で示します。

まず、以下に示すように、arithmatic.sh を作成します。

$ cat arithmetic.sh
#!/bin/bash

if [ $# -lt 2 ]
then
 echo "Usage: $0 arg1 arg2"
 exit
fi

echo -e "\$1=$1"
echo -e "\$2=$2"

let add=$1+$2
let sub=$1-$2
let mul=$1*$2
let div=$1/$2

echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"

位置パラメータの数が 2 未満の場合、以下に示すように使用情報がスローされます。

$ ./arithemetic.sh 10
Usage: ./arithemetic.sh arg1 arg2

例 3:プロセス関連のパラメータ – $$ と $!

特別なパラメーター $$ は、シェルのプロセス ID を示します。 $!最後に実行されたバックグラウンド プロセスのプロセス ID を提供します。

次のスクリプトは、シェルのプロセス ID と最後に実行されたバックグラウンド プロセス ID を出力します。

$ cat proc.sh
#!/bin/bash

echo -e "Process ID=$$"

sleep 1000 &

echo -e "Background Process ID=$!"

ここで、上記のスクリプトを実行し、印刷するプロセス ID を確認します。

$ ./proc.sh
Process ID=9502
Background Process ID=9503
$ ps
 PID TTY TIME CMD
 5970 pts/1 00:00:00 bash
 9503 pts/1 00:00:00 sleep
 9504 pts/1 00:00:00 ps
$

例 4:その他の Bash 特殊パラメータ – $?、$-、$_

  • $? 最後に実行されたコマンドの終了ステータスを示します。
  • $- set 組み込みコマンドを使用して設定されたオプション
  • $_ 前のコマンドに最後の引数を与えます。シェルの起動時に、実行中のシェル スクリプトの絶対ファイル名を指定します。
$ cat others.sh
#!/bin/bash

echo -e "$_"; ## Absolute name of the file which is being executed

/usr/local/bin/dbhome # execute the command.
#check the exit status of dbhome
if [ "$?" -ne "0" ]; then
 echo "Sorry, Command execution failed !"
fi

echo -e "$-"; #Set options - hB

echo -e $_ # Last argument of the previous command.

上記のスクリプトでは、最後の echo ステートメント「echo -e $_」($ アンダースコア) も、前のコマンドの最後の引数の値である hB を出力します。したがって、 $_ は展開後に値を返します

$ ./others.sh
./others.sh
/home/oracle
Sorry, Command execution failed !
hB
hB

  1. シェルトレースを使用してシェルスクリプトでコマンドの実行をトレースする方法

    シェルスクリプトデバッグシリーズのこの記事では、3番目のシェルスクリプトデバッグモードであるシェルトレースについて説明し、いくつかの例を見て、その動作と使用方法を示します。 このシリーズの前のパートでは、他の2つのシェルスクリプトデバッグモードである詳細モードに明確に光を当てています。 および構文チェック これらのモードでシェルスクリプトのデバッグを有効にする方法のわかりやすい例を含むモード。 Linuxでシェルスクリプトデバッグモードを有効にする方法–パート1 シェルスクリプトで構文チェックのデバッグモードを実行する方法–パート2 シェルトレースとは、シェルスクリプトでコマンド

  2. 6 つの実用的な例を含む Bash シェル関数のチュートリアル

    Bash シェル関数は、グループに単一の名前を使用して、後で実行するために複数の UNIX / Linux コマンドをグループ化する方法です。 . Bash シェル関数は、通常の Unix コマンドと同じように実行できます。シェル関数は、それらを解釈するための新しいプロセスを作成することなく、現在のシェル コンテキストで実行されます。bash エイリアスと関数の両方を使用すると、より長い、またはより複雑なコマンドのショートカットを定義できます。ただし、エイリアスは、このチュートリアルで説明されているように、これらの関数が許可する制御フロー、引数、およびその他の巧妙なものを許可しません。 この