1. 程式人生 > >從新手到系統管理員(一):理解Linux Shell和基本的Shell指令碼

從新手到系統管理員(一):理解Linux Shell和基本的Shell指令碼

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處

關於GNU/Linux的架構和shell所處的位置,圖片比語言表述的更加清楚,如下圖所示。
Understanding-Linux-Shell

理解Linux Shell

Shell:Shell是基於命令列的直譯器,它連線使用者和作業系統,允許通過編寫指令碼來執行系統的命令。

程序:使用者在系統中執行的任何一個任務都以程序的形式存在。程序比任務要稍微複雜一些。

檔案:儲存於硬碟之上,包含使用者擁有的資料。

X-視窗:Linux執行的一種模式。它可以將顯示器分為若干個不同的視窗,允許使用者並行做幾件事情,並可以通過圖形介面的方式從一個任務切換到另一個任務。

字元終端:只能顯示字元或者非常簡單的圖形介面。

會話:登陸系統和登出系統之間的時間。

標準Linux發行版常見的Shell型別

Bourne shell:這是Linux下最常見的shell之一。它是由貝爾實驗室的Stephen Bourne編寫的。每一個類Unix的系統都至少包含一個與其相容的shell。Bourne shell的名字叫做“sh”,通常它被放置在/bin/sh。

C shell:它是Bill Joy為伯克利軟體發行建立的。它的語法基於C程式語言。它主要被用於互動式終端,很少用於編寫指令碼語言和系統控制。C shell有很多互動式的命令。

開始娛樂之旅吧!

Linux有成千上萬的命令列命令,統統記住這些是不可行的。計算機真正強大的魅力在於其可以簡化我們的工作。你可以通過編寫指令碼語言來自動化你要做的事情。

指令碼是儲存在檔案中的一系列命令的組合。Shell可以讀取這些命令並執行它們,如同分別在終端輸入它們一樣。Shell同時也提供了一些非常有用的特性。這些特性使得指令碼變得更加強大。

Shell程式設計基礎

1. 開啟一個終端;
2. 檢視當前使用的是哪種shell:echo $SHELL;
3. 在Linux下,美元符號($)後面跟著的是shell變數;
4. ‘echo’命令返回你緊隨其後輸入的內容;
5. 管道符號(|)用來連線不同的命令;
6. #!/bin/sh——被稱為shebang。它出現在每個shell指令碼的第一行,用來指明這個指令碼被/bin/sh執行。

關於Shell指令碼

Shell指令碼是以”.sh”為字尾的文字檔案,它可以被賦予可執行的許可權。

編寫和執行指令碼的過程

1. 開啟終端;
2. 通過“cd”命令切換到你想儲存shell指令碼的目錄;
3. 使用“touch”命令建立一個檔案,如touch hello.sh
4. 使用“vi hello.sh”或者“nano hello.sh”編輯檔案;
5. 賦予hello.sh可執行的許可權:chmod 744 hello.sh
6. 執行指令碼:sh hello.sh或者./hello.sh

編寫第一個指令碼

[code language=”bash”]#!/bin/bash
# My first script

echo "Hello World!"[/code]

將上面的內容儲存到一個檔案,賦予其可執行的許可權並執行它,輸出結果如下所示:

[code language=”bash”]Hello World![/code]

在上面的程式碼中:

[code language=”bash”]#!/bin/bash (is the shebang.)
# My first script (is comment, anything following ‘#’ is a comment)
echo “Hello World!” (is the main part of this script)[/code]

編寫第二個指令碼

這個指令碼會打印出你的名字和當前正在執行的程序。

[code language=”bash”]#! /bin/bash
echo "Hello $USER"
echo "Hey i am" $USER "and will be telling you about the current processes"
echo "Running processes List"
ps
[/code]

指令碼執行的結果:

[code language=”bash”]Hello tecmint
Hey i am tecmint and will be telling you about the current processes
Running processes List
PID TTY TIME CMD
1111 pts/0 00:00:00 bash
1287 pts/0 00:00:00 sh
1288 pts/0 00:00:00 ps
[/code]

這些還是比較酷的吧!當然,如果你需要更加強大和全面的功能,如穩定性、健壯性、效能和效率,你可以使用其它一些更強大的語言,如C/Perl/Python。

編寫第三個指令碼

這個指令碼演示如何與shell指令碼進行互動。

[code language=”bash”]#! /bin/bash
echo "Hey what’s Your First Name?";
read a;
echo "welcome Mr./Mrs. $a, would you like to tell us, Your Last Name";
read b;
echo "Thanks Mr./Mrs. $a $b for telling us your name";
echo "*******************"
echo "Mr./Mrs. $b, it’s time to say you good bye"
[/code]

指令碼執行的結果:

[code language=”bash”]Hey what’s Your First Name?
Avishek
welcome Mr./Mrs. Avishek, would you like to tell us, Your Last Name
Kumar
Thanks Mr./Mrs. Avishek Kumar for telling us your name
******************************************************
Mr./Mrs. Kumar, it’s time to say you good bye
[/code]

第一部分到此結束,請繼續關注我們後續的四個部分。