我們之前說過,Shell中的變數不是按照變數值的型別來進行分類的,而是按照Linux系統中定義的變數類別來分類的。
預定義變數就是,事先把變數的名稱和作用確定好(都是不可變的),只能修改變數的內容,也就是變數的值。
其實預定義變數和位置引數變數都可以統稱為預定義變數(有分開說明的,也有一起說明的,知道就行)。
預定義變數如下:
預定義變數 | 作用 |
---|---|
$? |
$? 中存的值,是最後一次執行的命令的返回狀態。如果這個變數的值為0,證明上一個命令正確執行; 如果這個變數的值為非0(具體是哪個數,由命令自己來決定), 則證明上一個命令執行不正確了。(常用) |
$$ |
當前程式的程式號(PID)。 |
$! |
後臺執行的最後一個程式的程式號(PID)。 |
1、預定義變數$?
$?
這個預定義變數,在我們寫Shell指令碼的時候,還是比較常用。
我們下邊來寫一個例子進行說明。
# 執行ls命令
# ls命令正確執行
[root@Lyl tmp]# ls
count.sh for.sh parameter.sh param.sh
# 預定義變數"$?"的值是0,證明上一個命令執行正確,
# "$?"記錄的是在執行"$?",或者值查詢"$?"之前,
# 最後一條命令的執行返回狀態。
[root@Lyl tmp]# echo $?
0
# 當前目錄中沒有install.log檔案,所以ls命令報錯了。
[root@Lyl tmp]# ls install.log
ls: 無法訪問install.log: 沒有那個檔案或目錄
# 變數"$?"返回一個非0的值,證明上一個命令沒有正確執行,
# 至於錯誤的返回值到底是多少,是在編寫ls命令時定義好的,
# 如果碰到檔案不存在就返回數值2。
[root@Lyl tmp]# echo $?
2
# 輸出錯誤命令的時候,命令狀態返回值一般都是127。
[root@Lyl tmp]# adfasdf
-bash: adfasdf: command not found
[root@Lyl tmp]# echo $?
127
預定義變數$?
的常用使用方式:
比如在寫一個指令碼的時候,要判斷apache
服務是否在執行。
有很多種實現方式,
比如搜尋Linux系統中是否有apache
服務的程式id
號,如果能找到,$?
的返回值為0,就確認了apache
服務正在執行。
如果$?
值不等於0,則證明apache
服務沒有啟動。
有一個例子,我們前邊在說Bash多命令順序執行的時候,文章如下:
https://www.cnblogs.com/liuyuelinfighting/p/16082830.html
判斷的條件就是$?=0
。
2、預定義變數$$
和$!
預定義變數$$
和$!
,在實際工作中用的不多,瞭解一下。(但是都要記住)
Linux系統下的程式是依賴程式的id
號進行區分的,叫做pid
,也就是程式id
。
# 定義一個指令碼variable.sh
[root@Lyl tmp]# variable.sh
# 指令碼內容如下:
#!/bin/bash
# 輸出當前程式的PID。
# 這個PID就是variable.sh這個指令碼執行時,生成的程式的PID。
echo "The current process is $$"
# 使用find命令在root目錄下查詢hello.sh檔案
# 符號&的意思是把命令放入後臺執行。
find /root -name hello.sh &
# 輸出這個後臺執行命令的程式的PID,
# 也就是輸出find命令的PID號
echo "The last one Daemon process is $!"
提示:將命令放入後臺執行,請檢視文章:https://www.cnblogs.com/liuyuelinfighting/p/15710694.html。