一、shell腳本中$!、$@、$#、$$、$0、$1、$2、$*的含義
$! :Shell最后運行的后台Process的PID(后台運行的最后一個進程的進程ID號)
$#:添加到shell當中參數的個數
$$:Shell本身的PID(ProcessID,即腳本運行的當前進程ID號)
$0:腳本本身的文件名
$1:傳到Shell當中的第一個參數
$2:傳到Shell當中的第二個參數
$*:所有參數列表。如$*用" "括起來的情況、以"$1 $2 … $n"的形式輸出所有參數,此選項參數可超過9個;若不加" ",那么$*與$@的輸出結果相同
$@:所有參數列表。如$@用" "括起來的情況、以"$1" 、"$2"、 … "$n" 的形式輸出所有參數。
腳本舉例:
echo "number:" $# echo "PID:" $$ echo "sname:" $0 echo "first:" $1 echo "second:" $2 echo $@ echo $* echo "" echo "==========" n=1 for i in "$@" do echo "$n : " $i let n+=1 done echo "" echo "==========" n=1 for i in "$*" do echo "$n : " $i let n+=1 done echo "" echo "==========" n=1 for i in $* do echo "$n : " $i let n+=1 done
結果:
# ./value.sh 1 2 3 4
number: 4
PID: 5445
sname: ./value.sh
first: 1
second: 2
1 2 3 4
1 2 3 4
==========
1 : 1
2 : 2
3 : 3
4 : 4
==========
1 : 1 2 3 4
==========
1 : 1
2 : 2
3 : 3
4 : 4
分析:
$#:傳給腳本的參數個數
$$:腳本自己的PID號
$0:腳本自身的名字
$1 ~ $n:參數1 ~ 參數n
$@與$*的區別:
$@與$*都可以使用一個變量來來表示所有的參數內容,但這兩個變量之間有一些不同之處。
$@:將輸入的所有參數作為一個列表對象
$*:將輸入的所有參數作為一個變量
在上面的例子中,使用$@與$*是,都是用雙引號引起來,但當$*不使用雙引號時,結果與$@的結果相同。
二、關於$?
$?:獲取函數的返回值或者上一個命令的退出狀態 。如果成功就是0,失敗為1。
在腳本中,我們常用if [ $? -eq 0 ] 來判斷一個命令有沒有執行成功。
示例:
ps -fe | grep test | grep -v grep if [ $? -eq 0 ] then echo "Process test is running!" else echo "Process test don not run!" fi
注意,if后面的中括號[ $? -eq 0 ],括號的兩邊各需要有一個空格。
原文:https://blog.csdn.net/csdnxmj/article/details/103978774