Unix / Linux - Shell 是什麼?
各位有志成為程序員的朋友們,歡迎來到我們探索Unix和Linux 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)"
讓我們來分解一下:
-
#!/bin/bash
:這叫做shebang。它告訴系統使用哪個解釋器(在這個例子中是bash)。 -
echo
:這個命令將文字打印到屏幕上。 -
$(date)
和$(pwd)
:這些是命令替換。它們運行括號內的命令,並將輸出插入到我們的echo語句中。
要運行這個腳本:
- 將它保存為
hello_world.sh
- 使其可執行:
chmod +x hello_world.sh
- 運行它:
./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
這個腳本:
- 問用戶的名字和年齡
- 使用變量來存儲和使用這些信息
- 使用條件語句(if-else)來檢查年齡
- 执行計算以確定達到投票年齡還有多少年
記住,學習編程就像學習騎自行車一樣。起初,你可能會跌倒幾次,但隨著練習,你會很快騎得飛快!
希望這個對shell的介紹能夠引起你的興趣。繼續探索,繼續提問,最重要的是,繼續編程!誰知道呢?也許有一天你會成為教導下一代程序員關於shell神奇世界的人!
Credits: Image by storyset