前言:之前寫過一篇介紹Linux系統基本技能的文章,文章的最後放了一張基本操作的思維導圖,把這張圖掌握了,就能像使用wins系統一樣使用linux系統了。

青山屋主:生信自學之linux操作基礎?

zhuanlan.zhihu.com
圖標

這之後需要學什麼呢?需要繼續學習寫shell腳本,用腳本來處理數量龐大的且重複性高的工作。本系列就從shell和bash的介紹開始,教大家如何用把shell命令寫成可以重複使用的腳本。

說明:本文是對Vamei知乎文章Vamei:快速學習Bash一文的學習筆記,根據個人理解調整了內容順序,補充了一些注釋和說明等內容。

1. shell和bash

shell是運行在終端中的文本互動程序,bash(GNU Bourne-Again Shell)是最常用的一種shell。是當前大多數Linux發行版的默認Shell。

Shell相當於是一個翻譯,把我們在計算機上的操作或我們的命令,翻譯為計算機可識別的二進位命令,傳遞給內核,以便調用計算機硬體執行相關的操作;同時,計算機執行完命令後,再通過Shell翻譯成自然語言,呈現在我們面前。

其他的shell還有:sh、bash、ksh、rsh、csh等。Ubuntu系統常用的是bash,Bio-linux系統是基於ubuntu定製的,但是卻使用了zsh。

sh的全名是Bourne Shell。名字中的玻恩就是這個Shell的作者。

而bash的全名是Bourne Again Shell。最開始在Unix系統中流行的是sh,而bash作為sh的改進版本,提供了更加豐富的功能。一般來說,都推薦使用bash作為默認的Shell。

  • 如何查看當前系統中shell的類型?

echo $SHELL

2. shell命令

shell命令可以分為以下三類:

  • 內建函數(built-in function):shell自帶的功能
  • 可執行文件(executable file):保存在shell之外的腳本,提供了額外的功能。
  • 別名(alias):給某個命令的簡稱

shell的內建函數是自帶的預先寫好的,實現一定功能的程序。

可執行文件是shell之外的腳本,提供了使用者自定義的功能。Shell必須在系統中找到對應命令名的可執行文件,才能正確執行。我們可以用絕對路徑來告訴Shell可執行文件所在的位置。如果用戶只是給出了命令名,而沒有給出準確的位置,那麼Shell必須自行搜索一些特殊的位置,也就是所謂的默認路徑。Shell會執行第一個名字和命令名相同的可執行文件。我們可以通過which命令,來確定命令名對應的是哪個可執行文件:

which date
which pwd
#以上兩個命令分別返回date和pwd命令對應的可執行文件的絕對路徑

別名是給某個命令一個簡稱,以後在Shell中就可以通過這個簡稱來調用對應的命令。在Shell中,我們可以用alias來定義別名:

alias freak=「free -h」

可以用alias將一些常用的命令進行簡化,比如「ls -l」簡化為「ll」。

  • 如何瞭解命令的類型?

type date
type pwd
#可以用type命令查看命令類型。如果是內建函數會返回builtin字樣,如果是可執行文件,將返迴文件的路徑

3. 命令的選項和參數

我們已經看到,一行命令裏還可以包含著選項參數。總的來說,選項用於控制命令的行為,而參數說明瞭命令的作用對象。

比如說uname命令,該命令的主要功能是輸出系統信息。它有很多個選項,不同的選項指定輸出不同想系統信息。

uname --help
Usage:uname [OPTION]...
print certain system information. with no OPTION, same as -s.
-a,--all print all informationin the follow order,except omit -p and -i if unknown
-s,--kernel-name print the kernel name
-n,--nodename print the network node hostname
-r,--kernel-release print the kernel release
-v,--kernel-version print the kernel version
-m,--machine print the machin hardware name
-p,--processor print the processor type or "unknown"
-i,--hardware-platform print the hardware platform or "unknown"
-o,--operating-system print the operating system
--help display this help and exit
--version output version information and exit
....

上面例子中短橫引領的字母叫短選項,雙短橫引領的單詞叫長選項,對應的短選項等價於長選項。比如「uname -s」等價於「uname --kenel-name」。

多個短選項的字母可以合在一起,跟在同一個"-"後面。比如,下面的兩個命令就等價:

uname -m -r
uname -mr

一個命令可能有非常多的選項,要弄清楚它們的用法還需要閱讀相應的幫助文檔。一般情況下是該命令後加「-h」選項,或者是加"--help"選項。

參數說明瞭命令的作用對象。就拿echo這個命令來說,它能把字元列印到終端。它選擇列印的對象,正是它的參數:

echo hello

有的時候,選項也會攜帶變數,以便來說明選項行為的原材料。比如:

sudo date --set="1999-01-01 08:00:00"

date是參數,選項"--set"用於設置時間,用等號連接的,就是它的參數。date會把日期設置成這一變數所代表的日期。如果用短選項,那麼就要用空格取代等號了:

sudo date -s "1999-01-01 08:00:00"

值得注意的是,Shell對空格敏感當一整個參數信息中包含了空格時,我們需要用引號把參數包裹起來,以便Shell能識別出這是一個整體


推薦閱讀:
相關文章