尚硅谷課程【筆記】——大數據之Shell【一】

課程視頻:【【尚硅谷】Shell腳本從入門到實戰】

一、Shell概述

為什么要學習Shell?

1)需要看懂運維人員的Shell程序

2)偶爾編寫一些簡單的Shell程序來管理集群、提高開發效率

什么是Shell?

1)Shell是一個命令行解釋器,它接受應用程序/用戶命令,然后調用操作系統內核。

2)Shell還是一個功能相當強大的編程語言,易編寫、易調試、靈活性強。

二、Shell解析器

Linux提供的Shell解析器有:/bin/sh、/bin/bash等。

sh實際是軟連接直接指向bash

三、Shell腳本入門

1、腳本格式

#!/bin/bash開頭(指定解析器)

2、創建一個helloworld腳本

創建腳本文件:touch helloworld.sh

#!/bin/bashecho "helloworld"

運行腳本:sh helloworld.sh或bash helloworld.sh或./helloworld.sh(用戶執行,需要有權限)

3、創建一個多命令處理腳本

要求在/home/目錄下創建一個banzhang.txt,在該txt文件中增加“I love cls”.

創建腳本文件:touch batch.sh

#!/bin/bashcd /home/
touch banzhang.txt
echo "I love cls" >> banzhang.txt

運行腳本:bash batch.sh

四、Shell中的變量

系統變量

$HOME、#PWD、$SHELL、$USER等

查看變量值:echo+變量名。如:echo $HOME。

自定義變量

1)定義變量:變量=值。如:NUM=1。

2)撤銷變量:unset 變量。如:unset NUM。

3)聲明靜態變量:readonly 變量(不能被撤銷unset)。如:readonly NUMBER=2。

自定義變量定義規則

1)變量名可以由字母、數字和下劃線組成,但是不能以數字開頭,環境變量名建議大寫。

2)等號兩側不能有空格。

3)在bash中,變量默認都是字符串類型,無法直接進行數值運算。

4)變量值如果有空格,需要使用單引號或雙引號括起來。

5)把變量提升為全局環境變量,可供其他Shell程序使用:export 變量名。如:export NUMBER。

特殊變量$n、$#、$*、$@、$?

$n:其中n為數字,$0表示該腳本的名字,$1-$9表示傳入腳本的1-9個參數。

#!/bin/bash
#創建一個名為parameter.sh的腳本
echo "$0 $1 $2"

運行bash parameter.sh ABC 123,會輸出parameter.sh ABC 123。

$#:獲取所有輸入參數個數。

#!/bin/bash
#創建一個名為parameter.sh的腳本
echo "$0 $1 $2"
echo $#

運行bash parameter.sh ABC 123 abc,會輸出

parameter.sh ABC 123

3。

$*:代表命令行中的所有參數,$*把所有的參數看成一個整體。

$@:代表命令行中的所有參數,$@把每個參數區分對待。

#!/bin/bash
#創建一個名為parameter.sh的腳本
echo "$0 $1 $2"
echo $#
echo $*
echo $@

運行bash parameter.sh ABC 123 abc,會輸出

parameter.sh ABC 123

3

ABC 123 abc

ABC 123 abc。

$?:最后一次執行命令的返回狀態。0表示正確執行,非零表示沒有正確執行。

五、運算符

基本語法

1)$((運算式))或$[運算式]

2)expr + - \* /% (expr運算符之間必須有空格

實操

計算2+3:expr 2 + 3

計算(2+3)*4,expr `expr 2 + 3` \* 4 或 $[(2+3)*4]

六、條件判斷

基本語法

[ condition ](condition前后要有空格,條件非空即為true)

常用判斷條件

常用判斷條件
=字符串比較
-lt小于-le小于等于
-eq等于-gt大于
-ge大于等于-ne不等于
按照文件權限進行判斷:
-r有讀的權限
-w有寫的權限
-x有執行的權限
按照文件權限進行判斷:
-f文件存在且是一個常規文件
-e文件存在
-d文件存在且是一個目錄

如:

判斷23是否小于22:[ 23 -le 22 ]

判斷helloworld.sh是否具有寫權限:[ -w helloworld.sh]

多條件判斷

&&表示前一條命令執行成功后,才執行后一條命令;

||? ?表示上一條命令執行失敗后,才執行下一條命令。

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

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

相關文章

ES6 對象擴展:對象簡寫,對象屬性 表達式,擴展運算符 ...,Object.assign,Object.is,用法和應用場景

1. 對象屬性簡寫 1.1 基本語法 // 傳統寫法 const name John; const age 25; const user {name: name,age: age };// ES6 簡寫語法 const user {name,age };1.2 實際應用場景 // 1. 函數返回對象 function createUser(name, age, email) {return {name,age,email}; }// …

【2025】camunda API接口介紹以及REST接口使用(3)

前言 在前面的兩篇文章我們介紹了Camunda的web端和camunda-modeler的使用。這篇文章主要介紹camunda結合springboot進行使用,以及相關api介紹。 該專欄主要為介紹camunda的學習和使用 🍅【2024】Camunda常用功能基本詳細介紹和使用-下(1&…

Java進階學習之路

Java進階之路 提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加 提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 Java進階之路前言一、Java入門 Java基礎 1、Java概述 1.1 什…

JAVA安全—反射機制攻擊鏈類對象成員變量方法構造方法

前言 還是JAVA安全,哎,真的講不完,太多啦。 今天主要是講一下JAVA中的反射機制,因為反序列化的利用基本都是要用到這個反射機制,還有一些攻擊鏈條的構造,也會用到,所以就講一下。 什么是反射…

TfidfVectorizer

TF-IDF / Term Frequency - Inverse Document Frequency 作用:是自然語言處理NLP中常用的文本特征提取工具,用于將文本數據轉換為數據向量。 核心思想:是通過統計詞頻和逆文檔頻率來量化詞語在文本中的重要性。 T F ? I D F ( t , d ) T F…

DeepSeek-R1 論文解讀:強化學習如何 “煉” 出超強推理模型?

深度解析DeepSeek-R1:強化學習驅動大語言模型推理能力新突破 論文鏈接:DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 在大語言模型(LLMs)飛速發展的當下,提升模型推理能力成…

【數據結構】循環鏈表

循環鏈表 單鏈表局限性單向循環鏈表判斷鏈表是否有環思路code 找到鏈表入口思路代碼結構與邏輯 code 單鏈表局限性 單鏈表作為一種基本的數據結構,雖然在很多場景下都非常有用,但它也存在一些局限性: 單向訪問:由于每個節點僅包含…

ip屬地是手機號還是手機位置?一文理清

在數字化和網絡化的今天,IP屬地這一概念逐漸成為了人們關注的焦點。特別是在社交媒體和在線平臺上,IP屬地的顯示往往讓人聯想到用戶的地理位置。然而,關于IP屬地到底與手機號還是手機位置有關,卻存在著不少誤解和混淆。本文將深入…

【嵌入】基于nomic-embed-text-v1.5和HuggingFaceEmbeddings實現

測試代碼 model_name = /media/zhangbin/DATA/DataCache/nomic-ai/nomic-embed-text-v1.5import osos.environ[HF_HOME] = /media/zhangbin/DATA/DataCache/#os.environ["TRANSFORMERS_CACHE"] = "/media/zhangbin/DATA/DataCache/" # 確保目錄結構正確 if…

離散時間傅里葉變換(DTFT)公式詳解:周期性與連續性剖析

摘要 離散時間傅里葉變換(DTFT)是數字信號處理領域的重要工具,它能將離散時間信號從時域轉換到頻域,揭示信號的頻率特性。本文將深入解讀DTFT公式,詳細闡述其具有周期性和連續性的原因,幫助讀者全面理解DT…

哈希表與散列表的原理及C++實現

1. 什么是哈希表? 哈希表(Hash Table)是一種高效的數據結構,用于存儲鍵值對(Key-Value Pairs)。它通過哈希函數(Hash Function)將鍵(Key)映射到一個固定大小…

圖像分類與目標檢測算法

在計算機視覺領域,圖像分類與目標檢測是兩項至關重要的技術。它們通過對圖像進行深入解析和理解,為各種應用場景提供了強大的支持。本文將詳細介紹這兩項技術的算法原理、技術進展以及當前的落地應用。 一、圖像分類算法 圖像分類是指將輸入的圖像劃分為…

前端框架中 HTML 的應用技巧:React、Vue、Angular 深度解析

系列文章目錄 01-從零開始學 HTML:構建網頁的基本框架與技巧 02-HTML常見文本標簽解析:從基礎到進階的全面指南 03-HTML從入門到精通:鏈接與圖像標簽全解析 04-HTML 列表標簽全解析:無序與有序列表的深度應用 05-HTML表格標簽全面…

Vue - customRef 自定義ref

customRef 作用:創建一個自定義的 ref , 并對其依賴項跟蹤和更新觸發進行邏輯控制。 在原生 ref 的基礎上,添加自己的邏輯等... 在 Vue 3 中,customRef 是一個用于創建自定義響應式引用的 API。它允許開發者控制和優化響應式引用的行為&…

數字化轉型:概念性名詞淺談(第四講)

?大家好,本篇文章是在新年之際寫的,所以在這里先給大家拜個年。 今天要介紹的名詞為ETL: ETL,是英文Extract-Transform-Load的縮寫,用來描述將數據從來源端經過抽取(extract)、轉換(transfor…

UE學習日志#22 C++筆記#8 基礎復習8 string和string_view2

1 std::string_view類 string_view基本上就是const string&的簡單替代品,但不會產生開銷。他不復制字符串。 string_view添加了remove_prefix(size_t)和remove_suffix(size_t)方法,前者將起始指針給定的偏移量來收縮字符串,后者則將結尾指…

UVM factory機制

目錄 1. factory-register 1.1 uvm_object_registry#(type T=uvm_object, string Tname="") 1.1 uvm_default_factory::register 2. factory-override 2.1 set_type_override(uvm_object_wrapper override_type) 2.2 set_inst_override(uvm_object_wrapper ove…

Spring MVC學習——發送請求(@RequestMapping注解及請求參數綁定)

前言 Spring MVC作為Spring框架中的核心組件之一,其強大的功能在于能簡潔高效地處理HTTP請求和響應。在開發Web應用時,理解和正確使用Spring MVC的注解,尤其是RequestMapping注解,至關重要。本文將詳細講解RequestMapping注解的使…

C# Action和 Func的用法

C#中的數據類型 函數數據類型 Action 是一個數據類型 但是是沒有返回值得函數數據類型 Func 用于指定一個有返回值的委托 internal class Program{static void Main(string[] args){TT.F1(NoVoid);TT.F2(Void1);Void2(() > { Console.WriteLine("Void2執行了");…

C++中的模板(上)

C中的模板(上) 模板參數和函數參數是很像的,函數參數定義的形參對象,而模板參數定義的是類型. 模板分為函數模板和類模板 函數模板 一個交換兩個數的函數模板: template<class T> // 此處typename和class是等價的 void Swap(T &a, T &b) {T temp a;a b;b …