shell腳本中$!、$@、$#、$$、$0、$1、$2、$*的含義


一、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM