シェルスクリプトに$0, $? , $! , $$, $*, $#, $@ などのシェルスクリプトとlinuxコマンド実行時の戻り値の意味
2022-02-15 16:53:54
シェルスクリプトで$0, $? , $! , $$$, $*, $#, $@, などのシェルスクリプトとlinuxコマンドの戻り値の意味
(1)シェルスクリプトで$0, $? , $! , $$$, $*, $#, $@, など。
1.1. 簡単な説明
追記:Linux環境でもっと試せばわかると思います。
$$
シェル自体のPID(ProcessID、つまりスクリプトが実行されている現在のシェル)。
プロセスID
番号)
$!
シェルのバックグラウンドで最後に実行されたプロセスの PID (シェルのバックグラウンドで最後に実行されたプロセス) を示します。
プロセスID
番号)
$?
最後に実行したコマンドの終了コード(戻り値)、つまり直前に実行したコマンドの戻り値(最後のコマンドの終了ステータスを示す。0はエラーなし、それ以外はエラーを意味する)
$-
シェルが現在使用しているオプションを表示します、set コマンドと同じ機能です
$*
全パラメータのリスト。""" で囲まれた "$*" の場合と同様に、すべてのパラメータを "$1 $2 ... $n" の形式で出力します。このオプションには、9個以上のパラメータを指定することが可能です。
$@
全パラメータのリスト。""で囲まれた"$@"の場合と同様に、すべての引数を"$1" "$2" ... "$n" として出力してください。
$@ は $* と似ていますが、配列として使うことができます。
$#
シェルに追加するパラメータの数
$0
シェル本体のファイル名
1ドルから$n
シェルに追加される各パラメータの値です。1が第1パラメータ、2が第2パラメータ...。
1.2. スクリプトの例
簡単なスクリプトを書いて実行し、各変数の意味を説明しましょう。
# タッチ変数
# vi変数
スクリプトは次のように読みます。
#! /bin/sh
echo "番号:$#"
echo "scname:$0"。
echo "最初:$1"
echo "2番目:2"
echo "argume:$@"。
終了を保存
スクリプトの実行権限を与える
# chmod +x 変数
スクリプトを実行する
# . /変数 aa bb
番号:2
scname:. /variable
最初:aa
第二:bb
アーギュメント:aa bb
結果分析
結果を表示することで、次のことがわかります。
はスクリプトに渡されたパラメータの数です。
0はスクリプト自体の名前
$1 は、このシェルスクリプトに渡される最初の引数です。
2はシェルスクリプトに渡される2番目のパラメータです
はスクリプトに渡されたすべての引数のリストです
(2) linuxコマンド実行時の戻り値に関する説明
Linuxでは、デスクトッププログラムを起動しても、コンソールでコマンドを実行しても、すべてのプログラムが最後に数値を返しますが、これを戻り値、またはエラー番号と呼びます。
2.1. コンソールの下に、前のプログラムの戻り値を保持する特殊な環境変数 $? があるので、試してみましょう。
$ ls *.png
Diagram1.png eqn.png peazip.png
eqn4.png マンデルブロー.png x2.png
$ echo $?
0
上記のようにいくつかのファイルに対してlsなどのランダムなコマンドを実行して開始し、print $? の値を表示します。
戻り値が0であることがわかりますが、これはどういう意味でしょうか?
戻り値が0である限り、プログラムが正常に実行されたことを意味します〜。
つまり、変数$? の値が0でない場合は、直前のコマンドがエラーで実行されたことを意味します。
2.2. 存在しないファイルをlsしてみることができる。
$ ls linuxgem
ls: linuxgem にアクセスできません。そのようなファイルまたはディレクトリはありません
$ echo $?
2
こうすることで、よくわからない英語のメッセージを大量に出力するようなコマンドでも、正常に実行が終了したかどうかを簡単に確認することができます。
ただし、エコーは疲れるので、プロンプトの中に$?
2.3. 最後のコマンド実行が成功したかどうかの返り値をプロンプトの中に入れてください: export PS1="[\$?
tom@localhost ~ $ export PS1="[\$?] ${PS1}"
[0]tom@localhost ~ $
export PS1="[\$?] ${PS1}" このコマンドは、プロンプトの先頭に$? の値を配置し、コマンド実行のたびに自動的に更新されるので、見やすいです〜。
2.3. perrorでエラーヒントを見る
では、戻り値が0でない場合、どこにエラーがあるのかを知るにはどうすればよいのでしょうか。ほとんどのプログラムはエラーがあればヒントを出しますが、ヒントがない場合はperrorというプログラムを使ってエラーを見ることができます。例えば、戻り値が2であれば、実行することができます。
$ perror 2
OSのエラーコード2:そのようなファイルまたはディレクトリがない
これは、ファイルが存在しないことを明確にするものです〜。
2.4. エラーコードとその具体的な原因について、クロスリファレンスを示す。
"OS error code 1: Operation not permitted"
"OS error code 2: No such file or directory"
"OS error code 3: No such process"
"OS error code 4: Interrupted system call"
"OS error code 5: Input/output error"
"OS error code 6: No such device or address"
"OS error code 7: Argument list too long"
"OS error code 8: Exec format error"
"OS error code 9: Bad file descriptor"
"OS error code 10: No child processes"
"OS error code 11: Resource temporarily unavailable"
"OS error code 12: Cannot allocate memory"
"OS error code 13: Permission denied"
"OS error code 14: Bad address"
"OS error code 15: Block device required"
"OS error code 16: Device or resource busy"
"OS error code 17: File exists"
"OS error code 18: Invalid cross-device link"
"OS error code 19: No such device"
"OS error code 20: Not a directory"
"OS error code 21: Is a directory"
"OS error code 22: Invalid argument"
"OS error code 23: Too many open files in system"
"OS error code 24: Too many open files"
"OS error code 25: Inappropriate ioctl for device"
"OS error code 26: Text file busy"
"OS error code 27: File too large"
"OS error code 28: No space left on device"
"OS error code 29: Illegal seek"
"OS error code 30: Read-only file system"
"OS error code 31: Too many links"
"OS error code 32: Broken pipe"
"OS error code 33: Numerical argument out of domain"
"OS error code 34: Numerical result out of range"
"OS error code 35: Resource deadlock avoided"
"OS error code 36: File name too long"
"OS error code 37: No locks available"
"
関連
-
"collect2: error: ld returned 1 exit status" の解決法
-
Racer版 - CentOS7システムインストールと構成図のチュートリアル
-
Linux の ssh 公開鍵の追加
-
LinuxでのPythonとpipのインストールと "AttributeError: module 'pip.__main__' has no attribute '_main'エラー"
-
psycopgのアセンブルはエラーになります。Error: pg_config 実行ファイルが見つかりません。
-
ImportError: pkg_resources という名前のモジュールがない ソリューション
-
Linuxの一般的なコマンドを史上最も完璧にまとめた本(超充実! (超詳しい!)これだけ集めれば十分!?
-
これを知らなければ、おそらくLinuxを使い始めてもいないでしょう
-
ubuntuでグローバルシステムエージェントを設定する
-
centos - centos7 で Python プログラムをバックグラウンドで実行する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
linuxのインストールファイルでは、configure: error: no acceptable C compiler found in $PATH errorが表示されます。
-
[エラーログ】シェルスクリプトによって報告された曖昧なリダイレクトを解決する
-
mvn -v error: main class not found or couldn't be loaded org.codehaus.plexus.classworlds.launcher.
-
Nvidia グラフィックスカード 初期化に失敗しました NVML Driver/library version mismatch エラー解決法
-
警告: 組み込み関数 'exit' の非互換な暗黙の宣言
-
centos 7.2 make: *** `default' が必要とする `build' をターゲットとするルールがありません。停止します。
-
mach-mini2440.c:155: error: array type has incomplete element type
-
Linuxでプログラム実行時にTextファイルがビジーになる問題の解決方法です。
-
pow関数に対する解決策 gcc compile prompt undefined reference to `power'
-
Ansibleの通常ユーザーsudoがコマンドを実行します。