一、Shell 腳本基礎

一、Shell 簡介

1.Shell 的定義與作用

Shell,通常被稱為命令行解釋器 (Command Line Interpreter),是用戶 👤 與 Linux/Unix 操作系統內核進行交互 ?? 的“橋梁” 🌉。它扮演著翻譯官 🗣? 的角色:

  • 接收用戶輸入的命令 (如 ls, cd, mkdir)。
  • 解釋這些命令 🧐。
  • 調用操作系統內核執行相應的功能。
  • 將執行結果返回并顯示給用戶 🖥?。

簡單來說,沒有 Shell,我們就很難方便地直接與強大的操作系統內核打交道了!💻 (簡直無法想象!)

2.常見的 Shell 類型

存在多種不同的 Shell 實現,它們在語法、功能和效率上可能有所差異 ?:

  • bash (Bourne Again SHell): 這是目前最流行、最常用 ? 的 Shell,是絕大多數 Linux 發行版的默認 Shell。它兼容 sh,并增加了許多新特性(命令歷史、命令補全、作業控制等)。我們后續的腳本主要會以 bash 為基礎。
  • sh (Bourne Shell): 一個早期且經典 📜 的 Unix Shell,由 Stephen Bourne 開發。許多舊的或要求高兼容性 🤝 的腳本仍會使用它。在很多系統中,/bin/sh 可能是一個指向 bash (或其他 Shell) 的符號鏈接,但 bash 在以 sh 模式運行時會限制某些功能以保持兼容。
  • zsh (Z Shell): 一個功能極其強大 💪 的 Shell,提供了比 bash 更豐富的功能、更強的自動補全 ?、主題和插件系統(如 Oh My Zsh),深受許多開發者喜愛 ??。
  • ksh (Korn Shell): 由 David Korn 開發,試圖融合 sh 的腳本能力和 C Shell 的交互特性。
  • csh/tcsh (C Shell / TENEX C Shell): 語法風格類似 C 語言,交互性較好,但腳本編寫方面有時被認為不如 Bourne 系列 Shell。

小提示: 💡 你可以在終端輸入 echo $SHELL 來查看你當前正在使用的 Shell 類型。

3.Shell 與 Shell 腳本的區別

這是一個非常基礎重要的概念 🤔:

  • Shell (交互式): 指的是你直接在終端(命令行界面)中輸入命令,按回車后立即看到執行結果的環境。這是一種你問我答式的交互方式 💬。
# 這就是在交互式 Shell 中輸入命令
ls -l
pwd
  • Shell 腳本 (非交互式): 是一個文本文件 📜,里面包含了一系列按照特定順序編寫的 Shell 命令。你可以一次性執行這個腳本文件,讓計算機自動完成 🤖 一系列復雜的或重復性的任務,實現自動化。這是一種批量處理的執行方式 ??。
# my_script.sh 文件內容可能像這樣:
# #!/bin/bash
# echo "開始執行任務..."
# mkdir temp_dir
# cd temp_dir
# echo "任務完成!"

二、 編寫第一個 Shell 腳本

1.腳本文件的創建與命名

創建一個 Shell 腳本非常簡單

  1. 使用文本編輯器 打開你喜歡的文本編輯器(如 vim, nano, gedit, VS Code 等)📝。
  2. 編寫命令: 在文件中輸入你的 Shell 命令。
  3. 保存文件 將文件保存 💾。
    • 命名約定 🏷?: 雖然不是強制性的,但強烈建議將 Shell 腳本文件以 .sh 后綴結尾(例如 my_first_script.sh, backup_data.sh)。這有助于識別文件類型 👀,并且讓其他用戶(以及未來的你 😅)更容易理解。📄
2.指定解釋器 (Shebang)

這是 Shell 腳本中至關重要? 的一行! ?

  • 什么是 Shebang? 腳本文件的第一行內容,格式為 #!解釋器路徑
  • 作用: 它告訴操作系統內核,當直接執行這個腳本文件時(即使用方法 2:./script.sh 方式),應該調用哪個解釋器來處理文件中的命令。 注意: 如果使用方法 1 (bash script.sh) 或方法 3 (source script.sh) 執行,Shebang 行實際上會被忽略 🤷?♀?,因為解釋器已經由用戶顯式指定 (方法 1) 或就是當前 Shell (方法 3)。
  • 絕對要求: Shebang 行必須是腳本文件的絕對第一行,前面不能有任何字符,包括空格或空行。

常見的 Shebang 選項:

雖然 #!/bin/bash最常見的,尤其是在 Linux 環境中,但還有其他一些常用的選項,選擇哪個取決于你的腳本需求和目標運行環境:

  1. #!/bin/bash:

    • 指定使用 Bourne Again Shell (bash) 來執行腳本。
    • 優點: 可以使用 bash 提供的所有擴展功能 💪(如數組、雙方括號 [[ ]] 條件測試、函數等)。
    • 缺點: 如果系統沒有安裝 bash 或者 bash 不在 /bin/bash 路徑下,腳本會執行失敗 💥。依賴 bash 特性的腳本可移植性稍差
  2. #!/bin/sh:

    • 指定使用 Bourne Shell (sh) 來執行腳本。
    • 優點: 目標是編寫符合 POSIX 標準 📜 的腳本,具有更好的可移植性 🌍。在很多系統中,/bin/sh 可能是一個指向 bashdash 或其他兼容 Shell 的符號鏈接。當 bashsh 模式被調用時,它會禁用一些 bash 特有的擴展。
    • 缺點: 不能使用 bash 等現代 Shell 的擴展語法和功能,編寫復雜腳本可能更繁瑣 😓。
  3. #!/usr/bin/env <interpreter> (例如 #!/usr/bin/env bash#!/usr/bin/env python):

    • 這是強烈推薦 👍 的一種方式,特別是對于需要分發 📦 的腳本。
    • env 是一個命令,它會在系統的PATH 環境變量 🗺? 所指定的目錄中查找第一個找到的 <interpreter>(如 bash, python, perl, node 等)并使用它來執行腳本。
    • 優點: 極大地提高了可移植性 🚀。不同系統或用戶可能將解釋器安裝在不同的路徑下(如 /usr/bin/bash, /usr/local/bin/bash, /opt/bin/bash)。使用 env 可以確保只要解釋器在用戶的 PATH 中,腳本就能找到它 👌。
    • 缺點: 相比直接指定路徑,會有極其微小的額外啟動開銷(查找解釋器)。安全性方面,如果 PATH 被惡意篡改,可能會執行非預期的解釋器(但這種情況很少見且通常已有更大的安全問題 😨)。
    • 常見示例:
      • #!/usr/bin/env bash (推薦 ? 的 bash 腳本 Shebang)
      • #!/usr/bin/env sh (推薦 ? 的可移植 sh 腳本 Shebang)
      • #!/usr/bin/env python3 (用于 Python 3 腳本 🐍)
      • #!/usr/bin/env perl (用于 Perl 腳本 🐪)
      • #!/usr/bin/env node (用于 Node.js 腳本 🟢)
  4. 其他 Shell:

    • #!/bin/zsh#!/usr/bin/env zsh: 指定使用 Z Shell
    • #!/bin/ksh#!/usr/bin/env ksh: 指定使用 Korn Shell

🤔 如何選擇 Shebang?

  • 如果你的腳本只在你自己控制的、確定安裝了 bash 的 Linux 系統上運行,并且你需要 bash 的特性,#!/bin/bash#!/usr/bin/env bash 都可以。
  • 如果你希望腳本盡可能廣泛地兼容 🌍 各種 Unix-like 系統(包括 macOS, BSD 等),并且只使用了 sh 的標準功能,那么使用 #!/bin/sh#!/usr/bin/env sh更安全、更推薦的選擇 ?。
  • 為了最大化可移植性 🚀,通常首選推薦使用 #!/usr/bin/env <interpreter> 的形式 👍。
3.腳本的執行方式

你有三種主要的方式來運行你的 Shell 腳本 ??:

  1. 作為解釋器的參數執行:
    • 這種方式不需要給腳本文件設置執行權限 🔑。
    • 你直接調用 Shell 解釋器 (如 bashsh),并將腳本文件名作為參數傳遞給它。
    • 優點: 簡單直接,無需關心執行權限。
    • 注意: 腳本在子 Shell 🐣 (subshell) 中執行,腳本中定義的變量、函數或對環境的修改(如 cd)在腳本結束后不會影響當前的 Shell 環境 🏠。
    • 命令格式:
bash my_script.sh
# 或者,如果腳本兼容 sh
sh my_script.sh
  1. 賦予執行權限后直接運行:
    • 第一步:添加執行權限 🔑: 使用 chmod 命令給腳本文件添加執行權限 (x)
chmod +x my_script.sh

+x 表示為所有用戶(所有者、同組用戶、其他用戶)添加執行權限。你也可以使用更精細的權限設置,如 chmod u+x my_script.sh 只為文件所有者添加執行權限。

  • 第二步:直接執行:如果腳本文件位于當前目錄,你需要使用 ./ 來告訴 Shell 在當前目錄下查找并執行該文件:
./my_script.sh
  • 如果腳本文件位于系統的 PATH 環境變量 🗺? 所包含的目錄中,或者你指定了完整的絕對/相對路徑,則可以直接使用腳本名或路徑執行:
# 假設 /opt/scripts 在 PATH 中,且 my_script.sh 在該目錄下
my_script.sh
# 或者使用絕對路徑
/path/to/your/script/my_script.sh
# 或者使用相對路徑
../scripts/my_script.sh
  • 優點: 這是最標準、常用 ? 的執行方式,特別是對于需要分發的工具腳本。Shebang 行 #! 決定了使用哪個解釋器。
  • 注意: 腳本同樣在子 Shell 🐣 (subshell) 中執行,對當前 Shell 環境沒有持久影響 🏠。
  • 為什么需要 ./ 出于安全考慮 🛡?。Linux/Unix 系統默認不會在當前目錄下查找可執行文件(除非當前目錄被顯式添加到了 PATH 環境變量中)。使用 ./ 可以明確指定執行當前目錄下的文件,防止意外執行了與系統命令同名的惡意腳本 😈。
  1. 使用 source. 命令在當前 Shell 環境 🏠 中執行: 🎯
    • source 是一個 Shell 內建命令,它的簡寫形式是一個點 (.)。
    • 這種方式不需要給腳本文件設置執行權限 🔑(只需要讀權限 r 即可 📖)。
    • 命令格式:
source my_script.sh
# 或者使用點號 (點號和腳本名之間必須有空格!)
. my_script.sh
  • 核心區別: 核心區別: 使用 source. 執行時,腳本中的命令直接在當前的 Shell 環境中 🏠 執行,而不是啟動一個新的子 Shell 🐣。
  • 優點/用途: 這意味著腳本中定義的變量、函數、別名 (alias),或者執行的 cdexport 等命令,在腳本執行完畢后會保留在當前的 Shell 會話中 ?。因此,它常用于:
    • 加載配置文件 ?? (如 .bashrc, .profile, /etc/profile)。
    • 設置環境變量 🌐 供后續命令使用。
    • 定義可以在當前終端后續使用的函數庫 📚。
    • 在腳本中切換目錄 (cd) 后,希望停留在那個新目錄 👉。
  • 注意: 必須確保腳本內容是你希望在當前環境中執行的,因為它可能直接修改 💥 你當前的工作環境。要謹慎使用!??

🎯 執行方式對比小結:

執行方式需要執行權限 (x)? 🔑在子 Shell 中執行? 🐣對當前 Shell 環境的影響 🏠主要用途 🎯
bash script.sh ? ? ?運行一次性任務,不需改變當前環境
./script.sh (需+x) ? ? ?標準的腳本執行 ?,分發工具腳本
source script.sh (需r) 📖 ?有 (持久) ?加載配置/環境/函數 ??,改變當前環境

三、注釋與可讀性

編寫清晰易懂 ? 的腳本至關重要,而注釋是實現這一目標的關鍵工具 🛠?。

1.單行注釋
  • 在 Shell 腳本中,使用 # 符號來表示單行注釋 💬。
  • # 開始,直到該行的末尾,所有的內容都會被 Shell 解釋器忽略 🙈,不會被執行。
  • 注釋可以單獨占一行,也可以放在命令的后面。
#!/bin/bash# 這是一個完整的單行注釋,用于說明腳本的目的
# Author: Your Name
# Date: 2025-5-2echo "Hello, World!" # 這也是一個注釋,解釋這行命令的作用# 下面定義一個變量
USER_NAME="Alice" # 為變量賦值
2.多行注釋的實現方式

Shell 本身沒有提供像 C 語言 /* ... */ 或 Python """ ... """ 那樣的原生多行注釋塊 🧱 語法。但是,可以通過一些技巧 🎩 來實現類似的效果:

  • 方法一:使用 Here Document (推薦用于注釋大段代碼或文本)
    將你想要注釋掉的內容通過 Here Document (<<LIMITER ... LIMITER) 重定向給一個空命令 : (冒號是一個內置的不做任何事情的命令)。LIMITER 可以是任何不出現在注釋內容中的字符串,通常使用 EOFCOMMENT。在起始 LIMITER 前加上單引號 (: <<'EOF') 可以阻止其中的變量和命令替換。
#!/bin/bashecho "這行代碼會執行": <<'MY_MULTI_LINE_COMMENT'
這里是第一行注釋內容。
這里是第二行注釋內容。
這整塊代碼/文字都不會被執行。
可以包含 $VARIABLES 或 `commands`,因為用了 'MY_MULTI_LINE_COMMENT'。
MY_MULTI_LINE_COMMENTecho "這行代碼也會執行"
  • 方法二:連續使用單行注釋
    這是最簡單直接的方法,只需在每一行注釋前都加上 #。對于解釋性的多行文字,這種方式也很常用。
#!/bin/bash# ==================================
# 這是一個多行注釋塊
# 用來詳細說明某個復雜函數的邏輯
# 或者記錄一些重要的注意事項
# ==================================
calculate_sum() {
# 函數內部的注釋
local result=$(($1 + $2)) # 計算總和
echo $result
}sum=$(calculate_sum 10 20)
echo "計算結果是: $sum"
3.良好的注釋習慣與代碼可讀性

注釋的終極目標 🏆 是提升代碼的可讀性 👀 和可維護性 🔧。遵循以下原則:

  • 解釋“為什么”(Why 🤔),而不是“干什么”(What ?): 好的代碼(比如有意義的變量名和函數名)本身應該能說明它在做什么。注釋應該聚焦于解釋為什么選擇這種實現方式、背后的邏輯、潛在的陷阱 ?? 或重要的上下文
# 不好的注釋 (冗余 🤷)
# i = i + 1  # 把 i 加 1# 好的注釋 (解釋原因 👍)
# 使用特定的算法ID,因為舊版本存在兼容性問題
algorithm_id=3
  • 保持注釋簡潔同步 🔄: 注釋應該清晰明了,避免冗長。最重要的是,當代碼發生變化時,務必更新相關的注釋,否則過時的注釋比沒有注釋更糟糕!💣
  • 注釋復雜 🤯 或不直觀的部分: 對于復雜的正則表達式、算法、重要的業務邏輯或臨時的 Workaround,添加注釋非常有幫助 🙏。
  • 文件頭注釋 ??: 在腳本文件的開頭添加注釋塊,說明腳本的用途、作者、創建/修改日期、版本號、使用方法等信息,是一個非常好的實踐 ?。
#!/usr/bin/env bash
# ==============================================================================
# Script Name:    backup_database.sh
# Description:    Performs a daily backup of the production PostgreSQL database.
# Author:         Your Name <your.email@example.com>
# Date Created:   2023-5-2
# Last Modified:  2023-5-2
# Version:        1.2
# Usage:          ./backup_database.sh
# Notes:          Requires pg_dump command and write access to BACKUP_DIR.
#                 Recommend running via cron.
# ==============================================================================
  • 利用空行(代碼塊外的)縮進 🏗?: 合理地使用空行分隔邏輯塊。在非代碼塊的文本部分,可以使用縮進(如列表項)來組織內容,提高結構清晰度。
  • 寫給未來的你 🔮 和他人 🤝: 記住,你寫的代碼和注釋,很可能在幾個月或幾年后需要被你自己或其他同事閱讀和維護。清晰的注釋是對未來時間和精力的投資 💰。

四、Shell 腳本基礎練習題 🧠??

題目一:基礎概念

? 簡述 Shell 在 Linux/Unix 系統中的主要作用是什么?它扮演了什么角色

題目二:Shebang

? Shell 腳本的第一行 #!/bin/bash 有什么作用?它通常被稱為什么

題目三:執行權限

? 如何讓一個名為 my_script.sh 的 Shell 腳本文件,能夠直接通過 ./my_script.sh 的方式運行?請寫出關鍵命令

題目四:執行方式辨析

? 執行 Shell 腳本時,使用 bash script.sh 和 source script.sh (或 . script.sh) 的主要區別是什么?哪種方式會影響當前的 Shell 環境? 🤔

題目五:注釋

? 在 Shell 腳本中,如何添加單行注釋?請給出表示注釋的符號

題目六:多行注釋模擬

? Shell 沒有原生的多行注釋塊語法。請描述一種常用的、基于 Here Document 的方法來模擬多行注釋。📝

題目七:Shebang 最佳實踐

? 為什么通常推薦使用 #!/usr/bin/env bash 而不是直接使用 #!/bin/bash 作為 Shebang? 主要優勢是什么? 🚀


參考答案 ?💡

答案一:

Shell 主要作用是作為用戶 👤 與 操作系統內核 之間的命令行解釋器。它扮演著翻譯官 🗣? 的角色,負責接收、解釋用戶的命令,調用內核執行,并將結果返回給用戶 🖥?。它是實現與系統交互 ?? 的橋梁 🌉。

答案二:

#!/bin/bash 的作用是指定解釋器。當腳本被直接執行時 (例如通過 ./script.sh),操作系統會根據這一行找到 /bin/bash 解釋器來處理腳本中的命令 ?。這一行通常被稱為 Shebang

答案三:

為了讓 my_script.sh 可以通過 ./my_script.sh 直接運行,需要給它添加執行權限 🔑。關鍵命令是:

chmod +x my_script.sh

答案四:

主要區別在于執行環境

  • bash script.sh 會啟動一個新的子 Shell (subshell) 🐣 來執行腳本。腳本中的變量定義、函數、cd 等操作不會影響當前的 Shell 環境 🏠。
  • source script.sh (或 . script.sh) 則是在當前的 Shell 環境 🏠 中直接執行腳本的命令。腳本中定義的變量、函數、cd 等操作會保留在當前 Shell 會話中 ?。

因此,source 或 . 方式會影響當前的 Shell 環境。

答案五:

在 Shell 腳本中,使用 # 符號來添加單行注釋 💬。從 # 到行尾的內容都會被解釋器忽略 🙈。

答案六:

一種常用的模擬多行注釋的方法是使用 Here Document 并將其重定向給一個空命令 :。格式如下:

: <<'任意分隔符'
這里是第一行注釋。
這里是第二行注釋。
這整塊內容都不會被執行。
任意分隔符

使用單引號包裹起始分隔符 (如 ‘任意分隔符’) 可以阻止其中的變量和命令替換,使其更像純粹的注釋塊。

答案七:

推薦使用 #!/usr/bin/env bash 的主要優勢在于提高了腳本的可移植性 🚀🌍。

  • #!/bin/bash 寫死了 bash 解釋器的絕對路徑。如果用戶的 bash 不在這個位置 (例如在 /usr/local/bin/bash),腳本就無法直接執行 💥。
  • #!/usr/bin/env bash 利用 env 命令在用戶的PATH 環境變量 🗺? 中查找 bash 解釋器。只要用戶的 PATH 中能找到 bash,無論它安裝在哪里,腳本都能正確找到并執行 👌。這使得腳本在不同系統、不同環境下的適應性更強 💪。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/903998.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/903998.shtml
英文地址,請注明出處:http://en.pswp.cn/news/903998.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

青少年編程與數學 02-018 C++數據結構與算法 21課題、機器學習與人工智能算法

青少年編程與數學 02-018 C數據結構與算法 21課題、機器學習與人工智能算法 一、線性回歸算法二、邏輯回歸算法三、K近鄰算法&#xff08;K-Nearest Neighbors, KNN&#xff09;四、決策樹算法五、支持向量機&#xff08;SVM&#xff09;六、神經網絡算法七、聚類算法八、降維算…

【數據結構】——單鏈表練習(1)

一、移除鏈表元素 題目鏈接&#xff1a; 移除鏈表元素 那么根據題目的要求我們大致明白這道題要做什么&#xff0c;就是將一個鏈表中&#xff0c;和指定的值相等的元素的節點刪除&#xff0c;然后返回刪除后的新的鏈表&#xff0c;然后題目給我們傳入的參數是鏈表的頭節點和指…

AI大模型基礎設施:主流的幾款開源AI大語言模型的本地部署成本

以下是對目前主流開源AI大語言模型&#xff08;如DeepSeek R1、LLaMA系列、Qwen等&#xff09;本地部署成本的詳細分析&#xff0c;涵蓋計算機硬件、顯卡等成本&#xff0c;價格以美元計算。成本估算基于模型參數規模、硬件需求&#xff08;GPU、CPU、RAM、存儲等&#xff09;以…

AI生成視頻檢測方法及其相關研究

目錄標題 【1】AI-Generated Video Detection via Spatio-Temporal Anomaly Learning【2】DeCoF: Generated Video Detection via Frame Consistency【2.1】Spatiotemporal Convolutional Neural Networks (STCNN) rely on spatial artifacts【2.2】Capturing Universal Spatia…

仿騰訊會議——服務器注釋

目錄 1、修改協議 2、修改登錄請求結構體 3、修改登錄回復結構體 4、修改注冊請求結構體 5、修改發送登錄請求函數 6、實現發送注冊請求函數 7、修改mysql存儲數據格式 8、自己完成部分 1、修改協議 2、修改登錄請求結構體 3、修改登錄回復結構體 4、修改注冊請求結構體…

list的迭代器詳講

1.list的迭代器就是封裝了節點指針的類 2.迭代器失效 迭代器失效即迭代器封裝的節點指針無效 。因為 list 的底層結構為帶頭結點的雙向循環鏈表 &#xff0c;因此 在 list 中進行插入時是不會導致 list 的迭代 器失效的&#xff0c;只有在刪除時才會失效&#xff0c;并且失效的…

deepSeek論文寫作提示詞指令大全(覆蓋選題、寫作、潤色到投稿全流程)

一、選題與框架設計 1、跨學科選題突破 指令:"結合[領域A]與[領域B]的前沿理論,生成5個交叉創新性論文選題,要求每個選題包含可行性評估。"(支持跨學科研究創新) 示例:"在人工智能與教育心理學領域生成選題,分析理論適用性與資源獲取難度。" 2、…

win11安裝WSL(創建用戶、更改或重置密碼)

文章目錄 win11安裝WSL設置 Linux 用戶名和密碼更改或重置密碼更新和升級軟件包WSL 命令互操作性WSL 的基本命令安裝列出可用的 Linux 發行版列出已安裝的 Linux 發行版將 WSL 版本設置為 1 或 2設置默認 WSL 版本設置默認 Linux 發行版將目錄更改為主頁通過 PowerShell 或 CMD…

Vue.js 與 Ajax (vue-resource) 的深入解析

Vue.js 與 Ajax (vue-resource) 的深入解析 引言 在Web開發中,前后端的交互是不可或缺的。Ajax(異步JavaScript和XML)技術允許我們在不重新加載整個頁面的情況下,與服務器交換數據和更新部分網頁內容。Vue.js 作為一種流行的前端框架,提供了多種方式來處理Ajax請求。其中…

第十三章-PHP MySQL擴展

第十三章-PHP與MySQL 一&#xff0c;連接數據庫 1. 使用 MySQLi&#xff08;面向對象方式&#xff09; <?php // 數據庫參數 $host localhost; $username root; $password ; $database test_db;// 創建連接 $conn new mysqli($host, $username, $password, $databa…

【文獻閱讀】全球干旱地區植被突變的普遍性和驅動因素

一、研究背景 全球干旱區&#xff08;drylands&#xff09;覆蓋了陸地面積的40%以上&#xff0c;承載了全球約三分之一人口&#xff0c;是生態系統脆弱性較高的區域。這些地區對氣候變化和人類干擾尤其敏感。近年來&#xff0c;干旱區發生了大量植被突變現象&#xff0c;即生態…

【Vue3-Bug】中路由加載頁面直接顯示空白

Vue3中路由加載頁面直接顯示空白 沒有子路由 路由定義不能重復&#xff0c;請自己查看數據在main.js(或者)mina.ts入口文件中&#xff0c;需要將router的注入到vue中的執行放在&#xff0c;vue掛在元素之前 // 順序不能變 app.use(router) app.mount(#app)在App.vue中 // 在…

影樓精修-露齒笑算法解析

注意&#xff0c;為避免侵權&#xff0c;本文圖片均為AIGC生成或網絡公開數據&#xff1b; 像素蛋糕-露齒笑 在介紹本文之前&#xff0c;先說一下&#xff0c;其實露齒笑特效&#xff0c;并非像素蛋糕首創&#xff0c;早在幾年前&#xff0c;face app就率先推出了這個效果&am…

關于Python:7. Python數據庫操作

一、sqlite3&#xff08;輕量級本地數據庫&#xff09; sqlite3 是 Python 內置的模塊&#xff0c;用于操作 SQLite 數據庫。 SQLite 是一個輕量級、零配置的關系型數據庫系統&#xff0c;整個數據庫保存在一個文件中&#xff0c;適合小型項目和本地存儲。 SQLite 不需要安裝…

c++互斥鎖,競爭狀態與臨界區

競爭狀態與臨界區 1&#xff0c;基本互斥鎖2&#xff0c;try_lock3&#xff0c;互斥鎖存在的坑—線程搶占不到資源4&#xff0c;超時鎖5&#xff0c;遞歸鎖&#xff08;在一個線程內可以多次lock的鎖&#xff09;recursive_mutex和recursive_timed_mutex用于業務組合6&#xff…

實戰項目:基于控制臺與數據庫的圖書管理系統開發指南

一、項目概述與設計思路 1.1 為什么選擇圖書管理系統 圖書管理系統是學習編程的經典項目&#xff0c;它涵蓋了&#xff1a; 控制臺交互&#xff1a;學習用戶輸入輸出處理 數據庫操作&#xff1a;掌握CRUD核心功能 業務邏輯&#xff1a;理解實際應用場景 系統架構&#xff…

人工智能——層次聚類算法

目錄 摘要 18 層次聚類 18.1 本章工作任務 18.2 本章技能目標 18.3 本章簡介 18.4 編程實戰 18.5 本章總結 18.6 本章作業 本章已完結&#xff01;&#xff01;&#xff01; 摘要 本章實現的工作是&#xff1a;首先導入20名學生的3科成績&#xff0c;然后根據優先聚…

Linux中安裝mysql8,轉載及注意事項

一、先前往官網下載mysql8 下載地址&#xff1a; https://dev.mysql.com/downloads/選擇Linux 二、刪除Linux中的mysql&#xff08;如果有的話&#xff09;&#xff0c;上傳安裝包 1、先查看mysql是否存在&#xff0c;命令如下&#xff1a; rpm -qa|grep -i mysql如果使用這…

《算法導論(第4版)》閱讀筆記:p4-p5

《算法導論(第4版)》學習第 3 天&#xff0c;p4-p5 總結&#xff0c;總計 2 頁。 一、技術總結 1.instance Thus, given the input sequence h31; 41; 59; 26; 41; 58i, a correct sorting algorithm returns as output the sequence h26; 31; 41; 41; 58; 59i. Such an inp…

第十四篇:系統分析師第三遍——15章

目錄 一、目標二、計劃三、完成情況四、意外之喜(最少2點)1.計劃內的明確認知和思想的提升標志2.計劃外的具體事情提升內容和標志 五、總結六、后面準備怎么做&#xff1f; 一、目標 通過參加考試&#xff0c;訓練學習能力&#xff0c;而非單純以拿證為目的。 1.在復習過程中&…