Unix / Linux - Shell 是什麼?

各位有志成為程序員的朋友們,歡迎來到我們探索Unix和Linux shell的迷人世界。作為你們親切鄰居的計算機科學老師,我很興奮能夠引導你們了解這個基本概念。讓我們一起來深入探討!

Unix / Linux - What is Shell?

Shell 是什麼?

想像一下,如果你試著與一個講不同語言的朋友溝通,你會需要一個翻譯,對吧?Shell就是你和計算機操作系統之間的翻譯。它是一個命令行解釋器,將你們可讀的命令翻譯成計算機能夠理解和執行的內容。

在我教學的早期,我常用一個比喻告訴學生,將shell想成一個住在計算機裡的神奇說話的蛤蜊。你輕聲對它說命令,它就會讓計算機按照你的意思行事。這個比喻不完全準確,但它確實讓這個概念深入人心!

Shell 提示符

當你在Unix或Linux系統上打開終端時,你會看到類似這樣的內容:

username@hostname:~$

這就是你的shell提示符。這就像是計算機在說:"哦,聰明的用戶,我已經準備好接收你的命令了!"讓我們來分解一下:

  • username:那就是你!
  • @:意思是"在"
  • hostname:你的計算機名稱
  • ~:你當前的目錄(~代表家目錄)
  • $:表示你是一個普通用戶(如果是root用戶,會是#)

Shell 類型

Unix/Linux系統中有多種類型的shell可用。這就像是有不同口味的冰淇淋——它們都很美味,但每個都有其獨特的風味!以下是一些常見的shell:

Shell 名稱 描述
Bourne Shell (sh) 原始的Unix shell
Bourne Again Shell (bash) sh的增強版,Linux上最常見
C Shell (csh) 語法類似於C程序設計語言
Korn Shell (ksh) 結合了sh和csh的特性
Z Shell (zsh) bash的擴展版,具有許多改進

Bash是最常見的shell,所以我們會在範例中聚焦於它。

Shell 腳本

現在我們來看看魔術發生的地方!Shell腳本就像是計算機的菜譜。而不是一次又一次地輸入命令,你可以將一系列命令寫在文件中,然後一次運行它們。這就像教計算機一個新技巧!

範例腳本

讓我們創建我們的第一個shell腳本。我們將它命名為hello_world.sh

#!/bin/bash

echo "Hello, World!"
echo "歡迎來到shell腳本的美好世界!"
echo "今天的日期是 $(date)"
echo "你當前的目錄是 $(pwd)"

讓我們來分解一下:

  1. #!/bin/bash:這叫做shebang。它告訴系統使用哪個解釋器(在這個例子中是bash)。
  2. echo:這個命令將文字打印到屏幕上。
  3. $(date)$(pwd):這些是命令替換。它們運行括號內的命令,並將輸出插入到我們的echo語句中。

要運行這個腳本:

  1. 將它保存為hello_world.sh
  2. 使其可執行:chmod +x hello_world.sh
  3. 運行它:./hello_world.sh

你應該會看到類似於以下內容:

Hello, World!
歡迎來到shell腳本的美好世界!
今天的日期是 Mon May 15 10:30:45 PDT 2023
你當前的目錄是 /home/username

這不是很酷嗎?你剛剛創建了你的第一個shell腳本!

Shell 註釋

註釋就像是你在代碼中留下的小筆記(或給其他程序員的)。在shell腳本中,註釋以#開頭:

# 這是一個註釋
echo "這將會被打印"
# echo "但這不會被打印"

我總是告訴學生:給你的代碼加上註釋,彷彿讀它的人是一個知道你住處的暴力精神病患者。清晰的註釋可以救命!(或者至少避免挫折。)

高級Shell腳本

當你對shell腳本越來越熟悉時,你可以創建更複雜的腳本。以下是一個演示變量、用戶輸入和條件語句的範例:

#!/bin/bash

# 問用戶的名字
echo "你叫什麼名字?"
read name

# 向用戶問候
echo "你好,$name!很高興見到你。"

# 問用戶的年齡
echo "你多大了?"
read age

# 檢查用戶是否年滿投票年齡
if [ $age -ge 18 ]
then
echo "你已經夠年齡投票了!"
else
echo "你還沒有達到投票年齡。"
years_left=$((18 - age))
echo "你將在 $years_left 年後能夠投票。"
fi

這個腳本:

  1. 問用戶的名字和年齡
  2. 使用變量來存儲和使用這些信息
  3. 使用條件語句(if-else)來檢查年齡
  4. 执行計算以確定達到投票年齡還有多少年

記住,學習編程就像學習騎自行車一樣。起初,你可能會跌倒幾次,但隨著練習,你會很快騎得飛快!

希望這個對shell的介紹能夠引起你的興趣。繼續探索,繼續提問,最重要的是,繼續編程!誰知道呢?也許有一天你會成為教導下一代程序員關於shell神奇世界的人!

Credits: Image by storyset