1. 程式人生 > 遊戲 >《荒野大鏢客OL》“不義之財”7月13日上線 預告公開

《荒野大鏢客OL》“不義之財”7月13日上線 預告公開

Shell指令碼中\(0、\)?、\(!、\)\(、\)*、\(#、\)@等的意義以及linux命令執行返回值代表意義

Shell指令碼中\(0、\)?、\(!、\)\(、\)*、\(/#、\)@等的意義說明

簡要說明

 ps: 你在Linux環境下多試下就明白了
$$
Shell本身的PID(ProcessID,即指令碼執行的當前 程序ID號)
$!
Shell最後執行的後臺Process的PID(後臺執行的最後一個程序的 程序ID號)
$?
最後執行的命令的結束程式碼(返回值)即執行上一個指令的返回值 (顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤)
$-
顯示shell使用的當前選項,與set命令功能相同
$*
所有引數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有引數,此選項引數可超過9個。
$@
所有引數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有引數。
$@ 跟$*類似,但是可以當作陣列用
$#
新增到Shell的引數個數
$0
Shell本身的檔名
$1~$n
新增到Shell的各引數值。$1是第1引數、$2是第2引數…。 

指令碼舉例

 我們先寫一個簡單的指令碼,執行以後再解釋各個變數的意義
# touch variable
# vi variable
指令碼內容如下:
#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
儲存退出
賦予指令碼執行許可權
# chmod +x variable
執行指令碼
# ./variable aa bb
number:2
scname:./variable
first: aa
second:bb
argume:aa bb

結果分析

通過顯示結果可以看到:
$# 是傳給指令碼的引數個數
$0 是指令碼本身的名字
$1是傳遞給該shell指令碼的第一個引數
\(2是傳遞給該shell指令碼的第二個引數 \)

@ 是傳給指令碼的所有引數的列表

linux命令執行返回值說明

在 Linux 下,不管你是啟動一個桌面程式也好,還是在控制檯下執行命令,所有的程式在結束時,都會返回一個數字值,這個值叫做返回值,或者稱為錯誤號 ( Error Number )。

在控制檯下,有一個特殊的環境變數 $?,儲存著前一個程式的返回值,我們可以試試:

$ ls *.png
Diagram1.png  eqn.png         peazip.png
eqn4.png      Mandelbrot.png  x2.png
$ echo $?
0

先隨便執行個命令,比如像上面的 ls 某些檔案,然後通過 echo $?,列印 $? 的值~
我們發現返回值是 0,這是什麼意思呢?
只要返回值是 0,就代表程式執行成功了~
也就是說,如果 $? 變數的值不是 0 的話,就表示上一個命令在執行的過程中出錯了。

我們可以試著 ls 一個不存在的檔案:

$ ls linuxgem
ls: 無法訪問 linuxgem: 沒有那個檔案或目錄
$ echo $?
2

這樣,對於某些打印出一堆不熟悉的英文資訊的命令,可以方便的看出它是否成功執行結束。
不過,每次都 echo $? 一下太累了,沒關係,你可以把 $? 放在提示符裡去:

將上次命令執行是否成功的返回值放到提示符裡面去:

export PS1="[\$?]${PS1}"

tom@localhost ~ $ export PS1="[\$?]${PS1}"
[0]tom@localhost ~ $

export PS1="[\$?]${PS1}"  

這個命令把 $? 的值放在的提示符的最前面,這樣每次執行完命令,這個值都會自動更新,這下就一目瞭然了~

用perror檢視錯誤提示

那麼如果返回的值不是 0,我們要怎麼知道是那裡出錯了呢? 大多數的程式出錯都會給出提示,如果沒有提示的話,可以用 perror 這個程式來檢視錯誤的資訊,比如返回值是 2,我們可以執行:

$ perror 2
OS error code   2:  No such file or directory

這樣就清楚了,原來是檔案不存在~