シェルは知っている必要があります| 2。必要な特別なシェルキャラクターがここにあります!

  目次

1.シェルの特殊文字

1.1 $ N 

1.2 $#

1.3 $ *

1.5ドル?

1.6 $$

1.7ドル!

1.8 $-

2、まとめ


シェルスクリプトを作成するときは、通常、$?、$ @などの特殊文字が使用されます。この記事では、すべてのシェル特殊文字を例とともに紹介します。最初にそれらを収集することをお勧めします。

1.シェルの特殊文字

1.1 $ N 

以下に示すように、Nは数値を表し、$ 0は現在のスクリプトファイル名を表し、$ N(N> 0)はスクリプトに入力されたN番目の入力パラメーターを表します。

[root@localhost ~]# cat shell.sh
#!/bin/bash

echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

[root@localhost ~]# ./shell.sh 1 2 3 4 5 6 7 8 9 10
./shell.sh 1 2 3 4 5 6 7 8 9 10
[root@localhost ~]#

注: $ 0出力は./shell.shです。

1.2 $#

スクリプトまたは関数に渡されるパラメーターの数は次のとおりです。

[root@localhost ~]# cat shell.sh
#!/bin/bash

echo $#
[root@localhost ~]# ./shell.sh 1 2 3
3
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bash

funcTest() {
    echo $#
}

funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh 
4
[root@localhost ~]# 

1.3 $ *

 以下に示すように、スクリプトまたは関数に渡されるすべてのパラメーターを表します。

[root@localhost ~]# cat shell.sh 
#!/bin/bash

echo $*
[root@localhost ~]# ./shell.sh 1 2 3 4 5
1 2 3 4 5
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bash

funcTest() {
    echo $*
}

funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh 
1 2 3 4
[root@localhost ~]#

1.4 $ @

以下に示すように、スクリプトまたは関数に渡されるすべてのパラメーターを表します。

[root@localhost ~]# cat shell.sh 
#!/bin/bash

echo $@
[root@localhost ~]# ./shell.sh 1 2 3 4 5
1 2 3 4 5
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bash

funcTest() {
    echo $@
}

funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh 
1 2 3 4
[root@localhost ~]#

 $ @$ *の違い:

  • 二重引用符で囲まれていない場合、2つの記号は同じであり、両方とも$ 1 $ 2 $ 3 ......の形式で出力されます。
  • 二重引用符で囲むと、$ *はすべてのパラメーターを全体として出力します(例: "$ 1 $ 2 $ 3……")。$ @は各パラメーターを区切ります。例:$ 1 $ 2 $ 3……;

例を通して見てみましょう:

以下に示すように、最初に同じ状況を見てください。

[root@localhost ~]# cat shell.sh 
#!/bin/bash

echo "\$*"
for i in $*
do
    echo $i
done

echo "\$@"
for i in $@
do
    echo $i
done
[root@localhost ~]# ./shell.sh 1 2 3 4 5
$*
1
2
3
4
5
$@
1
2
3
4
5
[root@localhost ~]#

以下に示すように、違いを見てください。

[root@localhost ~]# cat shell.sh 
#!/bin/bash

echo "\$*"
for i in "$*"
do
    echo $i
done

echo "\$@"
for i in "$@"
do
    echo $i
done
[root@localhost ~]# ./shell.sh 1 2 3 4 5
$*
1 2 3 4 5
$@
1
2
3
4
5
[root@localhost ~]# 

上記の例では、二重引用符で囲まれた$ *に含まれるすべてのパラメーターが全体として見なされ、「1 2 3 4 5」が直接出力され、$ @のパラメーターは引き続き分離されます。

1.5ドル?

以下に示すように、前のコマンドの終了ステータスまたは関数の戻り値を示します。

[root@localhost ~]# cat shell.sh 
#!/bin/bash

pwd
echo $?

ls -l /root/abc
echo $?
[root@localhost ~]# ./shell.sh 
/root
0
ls: 无法访问/root/abc: 没有那个文件或目录
2
[root@localhost ~]#

最初の$?の値は0であり、コマンドpwdが正常に実行されたことを示し、2番目の$?の値は2であり、最後のコマンドlsが実行に失敗したことを示します。

[root@localhost ~]# cat shell.sh 
#!/bin/bash

funcTest(){
    return 6
}

funcTest
echo $?
[root@localhost ~]# ./shell.sh 
6
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bash

funcTest(){
    echo "abc"
}

val=$(funcTest)
echo $?
[root@localhost ~]# ./shell.sh 
0
[root@localhost ~]#

関数で$?を使用する場合、returnステートメントがあると、returnステートメントによって返される値が取得され、範囲は0〜255です。returnステートメントがない場合、$?の値は、関数で最後に実行されたコマンドの戻りコードを表します。

1.6 $$

以下に示すように、スクリプトの現在のプロセスのID番号を表します。 

[root@localhost ~]# cat shell.sh 
#!/bin/bash

echo $$
[root@localhost ~]# ./shell.sh 
26033
[root@localhost ~]# 

1.7ドル!

表すのID番号の最後の実行中の処理の背景を、また、必ずしも終了していない最も最近実行されているプロセスのID番号、として理解することができます。

[root@localhost ~]# top &
[2] 31702
[root@localhost ~]# echo $!
31702

[2]+  已停止               top
[root@localhost ~]#

1.8 $-

以下に示すように、setコマンドと同じ機能を持つShellコマンドで使用されている現在のオプションを表示します。

[root@localhost ~]# cat shell.sh 
#!/bin/bash

set -m
echo $-

set -C
echo $-
[root@localhost ~]# ./shell.sh 
hmB
hmBC
[root@localhost ~]#

 注: 2番目の出力では、設定したばかりのパラメーターCが追加されます。

2、まとめ

さて、シェルの特殊文字と例を組み合わせた説明は終了です。気持ちが良ければ、トリプル接続をワンクリックするだけです。ご不明な点がございましたら、コメント欄にメッセージを残してください〜

おすすめ

転載: blog.csdn.net/u011074149/article/details/112797011