shell 腳本編程學習(七) 信號和數組

信號處理

在 linux 中信號用來通知進程發生的異步事件,例如我們按下 ctrl + c 鍵將向當前進程發送 SIGINT 即程序終止(interrupt)信號,顧名思義這個信號的默認處理方式是終止程序,但有時我們想在終止前做一些自定義的處理比如記錄日誌,刪除臨時文件等,在 shell 腳本中我們可以用 trap 命令來捕獲和處理信號。

#!/bin/bash

# 處理終止信號例子

# 自定以的終止信號處理函數
onInt () {
    # 在終止前打印信號接收時間和信號名
    echo "$(date) SIGINT"
}

# 用 trap 命令捕獲 SIGINT 即 2 信號,指定 onInt 爲處理函數
trap onInt 2

# cat 命令等待用戶輸入,這樣我們纔有機會按 ctrl + c 發送信號
cat

trap 後面可以跟多個信號,從而爲多個信號指定同一個處理函數。如果要爲不同的信號指定不同的處理函數,多用幾次 trap 命令即可。

數組

數組是很實用的一種數據結構,shell 腳本也支持數組,使用方法如下:

#!/bin/bash

# shell 數組用法

# 指定數組某一項的值
array1[0]=1

# 聲明數組的多個值,他們的鍵將從 0 開始遞增
array2=(1 2 3 4)

# 通過鍵值對的方式同時設置數組的多個鍵值
array3=([0]=1 [3]=2 [7]=3 [10]=4)

# 取數組的值,使用 ${} 花括號的形式解引用
${array1[0]}

# 也可以用一些特殊符號來獲得數組數據
${array2[@]} # 獲得數組的所有內容
${#array2[@]} # 獲得數組的長度

# 截取數組
${array2[@]:3} # 下標 3 以及它之後的元素組成的子數組
${array2[@]:3:2} # 從下標 3 開始取 2 個元素組成的子數組

# 從數組中刪除元素
unset array2[1] # 刪除數組下標爲 1 的元素
unset array2[@] # 刪除數組中的所有元素
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章