Linux中變量#,@,0,1,2,*,$$,$?的含義

$# 是傳給腳本的參數個數

$0 是腳本本身的名字

$1 是傳遞給該shell腳本的第一個參數

$2 是傳遞給該shell腳本的第二個參數

$@ 是傳給腳本的所有參數的列表

$* 是以一個單字符串顯示所有向腳本傳遞的參數,與位置變量不同,參數可超過9

$$ 是腳本運行的當前進程ID

$? 是顯示最後命令的退出狀態,0表示沒有錯誤,其他表示有錯誤

$-記錄着當前設置的shell選項


區別:@* 相同點:都是引用所有參數

  • 不同點:只有在雙引號中體現出來。假設在腳本運行時寫了三個參數(分別存儲在12 3)則"*" 等價於 “12 3"(傳遞了一個參數);而“@" 等價於 "1""2" "$3"(傳遞了三個參數)

例子一

copycode.gif

##dels.sh

echo "number:$#"

echo "scname:$0"

echo "first :$1"

echo "second:$2"

echo "argume:$@"

echo "show parm list:$*"

echo "show process id:$$"

echo "show precomm stat: $?"

copycode.gif

執行結果


[@jihite]$ sh del.sh 1 2 3

number:3

scname:del.sh

first: 1

second:2

argume:1 2 3

show parm list:1 2 3

show process id:21057

show precomm stat: 0

例子二

copycode.gif

#!/bin/sh

num=$#

name=$0

echo "number:$num"

echo "scname:$name"

echo $0

echo $1

echo $2


for ((i=0; i<$num; i++))

do

    echo "$i"

done


echo "argume:$@"

for key in $@

do

    echo $key

done

echo "-----------------"

for key in "$@"

do

    echo $key

done

echo "-----------------------------"

for key2 in $*

do 

    echo $key2

done

echo "-----------------"

for key2 in "$*"

do 

    echo $key2

done


echo "show process id:$$"

cho

echo "show precomm stat: $?"

copycode.gif

執行結果


[@jihite]$ sh del.sh a b                                                      

number:2

scname:del.sh

del.sh

a

b

0

1

argume:a b

a

b

-----------------

a

b

-----------------------------

a

b

-----------------

a b

show process id:23582

del.sh: line 37: cho: command not found

show precomm stat: 127


問題:

echo #0 #1 能不能用 $i 表示呢?



$-記錄着當前設置的shell選項,himBH是默認值,5個字母分別有各自含義。解釋如下:

  • hhashall,打開這個選項後,Shell 會將命令所在的路徑記錄下來,避免每次都要查詢。舉例:當h選項開啓時,如果將某個自定義命令從/usr/bin/目錄下移動到/usr/local/bin/,再運行,會提示無此命令。而當通過set +hh選項關閉後,上述情況就不會出現。
  • iinteractive-comments,包含這個選項說明當前的 shell 是一個交互式的 shell。所謂的交互式shell,就是輸入命令後,shell解釋執行,然後返回一個結果。在腳本中,i選項是關閉的。
  • mmonitor,打開監控模式,就可以通過Job control來控制進程的停止、繼續,後臺或者前臺執行等。
  • Bbraceexpand,大括號擴展。舉例如下:

lenovo@lenovo-DK ~

$ ls

A_File

 

lenovo@lenovo-DK ~

$ cp A_File{,.back_up}

 

lenovo@lenovo-DK ~

$ ls

A_File  A_File.back_up

        如果關閉B選項,那麼shell就不會將大括號擴展。

    5.  HhistoryShell 會把我們執行的命令記錄下來,可以通過 history 命令查看,每一行是序號 + 執行的命令,在 shell 退出時,會將這些信息保存到~/.bash_history 文件中。如果H選項打開,就可以展開歷史列表中的命令,可以通過!感嘆號來完成,例如"!!"返回上最近的一個歷史命令,"!n"返回第 n 個歷史命令,等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章