一些 Shell 腳本的基本概念

Shell 腳本是一種被設計用來運行命令行解釋器 UNIX Shell 的計算機程序。Shell 腳本的各類變種被視作腳本語言。Shell 腳本執(zhí)行的典型操作包括文件操作、程序執(zhí)行和文本打印。設置環(huán)境、運行程序并執(zhí)行任何必要的清理或日志記錄的腳本稱為封裝。
識別 Shell 命令提示符
你可以通過查看終端窗口中的提示符符號來識別 Linux 系統(tǒng)的計算機上的 Shell 命令提示符的用戶是普通用戶還是超級用戶。??#?? 符號用于超級用戶,??$?? 符號用于具有標準權限的用戶。
基本命令
腳本附帶了很多可以在終端窗口上執(zhí)行的、用以管理您的計算機的命令。每個命令的詳細信息可以在該命令附帶的使用手冊中找到。你可以使用如下命令來查看手冊:
一些常用的命令有:
每個命令都附帶了幾個可以一起使用的選項。你可以參考使用手冊以了解更多的細節(jié)。??man date?? 的輸出如圖 1 所示。

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















 
 
 
 
 
 
 