『忘了再學』Shell基礎 — 17、預定義變數
- 2022 年 5 月 24 日
- 筆記
- 高級測試技能 - Shell基礎
我們之前說過,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多命令順序執行的時候,文章如下:
//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 $!"
提示:將命令放入後台執行,請查看文章://www.cnblogs.com/liuyuelinfighting/p/15710694.html。