如何編寫高效的 Shell 指令碼
導讀 | 如果你希望自動執行常規任務並使你的生活更輕鬆,那麼使用 是一個很好的選擇。本文將向你介紹一些基本概念,這些概念將幫助你編寫高效的 Shell 。 |
Shell 指令碼是一種被設計用來執行 行直譯器 UNIX Shell 的計算機程式。Shell 指令碼的各類變種被視作指令碼語言。Shell 指令碼執行的典型操作包括檔案操作、程式執行和文字列印。設定環境、執行程式並執行任何必要的清理或日誌記錄的指令碼稱為封裝。
你可以透過檢視終端視窗中的提示符符號來識別 系統的計算機上的 Shell 命令提示符的使用者是普通使用者還是超級使用者。#符號用於超級使用者,$符號用於具有標準許可權的使用者。
指令碼附帶了很多可以在終端視窗上執行的、用以管理您的計算機的命令。每個命令的詳細資訊可以在該命令附帶的使用手冊中找到。你可以使用如下命令來檢視手冊:
一些常用的命令有:
每個命令都附帶了幾個可以一起使用的選項。你可以參考使用手冊以瞭解更多的細節。
man date
的輸出如圖 1 所示。
Figure 1: Manual of date command
當你希望捕獲檔案中的命令輸出或重定向到檔案時,可以使用重定向運算子。
命令 | 描述 |
ls -l /usr/bin >file | 預設標準輸出到檔案 |
ls -l /usr/bin 2>file | 重定向標準錯誤到檔案 |
ls -l /usr/bin > ls-output 2>&1 | 重定向標準錯誤和標準輸出到檔案 |
ls -l /usr/bin &> ls-output | 重定向標準錯誤和標準輸出到檔案 |
ls -l /usr/bin 2> /dev/null | 寫入
/dev/null ,丟棄輸出 |
大括號擴充套件是 UNIX 提供的強大選項之一。它有助於在一行指令中使用最少的命令完成大量操作。例如:
這條命令會為 2009 到 2011 年裡的每個月建立一個目錄。
環境變數是一個動態命名的值,它可以影響計算機上執行的程式的行為方式。此變數是程式執行環境的一部分。
命令 | 描述 |
printenv | 列印出所有環境變數的值。 |
set | 設定 Shell 選項 |
export | 匯出環境到隨後執行的程式 |
alias | 為命令建立別名 |
網路命令對於排查網路問題和檢查連線到客戶機的特定埠非常有用。
命令 | 描述 |
ping | 傳送 ICMP(網際網路控制訊息協定)資料包 |
traceroute | 列印資料包在網路中的路徑 |
netstat | 列印網路連線資訊、路由表、介面資料 |
ftp/lftp | 網際網路檔案傳輸程式 |
wget | 非互動式網路下載器 |
ssh | OpenSSH SSH 客戶端 (遠端登入程式) |
scp | 安全複製 |
sftp | 安全檔案傳輸程式 |
grep 命令用於查詢系統和日誌中的錯誤。它是 Shell 擁有的強大工具之一。
命令 | 描述 |
grep -h '.zip' file.list | . 表示任意字元 |
grep -h '^zip' file.list | 以 zip 開頭 |
grep -h 'zip$' file.list | 以 zip 結尾 |
grep -h '^zip$' file.list | 只含有 zip |
grep -h '[^bz]zip' file.list | 不含 b 和 z |
grep -h '^[A-Za-z0-9]' file.list | 所有檔名有效的檔案 |
下面是一些量詞的例子:
命令 | 描述 |
? | 匹配出現 0 次或 1 次的元素 |
* | 匹配出現 0 次或多次的元素 |
+ | 匹配出現 1 次或多次的元素 |
{} | 匹配出現特定次數的元素 |
文字處理是當今 IT 世界中的另一項重要任務。程式設計師和管理員可以使用這些命令來切片、剪下和處理文字。
命令 | 描述 |
cat -A $FILE | 顯示
$FILE 檔案的所有內容 |
sort file1.txt file2.txt file3.txt > final_sorted_list.txt | 一次性將所有檔案排序 |
ls - l | sort -nr -k 5 | 按指定的第 5 列進行排序 |
sort --key=1,1 --key=2n distor.txt | 對第 1 列進行排序(預設按字母表順序),對第 2 列進行數值排序 |
sort foo.txt | uniq -c | 查詢重複的行並顯示該行重複的次數 |
cut -f 3 distro.txt | 剪下第 3 列 |
cut -c 7-10 | 剪下 7 - 10 字元 |
cut -d ':' -f 1 /etc/password | 分隔符
: |
sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distro.txt | 按第 3 列第 7 個字元、第 3 列第 1 個字元和第 3 列第 4 個字元排序 |
paste file1.txt file2.txt > newfile.txt | 合併兩個檔案 |
join file1.txt file2.txt | 按公共欄位連線兩個檔案 |
在 Linux 中,我們可以透過使用簡單的命令或控制選項返回到命令的歷史記錄。
命令 | 描述 |
clear | 清空螢幕 |
history | 檢視儲存命令的歷史記錄 |
script filename | 捕獲檔案中的所有命令執行 |
一些歷史命令的技巧:
- CTRL + R:搜尋命令歷史
- !!number:執行編號為number 的命令
- !! :執行上一條命令
- !?string : 執行包含string 的上一條命令
- !string:執行以string 開始的上一條命令
- export HISTCONTROL=ignoredups: 忽略重複條目
- export HISTSIZE=10000:設定儲存的歷史行數
隨著你對 Linux 命令逐漸熟悉,你將能夠編寫封裝指令碼。所有手動任務,如定期備份、清理檔案、監控系統使用情況等,都可以使用指令碼自動完成。在學習高階概念之前,本文將幫助您開始編寫指令碼。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2915603/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何使用zx編寫shell指令碼指令碼
- Shell 指令碼編寫指令碼
- Linux 中高效編寫 Shell 指令碼的 10 個技巧Linux指令碼
- shell 指令碼如何編寫-致初學者指令碼
- 編寫shell指令碼的規範指令碼
- 技能篇:shell教程及指令碼編寫指令碼
- shell編寫服務啟動指令碼指令碼
- 編寫可靠 shell 指令碼的 8 個建議指令碼
- 如何編寫高效的Android程式碼Android
- shell 指令碼寫法:指令碼
- 如何編寫乾淨高效的CSS程式碼CSS
- 10 個實戰及面試常用 Shell 指令碼編寫面試指令碼
- Shell指令碼入門:編寫格式與執行方式指令碼
- Shell:如何寫一個多選選單的指令碼指令碼
- 如何編寫冪等的 Bash 指令碼?- Arslan指令碼
- Linux系統中Shell指令碼編寫的一點心得Linux指令碼
- shell-【技術乾貨】工作中編寫shell指令碼實踐指令碼
- 如何加密shell指令碼加密指令碼
- shell指令碼之if elif寫法指令碼
- shell指令碼寫氣泡排序指令碼排序
- gdb指令碼編寫指令碼
- 編譯FFMPEG原始碼的指令碼編寫案例編譯原始碼指令碼
- 如何用 JMeter 編寫效能測試指令碼?JMeter指令碼
- 編寫高效的Android程式碼Android
- 如何讓shell指令碼自殺指令碼
- 如何編寫測試團隊通用的Jmeter指令碼JMeter指令碼
- shell高效程式設計:shell指令碼從未如此美麗程式設計指令碼
- Shell文字處理編寫單行指令的訣竅
- 寫好shell指令碼的8個建議指令碼
- [轉]寫好shell指令碼的13個技巧指令碼
- 油猴指令碼編寫指令碼
- 編寫git指令碼.shGit指令碼
- 如何編寫冪等的Bash指令碼(函式)? · Fatih Arslan指令碼函式
- 編寫高效能的Java程式碼Java
- 編寫高效能的 Swift 程式碼Swift
- 編寫高效能的 Lua 程式碼
- (轉載)編寫高效的jQuery程式碼jQuery
- shell 指令碼訪問oracle 寫法 (ZT)指令碼Oracle