大數據系列博客之 --- 深入簡出 Shell 腳本語言(基礎篇)

来源:https://www.cnblogs.com/lsy131479/archive/2018/11/06/9914747.html
-Advertisement-
Play Games

首先聲明,此系列shell系列博客分為四篇發佈,分別是: 基礎篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html 高級篇:https://www ...


 

首先聲明,此系列shell系列博客分為四篇發佈,分別是:

  基礎篇:https://www.cnblogs.com/lsy131479/p/9914747.html

  提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html

  高級篇:https://www.cnblogs.com/lsy131479/p/9914962.html

  面試篇:

 

1. Shell概述

為什麼要學習Shell呢?

1需要看懂運維人員編寫的Shell程式。

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

 

2 .Shell解析器

1Linux提供的Shell解析器有:

 

[fsdm@hadoop101 ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh

 常用的解析一般是 : /bin/bash

2bashsh的關係

[fsdm@hadoop101 bin]$ ll | grep bash
-rwxr-xr-x. 1 root root 941880 5月  11 2016 bash
lrwxrwxrwx. 1 root root      4 5月  27 2017 sh -> bash

 可以看到sh是引用的bash

3Centos預設的解析bash

[fsdm@hadoop102 bin]$ echo $SHELL
/bin/bash

3. Shell腳本入門

1腳本格式

腳本以#!/bin/bash開頭指定解析

 

2第一個Shell腳本helloworld

 

1)需求:創建一個Shell腳本,輸出helloworld

 

2案例實操:

 

[fsdm@hadoop101 datas]$ touch helloworld.sh
[fsdm@hadoop101 datas]$ vi helloworld.sh

在helloworld.sh中輸入如下內容
#!/bin/bash
echo "helloworld"

 

3腳本的常用執行方式

種:採用bashsh+腳本相對路徑或絕對路徑(不用賦予腳本+x許可權)

001.sh+腳本的相路徑

 

[fsdm@hadoop101 datas]$ sh helloworld.sh 
Helloworld

 

002.sh+腳本的絕對路徑

 

 

 

[fsdm@hadoop101 datas]$ sh /home/fsdm/datas/helloworld.sh 
helloworld

003.bash+腳本的相對路徑

 

[fsdm@hadoop101 datas]$ bash helloworld.sh 
Helloworld

004.bash+腳本絕對路徑

 

[fsdm@hadoop101 datas]$ bash /home/fsdm/datas/helloworld.sh 
Helloworld

 

種:採用輸入腳本的絕對路徑或相對路徑執行腳本必須具有可執行許可權+x

a)首先要賦予helloworld.sh 腳本的+x許可權

 

[fsdm@hadoop101 datas]$ chmod 777 helloworld.sh

 

b)執行腳本

相對路徑

 

[fsdm@hadoop101 datas]$ ./helloworld.sh 
Helloworld

 

絕對路徑

 

[fsdm@hadoop101 datas]$ /home/fsdm/datas/helloworld.sh 
Helloworld

 

註意:第一種執行方法,本質bash解析器幫你執行腳本,所以腳本本身不需要執行許可權。二種執行方法,本質是腳本需要自己執行需要執行許可權。

 

3Shell腳本:多命令處理

 

1)需求

 

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

 

2)案例實操:

 

[fsdm@hadoop101 datas]$ touch batch.sh
[fsdm@hadoop101 datas]$ vi batch.sh

在batch.sh中輸入如下內容
#!/bin/bash

cd /home/fsdm
touch cls.txt
echo "I love cls" >>cls.txt

 

4. Shell中的變數

4.1 系統變數

1. 常用系統變數

$HOME$PWD$SHELL$USER

2案例實操

1)查看系統變數的值

 

[fsdm@hadoop101 datas]$ echo $HOME
/home/fsdm

 

2顯示當前Shell中所有變數:set

 

[fsdm@hadoop101 datas]$ set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()

 

4.2 自定義變數

1基本語法

1)定義變數:變數= 

2)撤銷變數:unset 變數

3)聲明靜態變數:readonly變數,註意:不能unset

2變數定義規則

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

2等號兩側不能有空格

3bash中,變數預設類型都是字元串類型,無法直接進行數值運算。

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

3案例實操

1)定義變數A

 

[fsdm@hadoop101 datas]$ A=5
[fsdm@hadoop101 datas]$ echo $A
5

 

2變數A重新賦值

 

[fsdm@hadoop101 datas]$ A=8
[fsdm@hadoop101 datas]$ echo $A
8

 

3)撤銷變數A

 

[fsdm@hadoop101 datas]$ unset A
[fsdm@hadoop101 datas]$ echo $A

 

4)聲明靜態變數B=2,不能unset或改變變數值

 

[fsdm@hadoop101 datas]$ readonly B=2
[fsdm@hadoop101 datas]$ echo $B
2
[fsdm@hadoop101 datas]$ B=9
-bash: B: readonly variable

 

  readonly 只讀(靜態變數)

5bash中,變數預設類型都是字元串類型,無法直接進行數值運算

 

[fsdm@hadoop102 ~]$ C=1+2
[fsdm@hadoop102 ~]$ echo $C
1+2

 

6變數的值如果有空格,需要使用雙引號或單引號括起來

 

[fsdm@hadoop102 ~]$ D=I love banzhang
-bash: world: command not found
[fsdm@hadoop102 ~]$ D="I love banzhang"
[fsdm@hadoop102 ~]$ echo $A
I love banzhang

 

7)可把變數提升為全局環境變數,可供其他Shell程式使用

export 變數名

[fsdm@hadoop101 datas]$ vim helloworld.sh 

在helloworld.sh文件中增加echo $B
#!/bin/bash

echo "helloworld"
echo $B

[fsdm@hadoop101 datas]$ ./helloworld.sh 
Helloworld

發現並沒有列印輸出變數B的值

我們 export 一下B,然後執行腳本:

[fsdm@hadoop101 datas]$ export B
[fsdm@hadoop101 datas]$ ./helloworld.sh 
helloworld
2

 

4.3 特殊變數$n

1基本語法

$n (功能描述:n為數字,$0代表該腳本名稱$1-$9代表第一到第九個參數,十以上的參數,十以上的參數需要用大括弧包含,如${10}

2案例實操

1)輸出該腳本文件名稱輸入參數1和輸入參數2

 

[fsdm@hadoop101 datas]$ touch parameter.sh 
[fsdm@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"

[fsdm@hadoop101 datas]$ chmod 777 parameter.sh

[fsdm@hadoop101 datas]$ ./parameter.sh cls  xz
./parameter.sh  cls   xz

 

4.4 特殊變數$#

1基本語法

$# (功能描述:獲取所有輸入參數個數,常用於迴圈

2案例實操

1獲取輸入參數的個數

 

[fsdm@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#

[fsdm@hadoop101 datas]$ chmod 777 parameter.sh

[fsdm@hadoop101 datas]$ ./parameter.sh cls  xz
parameter.sh cls xz 
2

 

4.5 特殊變數$*$@

1基本語法

$* (功能描述:這個變數代表命令行中所有的參數,$*把所有的參數看成一個整體)

$@ (功能描述:這個變數也代表命令行中所有的參數,不過$@把每個參數區分對待)

2案例實操

1)列印輸入所有參數

 

[fsdm@hadoop101 datas]$ vim parameter.sh

#!/bin/bash
echo "$0  $1   $2"
echo $#
echo $*
echo $@

[fsdm@hadoop101 datas]$ bash parameter.sh 1 2 3
parameter.sh  1   2
3
1 2 3
1 2 3

 

4.6 特殊變數$

1基本語法

$ (功能描述:最後一次執行的命令的返回狀態。如果這個變數的值為0,證明上一個命令正確執行;如果這個變數的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了。)

2案例實操

1判斷helloworld.sh腳本是否正確執行

 

[fsdm@hadoop101 datas]$ ./helloworld.sh 
hello world
[fsdm@hadoop101 datas]$ echo $?
0

 

5. 運算符

1基本語法

1“$((運算式))”“$[運算式]”

2expr  + , - , \*,  /,  %    ,乘,除,取餘

註意expr運算符間要有空格

2案例實操:

1計算3+2的值

 

[fsdm@hadoop101 datas]$ expr 2 + 3
5

 

2計算3-2的值

 

[fsdm@hadoop101 datas]$ expr 3 - 2 
1

 

3計算(2+3*4的值

aexpr一步完成計算

 

 

 

 

[fsdm@hadoop101 datas]$ expr `expr 2 + 3` \* 4
20

b)採用$[運算式]方式

 

[fsdm@hadoop101 datas]# S=$[(2+3)*4]
[fsdm@hadoop101 datas]# echo $S

 

 

基礎篇結束,如需深入請閱讀後續篇章,如有疑問私信或評論指出

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、前言 新購置一臺便宜伺服器做資料庫伺服器,減輕Web伺服器的壓力。 為了安全性,root密碼設置的非常複雜(隨機生成),厭倦了拷貝密碼登陸的歷史。 Putty基本用法都不會的請先花10分鐘自行學習。 2、開始 1、用PuTTY SSH 密鑰生成工具puttygen.exe生成密鑰 生成的密鑰類型 ...
  • 1、對虛擬機進行設置,點擊該虛擬機的設置在網路適配器下將網路連接設置為NAT模式。 2、對虛擬機進行設置,點擊虛擬機左上方的編輯-->虛擬網路編輯器,將WMnet信息設置為NAT模式,其它的無需改動,預設即可。 3、在虛擬機中vi /etc/sysconfig/network-scripts/ifc ...
  • Linux記憶體文件系統:可滿足高IO的要求 ramdisk: 基於虛擬在記憶體中的其他文件系統(ex2fs)。 掛載方式:mount /dev/ram /mnt/ramdisk ramfs: 物理記憶體文件系統,只存在於物理記憶體中。其大小也不是固定的,而是隨著所需要的空間動態得增減。 掛載方式:moun ...
  • 指令 cal 查看日曆date 查看日期bc 計算器ls 查看文件ls -l 查看具體信息(許可權,時間等)ls -a 查看所有的文件包括隱藏文件ll 作用同上d* 開頭的都是文件夾,- 開頭的都是文件who am i 用戶信息cat "文件名" 在控制台直接顯示文件內容vi/vim "文件名" 創建 ...
  • 一、命令介紹 top 命令用於動態的監控進程活動與系統負載信息。 格式為 top [參數] 二、實例 直接運行top命令 top命令執行結果的前五行為系統整體的統計信息,代表含義如下: 第1行:系統時間、運行時間、登陸終端數、系統負載(分別為1分鐘、5分鐘、15分鐘內的平均值) 第2行:進程總數、運 ...
  • 該問題,有很多種方法,但是很多方法要麼這個有問題,要麼那個有問題,最後終於找到一種沒問題的方法。記錄一下: 參考地址:https://www.jianshu.com/p/d18ff36a78d6?from=singlemessage Login.py(登錄視窗)文件 Main.py(主視窗)文件 ...
  • 首先聲明,此系列shell系列博客分為四篇發佈,分別是: 基礎篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html 高級篇:https://www ...
  • 首先聲明,此系列shell系列博客分為四篇發佈,分別是: 基礎篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cnblogs.com/lsy131479/p/9914897.html 高級篇:https://www ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...