一些 Shell 腳本的基本概念
Shell 腳本是一種被設計用來運行命令行解釋器 UNIX Shell 的計算機程序。Shell 腳本的各類變種被視作腳本語言。Shell 腳本執行的典型操作包括文件操作、程序執行和文本打印。設置環境、運行程序并執行任何必要的清理或日志記錄的腳本稱為封裝。
識別 Shell 命令提示符
你可以通過查看終端窗口中的提示符符號來識別 Linux 系統的計算機上的 Shell 命令提示符的用戶是普通用戶還是超級用戶。??#?
? 符號用于超級用戶,??$?
? 符號用于具有標準權限的用戶。
基本命令
腳本附帶了很多可以在終端窗口上執行的、用以管理您的計算機的命令。每個命令的詳細信息可以在該命令附帶的使用手冊中找到。你可以使用如下命令來查看手冊:
一些常用的命令有:
每個命令都附帶了幾個可以一起使用的選項。你可以參考使用手冊以了解更多的細節。??man date?
? 的輸出如圖 1 所示。
Figure 1: Manual of date command
重定向操作符
當你希望捕獲文件中的命令輸出或重定向到文件時,可以使用重定向操作符。
命令 | 描述 |
? | 默認標準輸出到文件 |
? | 重定向標準錯誤到文件 |
? | 重定向標準錯誤和標準輸出到文件 |
? | 重定向標準錯誤和標準輸出到文件 |
? | 寫入 ? |
大括號擴展
大括號擴展是 UNIX 提供的強大選項之一。它有助于在一行指令中使用最少的命令完成大量操作。例如:
這條命令會為 2009 到 2011 年里的每個月建立一個目錄。
環境變量
環境變量是一個動態命名的值,它可以影響計算機上運行的進程的行為方式。此變量是進程運行環境的一部分。
命令 | 描述 |
? | 打印出所有環境變量的值。 |
? | 設置 Shell 選項 |
? | 導出環境到隨后執行的程序 |
? | 為命令創建別名 |
網絡命令
網絡命令對于排查網絡問題和檢查連接到客戶機的特定端口非常有用。
命令 | 描述 |
? | 發送 ICMP(網際網路控制訊息協定)數據包 |
? | 打印數據包在網絡中的路徑 |
? | 打印網絡連接信息、路由表、接口數據 |
? | 互聯網文件傳輸程序 |
? | 非交互式網絡下載器 |
? | OpenSSH SSH 客戶端 (遠程登錄程序) |
? | 安全拷貝 |
? | 安全文件傳輸程序 |
grep 命令
??grep?
? 命令用于查找系統和日志中的錯誤。它是 Shell 擁有的強大工具之一。
命令 | 描述 |
? | ? |
? | 以 ? |
? | 以 ? |
? | 只含有 ? |
? | 不含 ? |
? | 所有文件名有效的文件 |
量詞
下面是一些量詞的例子:
命令 | 描述 |
? | 匹配出現 0 次或 1 次的元素 |
? | 匹配出現 0 次或多次的元素 |
? | 匹配出現 1 次或多次的元素 |
? | 匹配出現特定次數的元素 |
文本處理
文本處理是當今 IT 世界中的另一項重要任務。程序員和管理員可以使用這些命令來切片、剪切和處理文本。
命令 | 描述 |
? | 顯示 ? |
? | 一次性將所有文件排序 |
? | 按指定的第 5 列進行排序 |
? | 對第 1 列進行排序(默認按字母表順序),對第 2 列進行數值排序 |
? | 查找重復的行并顯示該行重復的次數 |
? | 剪切第 3 列 |
? | 剪切 7 - 10 字符 |
? | 分隔符 ? |
? | 按第 3 列第 7 個字符、第 3 列第 1 個字符和第 3 列第 4 個字符排序 |
? | 合并兩個文件 |
? | 按公共字段連接兩個文件 |
竅門和技巧
在 Linux 中,我們可以通過使用簡單的命令或控制選項返回到命令的歷史記錄。
命令 | 描述 |
? | 清空屏幕 |
? | 查看保存命令的歷史記錄 |
? | 捕獲文件中的所有命令執行 |
一些歷史命令的技巧:
- ?
?CTRL + R?
?: 搜索命令歷史 - ?
?!!number?
?:執行編號為??number?
? 的命令 - ?
?!!?
? :執行上一條命令 - ?
?!?string?
? : 執行包含??string?
? 的上一條命令 - ?
?!string?
?:執行以??string?
? 開始的上一條命令 - ?
?export HISTCONTROL=ignoredups?
?: 忽略重復條目 - ?
?export HISTSIZE=10000?
?:設置存儲的歷史行數
隨著你對 Linux 命令逐漸熟悉,你將能夠編寫封裝腳本。所有手動任務,如定期備份、清理文件、監控系統使用情況等,都可以使用腳本自動完成。在學習高級概念之前,本文將幫助您開始編寫腳本。