Linux中國

一些 Shell 腳本的基本概念

Shell 腳本是一種被設計用來運行命令行解釋器 UNIX Shell 的計算機程序。Shell 腳本的各類變種被視作腳本語言。Shell 腳本執行的典型操作包括文件操作、程序執行和文本列印。設置環境、運行程序並執行任何必要的清理或日誌記錄的腳本稱為封裝。

識別 Shell 命令提示符

你可以通過查看終端窗口中的提示符符號來識別 Linux 系統的計算機上的 Shell 命令提示符的用戶是普通用戶還是超級用戶。# 符號用於超級用戶,$ 符號用於具有標準許可權的用戶。

基本命令

腳本附帶了很多可以在終端窗口上執行的、用以管理您的計算機的命令。每個命令的詳細信息可以在該命令附帶的使用手冊中找到。你可以使用如下命令來查看手冊:

man <command>

一些常用的命令有:

date # 顯示當前日期和時間
cal # 顯示當前月份日曆
df # 顯示磁碟使用情況
free # 顯示內存使用情況
ls # 列出文件和目錄
mkdir # 創建目錄

每個命令都附帶了幾個可以一起使用的選項。你可以參考使用手冊以了解更多的細節。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 提供的強大選項之一。它有助於在一行指令中使用最少的命令完成大量操作。例如:

$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 &apos;.zip&apos; file.list . 表示任意字元
grep -h &apos;^zip&apos; file.list zip 開頭
grep -h &apos;zip$&apos; file.list zip 結尾
grep -h &apos;^zip$&apos; file.list 只含有 zip
grep -h &apos;[^bz]zip&apos; file.list 不含 bz
grep -h &apos;^[A-Za-z0-9]&apos; 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 &apos;:&apos; -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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國