一些 Shell 腳本的基本概念
Shell 腳本是一種被設計用來運行命令行解釋器 UNIX Shell 的計算機程序。Shell 腳本的各類變種被視作腳本語言。Shell 腳本執行的典型操作包括文件操作、程序執行和文本列印。設置環境、運行程序並執行任何必要的清理或日誌記錄的腳本稱為封裝。
識別 Shell 命令提示符
你可以通過查看終端窗口中的提示符符號來識別 Linux 系統的計算機上的 Shell 命令提示符的用戶是普通用戶還是超級用戶。#
符號用於超級用戶,$
符號用於具有標準許可權的用戶。
基本命令
腳本附帶了很多可以在終端窗口上執行的、用以管理您的計算機的命令。每個命令的詳細信息可以在該命令附帶的使用手冊中找到。你可以使用如下命令來查看手冊:
man <command>
一些常用的命令有:
date # 顯示當前日期和時間
cal # 顯示當前月份日曆
df # 顯示磁碟使用情況
free # 顯示內存使用情況
ls # 列出文件和目錄
mkdir # 創建目錄
每個命令都附帶了幾個可以一起使用的選項。你可以參考使用手冊以了解更多的細節。man date
的輸出如圖 1 所示。
重定向操作符
當你希望捕獲文件中的命令輸出或重定向到文件時,可以使用重定向操作符。
命令 | 描述 |
---|---|
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 提供的強大選項之一。它有助於在一行指令中使用最少的命令完成大量操作。例如:
$echo Front-{A,B,C}-Back
Front-A-Back, Front-B-Back, Front-C-Back
$echo {Z..A}
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
$mkdir {2009..2011}-0{1..9} {2009..2011}-{10..12}
這條命令會為 2009 到 2011 年裡的每個月建立一個目錄。
環境變數
環境變數是一個動態命名的值,它可以影響計算機上運行的進程的行為方式。此變數是進程運行環境的一部分。
命令 | 描述 |
---|---|
printenv |
列印出所有環境變數的值。 |
set |
設置 Shell 選項 |
export |
導出環境到隨後執行的程序 |
alias |
為命令創建別名 |
網路命令
網路命令對於排查網路問題和檢查連接到客戶機的特定埠非常有用。
命令 | 描述 |
---|---|
ping |
發送 ICMP(網際網路控制訊息協定)數據包 |
traceroute |
列印數據包在網路中的路徑 |
netstat |
列印網路連接信息、路由表、介面數據 |
ftp /lftp |
互聯網文件傳輸程序 |
wget |
非互動式網路下載器 |
ssh |
OpenSSH SSH 客戶端 (遠程登錄程序) |
scp |
安全拷貝 |
sftp |
安全文件傳輸程序 |
grep 命令
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 命令逐漸熟悉,你將能夠編寫封裝腳本。所有手動任務,如定期備份、清理文件、監控系統使用情況等,都可以使用腳本自動完成。在學習高級概念之前,本文將幫助您開始編寫腳本。
via: https://www.opensourceforu.com/2022/05/the-basic-concepts-of-shell-scripting/
作者:Sathyanarayanan Thangavelu 選題:lkxed 譯者:FYJNEVERFOLLOWS 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive