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