[拾 得] 一枚迷人的貝殼 SHELL / Linux | shell 腳本初步入門

来源:https://www.cnblogs.com/alopex/archive/2018/01/28/8372236.html
-Advertisement-
Play Games

堅持知識分享,該文章由Alopex編著, 轉載請註明源地址: http://www.cnblogs.com/alopex/ 索引: 什麼是shell shell的分類 shell腳本的執行方式 摘要: 瞭解shell的本質是什麼 瞭解除bash這個shell之外,還有哪些shell shell 腳本 ...


堅持知識分享,該文章由Alopex編著, 轉載請註明源地址: http://www.cnblogs.com/alopex/   索引:
  • 什麼是shell
  • shell的分類
  • shell腳本的執行方式 
  摘要:
  • 瞭解shell的本質是什麼
  • 瞭解除bash這個shell之外,還有哪些shell
  • shell 腳本以及shell腳本的執行方式/區別
       

 

    什麼是shell 一般來說,操作系統由用戶介面(User Interface)和系統內核(kernel)兩部分構成 從名字可以看出,內核是操作系統的核心, 它是一個操作系統的靈魂 內核的主要作用有以下幾點
  1. 文件管理 (File manager)  協調調度電腦中的大容量存儲
  2. 設備驅動 (Device drivers) 使接入電腦的周邊設備能相互通信
  3. 記憶體管理 (Memory manager) 協調調度電腦中的記憶體
  4. 進程調度 (Scheduler)  協調調度系統中的進程
  5. 時間調度 (Dispatcher) 給予進程CPU的使用時間
  6. 系統調用 (System calls) 進程請求系統內核去執行一些它(普通進程)沒有許可權執行的命令
  • 簡單概括, 內核負責管理電腦硬體資源(CPU, 記憶體, 硬碟, 周邊設備I/O)的使用
內核是如此的重要, 它對系統的穩定高效運行起到至關重要的作用. 因如此, 操作系統是不允許用戶直接和內核進行交互的 它(OS)給予用戶另外一個對操作系統訪問的方式, 被稱為用戶介面(UI) 專門用於系統和用戶進行交互   早期的電腦中,操作系統只有命令行界面(command-line interface) 簡稱為CLI 在英文單詞中shell的中文翻譯為 [殼] 表示的是用堅硬的東西保護保護內部柔軟部分 用SHELL來描述命令行界面, 這個 "時髦"的說法 最早(1964 - 1965)誕生於 Multics 其中一位研發者Louis Pouzin 關於 SHELL 起源的故事, 可以點擊這裡瀏覽更多 http://www.multicians.org/shell.html   感謝Louis Pouzin 為CLI 賦予了一個形象生動的名字 : )  
  • 簡單地概括, shell 本質應該是CLI, 它是一個讓用戶通過命令行來實現和系統交互的介面.
 
  shell的分類 操作系統: CentOS release 6.9 (Final) 命令提示符 PS1 : \[\e[31m\]>\[\e[m\] (下圖中紅色的> 為命令提示符) 來介紹shell的分類之前, 先來介紹一下關於shell查看的幾個常用操作   查看系統預設的shell     查看系統中擁有的shell     查看bash的版本

 2014年9月, bash曾曝出一個嚴重的漏洞CVE-2014-6271 

ShellShock Bug (特製環境變數註入攻擊) 我們使用以下命令對系統進行測試  env x='() { :;}; echo vulnerable' bash -c "echo this is a test" 如果測試的結果只顯示了 "this is a test" 表示你的系統正常, 否則你需要對bash打補丁 (以下僅針對CentOS/redhat)

 

Linux shell的大類有以下兩種  Bourne shell 以及 C shell 首先介紹 Bourne shell  Bourne shell 家族中有三大成員, [sh, ksh, bash]   [SH] sh 其的開發者是 Stephen Bourne. 它在 V7 Unix 中作為預設shell 替代了之前使用的  Thompson shell 有意思的是,sh設置sh的許多特性依然沿用至今

Features of the Bourne shell versions since 1979 include:

  • Built-in test command – System III shell (1981)
  • # as comment character – System III shell (1981)
  • Colon in parameter substitutions "${parameter:=word}" – System III shell (1981)
  • continue with argument – System III shell (1981)
  • cat <<-EOF for indented here documents – System III shell (1981)
  • Functions and the return builtin – SVR2 shell (1984)
  • Built-ins unsetechotype – SVR2 shell (1984)
  • Source code de-ALGOL68-ized – SVR2 shell (1984)
  • Modern "$@" – SVR3 shell (1986)
  • Built-in getopts – SVR3 shell (1986)
  • Cleaned up parameter handling allows recursively callable functions – SVR3 shell (1986)
  • 8-bit clean – SVR3 shell (1986)
  • Job control – SVR4 shell (1989)
  • Multi-byte support – SVR4 shell (1989)
[Ksh] Ksh 全稱是 KornShell , 其研發者是 David Korn  它最初的開發是基於Bourne shell的, 因此隸屬於 Bourne shell的陣列中 與 sh相比, 它擁有以下的特性 [bash] bash 的全稱是 Bourne-again shell, 其開發則是GUN計劃的 Brian Fox 目的是為了替代 Bourne shell  它是Linux眾多發行版和apple (最早是 OSX) 預設的shell, 現如今微軟Windows10也有對其的支持 雖然bash是用作sh的替代品, 但是bash並不能完全相容sh, 這是需要註意的. 在CentOS 6.9 中, sh 是一個連接到 bash 上的連接文件, 因此使用sh 命令和 bash命令效果是一樣的  

 

C Shell 家族有兩個成員 [csh, tcsh]

[csh] csh 其設計者是 Bill Joy  由於csh擁有交互的特性, 在1980年, csh以其易於上手的特性, 贏得了青睞 csh的設計理念是使得它開起來更像是 C語言, 並且擁有更好的用戶交互性

Bourne shell

#!/bin/shif [ $days -gt 365 ]then
   echo This is over a year.
fi
 

C shell

#!/bin/cshif ( $days > 365 ) then   echo This is over a year. endif
以上這個例子, 可以說明csh  與 bash 中腳本書寫的差異性 就以上的腳本而言, csh的可讀性略勝一籌    [tcsh] 由於sh有進階版的bash, csh也有其進階版,名字就叫tcsh 它是BSD 相關係統的tcsh   簡單整理一下 shell 有兩大陣型 Bourne shell 與 C shell Bourne shell (sh) --> Korn shell (ksh)  Bourne shell (sh) --> Bourne again shell (bash)  總多Linux發行版上最流行的shell  csh --> tcsh 如今在BSD系統上最流行的shell  
shell 腳本的執行方式

 

# 執行的腳本     [第一種方式 sh script.sh] 這是一種十分常用的 shell 腳本執行方式. 因為它不需要用戶給予腳本執行許可權 sh 命令接收 script.sh 這個文件作為傳入參數, 開啟一個子shell進行命令的解析與執行   [第二種方式 source(.) script.sh]  這種方式, 也不需要用戶給予腳本執行許可權, 腳本將直接在當前shell中執行 這意味著, 在script.sh 中定義的變數或函數, 在腳本執行結束後, 變數的值或函數返回值等將被保留 (需要註意的是, "." script.sh 這種方式只能在 bash 類型的shell中執行 而 source script.sh  既能在 bash類型 也能在 csh 類型的shell中執行)    [第三種方式 ./script.sh] 這種方式, 用戶必須賦予腳本執行許可權(chmod a+x script.sh)  才能運行腳本, 該方式也是通過子shell對命令進行解析與執行
 [關於 子shell 和 父shell] 簡單來說,子shell和父shell的關係有以兩點 1.子shell 會複製 父shell的變數和函數, 就如同子女繼承父母的基因一樣, 2.子shell中設置的變數和函數只有子shell自己知道, 子shell無法改變父shell設定的變數和函數   腳本執行中, 如果使用 source / . 方式執行腳本, 命令會於當前shell中解析執行 下麵用一個簡單的腳本來體會一下, 當前shell中執行腳本, 和子shell執行腳本的取本   腳本內容   使用當前shell執行完cd命令後, 當前shell的目錄發生了變化   使用子shell執行完cd命令後, 當前shell的目錄並沒有發生改變    ------------------------------ 參考資料: https://www.amazon.com/Computer-Science-Overview-Glenn-Brookshear/dp/0133760065    // Computer Science: An Overview (12th Edition)   https://www.wikiwand.com/en/Kernel_(operating_system)                                         // Kernel (operating system)   http://www.multicians.org/shell.html              // The Origin of the Shell   https://www.wikiwand.com/en/Command-line_interface // Command-line interface   https://unix.stackexchange.com/questions/14934/why-was-the-word-shell-used-to-descibe-a-command-line-interface  // Why was the word “shell” used to descibe a command-line interface?   https://access.redhat.com/blogs/766093/posts/1976383  // Bash specially-crafted environment variables code injection attack   https://www.youtube.com/watch?v=hlDxOvO4Jxk        // What is the ShellShock Bug? (September 2014)   https://www.youtube.com/watch?v=UllSNdgGLbo         // ShellShock Attack Demonstration   https://www.wikiwand.com/en/Bourne_shell        // Bourne shell   https://www.wikiwand.com/en/KornShell            // KornShell https://www.wikiwand.com/en/Bash_(Unix_shell)  // Bash (Unix shell)   https://www.wikiwand.com/en/C_shell          // C shell   https://www.wikiwand.com/en/Tcsh          // tcsh   https://unix.stackexchange.com/questions/2976/different-ways-to-execute-a-shell-script    // Different ways to execute a shell script
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 Spread for Windows Forms是功能最為強大的表格控制項,擁有靈活開放的對象模型和50,000個以上的API,使得開發人員幾乎可以定製所有的元素和介面。但另一方面,因為Spread的介面非常多,也有一些開發人員反映Spread的入門不太容易。希望我們編寫的“快速入門”系列文章, ...
  • 從記憶體中載入的程式集,無路徑 IIS中路徑 protected void Page_Load(object sender, EventArgs e) { Response.Write("程式集路徑"+System.Reflection.Assembly.GetExecutingAssembly().... ...
  • 【01】淺談HTTP在WebApi開發中的運用 【02】聊聊WebApi體繫結構 【03】詳解WebApi如何傳遞參數 【04】詳解WebApi測試和PostMan 【05】淺談WebApi Cores 【06】詳解WebApi 異常處理 【07】用WebAPI寫個基於EF的CURD 【08】淺談W ...
  • 源自:https://segmentfault.com/q/1010000000534091?_ea=178721 Model:很簡單,就是業務邏輯相關的數據對象,通常從資料庫映射而來,我們可以說是與資料庫對應的model。 View:也很簡單,就是展現出來的用戶界面。 基本上,絕大多數軟體所做的工 ...
  • 前面說過,每個線程都有自己的資源,但是代碼區是共用的,即每個線程都可以執行相同的函數。這可能帶來的問題就是幾個線程同時執行一個函數,導致數據的混亂,產生不可預料的結果,因此我們必須避免這種情況的發生。 C#提供了一個關鍵字lock,它可以把一段代碼定義為互斥段(critical section),互 ...
  • 1.最新版本 2.打開文件,將包含以下文件: Ext.Net.dll Ext.Net.Utilities.dll Ext.Net.xml Newtonsoft.Json.dll Newtonsoft.Json.xml 3.打開 Visual Studio,創建C#網站項目 打開菜單創建網站 彈出"創 ...
  • http://blog.csdn.net/dndxhej/article/details/7434615 對sysfs和設備模型有瞭解的都會知道sysfs實際是為了將設備模型導出到用戶空間的一個記憶體文件系統。 設備模型的關鍵結構體kobject會組成設備模型的樹形結構,而sysfs的關鍵結構體sys ...
  • 工作原理: 簡單的來說,Sed一次處理一行內容。處理時,把當前處理的行存儲在臨時緩衝區中,稱之為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往屏幕,接著處理下一行,直到文件末尾。 語法: sed [option] [script'(se ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...