Shell Scripting Tutorial: Extended Shell Scripts

Extended Shell Scripts 的介紹

你好,有志者!我很高興能帶領你進入 Unix/Linux Shell Scripting 的精彩世界。作為一位擁有多年經驗的計算機科學教師,我見過無數學生在掌握這些概念時眼睛發亮。今天,我們將深入探究 Extended Shell Scripts,基於基礎知識來創建更強大和靈活的程序。如果你是新手,別擔心——我們會從頭開始,一起逐步學習!

Unix / Linux - Shell Scripting

Extended Shell Scripts 是什麼?

Extended Shell Scripts 在 Unix/Linux 世界中就像瑞士軍刀一樣。它們讓我們能夠使用 Shell 的內置命令和結構來創建更複雜和功能豐富的程序。把它們當作是告訴你的計算機如何為你的問題烹製美味解決方案的菜譜!

Extended Shell Script 的基本結構

讓我們從我們腚本的大綱開始:

#!/bin/bash

# 你的代碼寫在這裡

exit 0

這可能看起來很簡單,但它是我們將要編寫的每個腚本的基礎。#!/bin/bash 被稱為 shebang,它告訴系統使用哪個解釋器。結尾的 exit 0 就像對你的計算機說 "再見",表示腚本成功完成。

變量和數據類型

在 Shell Scripting 中,變量就像我們存儲信息的盒子。讓我們看看如何使用它們:

#!/bin/bash

name="Alice"
age=25
pi=3.14

echo "Hello, $name! You are $age years old."
echo "Pi is approximately $pi"

exit 0

當你運行這個腚本時,它將輸出:

Hello, Alice! You are 25 years old.
Pi is approximately 3.14

注意我們如何使用 $ 來引用我們的變量。這就像告訴計算機:"嘿,為我抓取這個盒子裡的東西!"

控制結構

If-Else 說明

現在,讓我們通過一些決策來使我們的腚本更聰明一些:

#!/bin/bash

age=18

if [ $age -ge 18 ]; then
echo "You can vote!"
else
echo "Sorry, you're too young to vote."
fi

exit 0

這個腚本檢查年齡是否大於或等於 18。如果是,它會告訴你可以投票。否則,它會說你太小,無法投票。-ge 在 Shell 語言中意味著 "大於或等於"。

循環

循環就像是你代碼的旋轉木馬。讓我們看看 for 循環的運作:

#!/bin/bash

for i in {1..5}
do
echo "Round $i"
done

exit 0

這將會從 1 讓到 5,每次都說 "Round"。這就像腚本是一個健身教練,在計數你的次數!

函數

函數就像是你腚本中的迷你腚本。它們是可重用的代碼塊:

#!/bin/bash

greet() {
echo "Hello, $1! Nice to meet you."
}

greet "Bob"
greet "Alice"

exit 0

這個腚本定義了一個 greet 函數,它會向告訴它的人問好。$1 是一個特殊變量,它持有傳遞給函數的第一個參數。

輸入和輸出

讓我們使我们的腚本互動:

#!/bin/bash

echo "What's your name?"
read name

echo "Hello, $name! How old are you?"
read age

if [ $age -ge 18 ]; then
echo "You can vote, $name!"
else
echo "Sorry $name, you're too young to vote."
fi

exit 0

這個腚本會詢問你的名字和年齡,然後決定你是否可以投票。這就像一個友好的選舉官員!

文件操作

Shell 腚本很擅長文件管理。讓我們創建一個腚本來備份文件:

#!/bin/bash

original_file="important_data.txt"
backup_file="important_data_backup.txt"

if [ -f "$original_file" ]; then
cp "$original_file" "$backup_file"
echo "Backup created successfully!"
else
echo "Error: $original_file not found."
fi

exit 0

這個腚本檢查 important_data.txt 是否存在,如果存在,則創建備份。這就像有一個個人的文件助理!

錯誤處理

讓我們添加一些錯誤處理,使我们的腚本更健壯:

#!/bin/bash

divide() {
if [ $2 -eq 0 ]; then
echo "Error: Cannot divide by zero!"
return 1
fi
result=$(($1 / $2))
echo "Result: $result"
return 0
}

divide 10 2
divide 10 0

exit 0

這個腚本定義了一個 divide 函數,它檢查除數是否為零。這就像有一個數學老師在你犯錯之前糾正你的錯誤!

命令行參數

最後,讓我們創建一個使用命令行參數的腚本:

#!/bin/bash

if [ $# -eq 0 ]; then
echo "Usage: $0 <name>"
exit 1
fi

echo "Hello, $1! Welcome to shell scripting."

exit 0

運行這個腚本,使用 ./script.sh Alice,它會向 Alice 問候。$# 檢查參數的數量,$0 是腚本的名稱本身。

結論

恭喜你!你剛剛踏入了 Extended Shell Scripting 的世界。記住,熟能生巧。嘗試結合這些概念,實驗你自己的想法,很快你將會像專家一樣編寫腚本!

這裡是一個我們所學關鍵概念的總結表:

概念 描述 示例
變量 存储和检索数据 name="Alice"
If-Else 做決策 if [ $age -ge 18 ]; then ... fi
循環 重複動作 for i in {1..5}; do ... done
函數 可重用的代碼塊 greet() { ... }
輸入/輸出 與用户交互 read name
文件操作 管理文件 cp "$original_file" "$backup_file"
錯誤處理 管理潜在问题 if [ $2 -eq 0 ]; then ... fi
命令行參數 使用腚本参数 $1, $2, $#

持續編寫腚本,持續學習,最重要的是,樂在其中!Shell Scripting 的世界浩瀚而令人興奮,而你剛剛開始你的旅程。開心編程!

Credits: Image by storyset