シェルスクリプトでの$コマンドの使い方まとめ
今日は在宅勤務の4日目、徐々に自宅で仕事のリズムの少しを発見し、いくつかのシェルスクリプトを変更し、変更の過程で、まだいくつかの知識のポイントを統合する必要があることがわかった、ここで書き出すには、印象を深めています。
記号は、あなたにとって新しいものではないはずです。シェルスクリプトでは、$はほとんどのことに使われるので、ここにすべての$の組み合わせのリストを示しますので、効果を見ることができます。
$で構成されたコマンドは、おそらく以下のようなものでしょう。
$0,$1... $? ,$! ,$$,$*,$#,$@
ここで、それぞれの意味について見てみましょう。
1.$0,$1
0と$1はそれぞれ、スクリプトの名前とスクリプトの最初のパラメータを意味すると理解するのがよいでしょう、では例を見てみましょう。
jwfyyzdembp:tmp jwfyyz$ cat test.sh
echo 'The meaning of $0 is':$0
echo 'The meaning of $1 is':$1
jwfyyzdembp:tmp jwfyyz$ . /test.sh yeyz
The meaning of $0 is:. /test.sh
The meaning of $1 is:yeyz
jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz
The meaning of $0 is:test.sh
The meaning of $1 is:yeyz
注意点としては、./test.shメソッドを使用してスクリプトを実行する場合、$0の値は. /test.sh であり、test.sh ではありません。
2. $?
は、最後に実行したコマンドの実行戻りコードを指し、次の例のように、実行が成功した場合は0を、そうでない場合は1を返します。
jwfyyzdembp:tmp jwfyyz$ cat test.sh
echo 'The meaning of $0 is':$0
echo 'The meaning of $1 is':$1
ls -l a.txt
echo '$? The result is '$?
ls -l test.sh
echo '$? The result is '$?
jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz
The meaning of $0 is:test.sh
The meaning of $1 is:yeyz
ls: a.txt: No such file or directory
$? The result is 1
-rwxr-xr-x 1 jwfyyz wheel 124 2 7 20:32 test.sh
The result of $? The result is 0
このように、1回目にls -l a.txtを実行すると、ディレクトリにa.txtファイルがないので1を返し、2回目に実行すると、test.shファイルが存在するので0を返します。
3.$$
$$ は、例として、スクリプトが実行されている現在のプロシージャの ID 番号を指します。
jwfyyzdembp:tmp jwfyyz$ cat test.sh
pwd
echo $$
sleep 10
jwfyyzdembp:tmp jwfyyz$ sh test.sh &
[1] 60658
jwfyyzdembp:tmp jwfyyz$ ps -ef|grep test
501 60658 60529 0 8:36 PM ttys000 0:00.01 sh test.sh
501 60661 60529 0 8:36 PM ttys000 0:00.00 grep test
test.shスクリプトの後にsleep 10というコマンドを設定し、スクリプトの実行後に10秒間スリープし、60658という値を出力しています、この時点で現在のスクリプトのプロセス番号を確認すると子プロセスのプロセスIDは60658であることが分かります
4. と $@
この二つを一緒にしているのは、主にリファレンスの全パラメータを表し、その結果を個別にプリントするためで、同じものですが、ループ内でその内容をプリントすると、例えば次のように違いが分かります。
jwfyyzdembp:tmp jwfyyz$ cat test.sh
echo 'The result of $* is':$*
echo 'The result of $@ is':$@
echo "-- \$* demo ---"
for i in "$*"; do
echo $i
done
echo "-- \$@ demo ---"
for i in "$@"; do
echo $i
done
jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3
The result of $* is:yeyz 1 2 3
The result of $@ is:yeyz 1 2 3
-- $* demo ---
yeyz 1 2 3
-- $@ demo ---
yeyz
1
2
3
ご覧の通り、ループは$@で出力されます。
5.$#
はわかりやすいですね、引数の数を意味します。例
jwfyyzdembp:tmp jwfyyz$ cat test.sh
echo 'The result of $* is':$*
echo 'The result for $@ is':$@
echo 'The result of $# is':$#
jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3
The result of $* is:yeyz 1 2 3
The result of $@ is:yeyz 1 2 3
The result of $# is:4
6.$!
このコマンドは、シェルスクリプトで最後に実行されたバックグラウンドコマンドのプロセスID番号を次のように表示するものです。
jwfyyzdembp:tmp jwfyyz$ cat test.sh
echo 'The result of $* is':$*
echo 'The result for $@ is':$@
echo 'The result of $# is':$#
sleep 10 &
echo 'The result of $! The result of ':$!
sleep 10
jwfyyzdembp:tmp jwfyyz$ sh test.sh yeyz 1 2 3 &
[1] 61237
The result of $* is:yeyz 1 2 3
The result of $@ is:yeyz 1 2 3
The result of $# is:4
The result of $! The result of:61238
jwfyyzdembp:tmp jwfyyz$ ps -ef|grep sleep
501 61238 61237 0 9:12 PM ttys000 0:00.00 sleep 10
501 61239 61237 0 9:12 PM ttys000 0:00.00 sleep 10
501 61241 60529 0 9:12 PM ttys000 0:00.00 grep sleep
test.shでは、sleep 10のようなコマンドでバックグラウンドで実行し、$! ps -efコマンドでプロセス情報を調べると、プロセス61238に対応するコマンドはsleep 10であり、現在のスクリプト実行のプロセス番号を反映した$$と、スクリプト内のコマンドのプロセス番号である$!と区別される。
上記はシェルスクリプトでの$記号の使い方の一例です。シェルの$についての詳しい情報は、スクリプトハウスの他の関連記事を参照してください!
関連
-
Bashスクリプトでの括弧とバッククォートの使用について
-
シェルバッチファイルの作成とリネームのサンプルコード
-
シェルプログラミングにおけるShiftの使い方まとめ
-
Linuxにおけるnohupとバックグラウンド実行プロセスの表示と終了
-
シェルスクリプトで jdk を自動インストールする例
-
新しく追加されたディスクを素早く作成、フォーマット、マウントするためのシェルスクリプト
-
Linuxでシェルスクリプトの先頭に固定書式を設定する方法
-
シェルテキスト処理三銃士におけるsedの使用について
-
シェルでコメントやアンコメントを一括で行う方法
-
Webサイトが生きているかどうかを一括でチェックするスクリプト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン