shell 腳本語言 -超全超詳細-

1、shell 的概述


shell 是一種腳本語言

腳本:本質是一個文件,文件裏面存放的是 特定格式的指令,系統可以使用腳本解析器 翻譯或解析 指令 並執行(它不需要編譯)

shell 既是應用程序 又是一種腳本語言(應用程序 解析 腳本語言)

shell 命令解析器:

系統提供 shell 命令解析器: sh ash bash

查看自己 linux 系統的默認解析:echo $SHELL

shell 腳本是一種腳本語言,我們只需使用任意文本編輯器,按照語法編寫相應程序,增加可執行權限,即可在安裝 shell 命令解釋器的環境下執行

2、腳本的調用形式


打開終端時系統自動調用:/etc/profile 或 ~/.bashrc

/etc/profile

此文件爲系統的每個用戶設置環境信息, 當用戶第一次登錄時, 該文件被執行,系統的公共環境變量在這裏設置

開機自啓動的程序,一般也在這裏設置

~/.bashrc

用戶自己的家目錄中的. bashrc

登錄時會自動調用,打開任意終端時也會自動調用

這個文件一般設置與個人用戶有關的環境變量,如交叉編譯器的路徑等等

用戶手動調用:用戶實現的腳本

3、shell 語法初識


3.1、定義以開頭:#!/bin/bash

#! 用來聲明腳本由什麼 shell 解釋,否則使用默認 shell

3.2、單個 "#" 號代表註釋當前行

第一步:編寫腳本文件

第二步:加上可執行權限

chmod +x xxxx.sh

第三步:運行

三種執行方式 (./xxx.sh bash xxx.sh . xxx.sh)

三種執行方式的不同點(./xxx.sh bash xxx.sh . xxx.sh)

./xxx.sh : 先按照 文件中 #! 指定的解析器解析

如果 #!指定指定的解析器不存在 纔會使用系統默認的解析器

bash xxx.sh: 指明先用 bash 解析器解析

如果 bash 不存在 纔會使用默認解析器

. xxx.sh 直接使用默認解析器解析(不會執行第一行的 #!指定的解析器)但是第一行還是要寫的

三種執行情況:

打開終端就會有以後個解釋器,我們稱爲當前解釋器

我們指定解析器的時候(使用 ./xxx.sh 或 bash xxx.sh)時會創建一個子 shell 解析 腳本

注意:windows 下 寫腳本 在 linux 下執行 注意

執行結果:

將 windows 文件 轉換成 unix 文件

方法一:dos2unix 如果沒有該插件 需要安裝

sudo apt-get install dos2unix

dos2unix shell 腳本

轉換成功就可以執行運行

方法二:

需要用 vi 打開腳本,在最後一行模式下執行

:set ff=unix

4、變量


定義變量 變量名 = 變量值 如:num=10 引用變量 $ 變量名 unset :清除變量值

運行結果:

從鍵盤獲取值 read

運行結果:

案例:

在一行上顯示和添加提示 需要加上 - p

運行結果:

案例:讀取多個值

運行結果:

案例只讀變量:

運行結果:

查看環境變量:env

導出環境變量 作用:(讓其他 shell 腳本識別該變量,設爲全局變量)

source 腳本文件 source 命令用法: source FileName

作用: 在當前 bash 環境下讀取並執行 FileName 中的命令。

注: 該命令通常用命令 “.” 來替代。

如: source .bash_rc 與 . .bash_rc 是等效的。

注意: source 命令與 shell scripts 的區別是,

source 在當前 bash 環境下執行命令,而 scripts 是啓動一個子 shell 來執行命令。這樣如果把設置環境變量 (或 alias 等等) 的命令寫進 scripts 中,就只會影響子 shell, 無法改變當前的 BASH, 所以通過文件 (命令列) 設置環境變量時,要用 source 命令。

06_sh.sh

#!/bin/bash
expor DATA=250

用 source 是文件生效

使用 env 可以查看到環境變量中已經有 DATA

可以在終端直接中讀取:

在其他 sh 腳本讀取:

運行結果:

注意事項:

1、變量名只能包含英文字母下劃線,不能以數字開頭 1_num=10 錯誤 num_1=20 正確

2、等號兩邊不能直接接空格符,若變量中本身就包含了空格,則整個字符串都要用雙引號、或單引號括起來

3、雙引號 單引號的區別

雙引號:可以解析變量的值

單引號:不能解析變量的值

運行結果:

如果想在 PATH 變量中 追加一個路徑寫法如下:(重要!!!!)

export PATH=$PATH:/需要添加的路徑

5、預設變量


shell 直接提供無需定義的變量

案例:


運行結果:

腳本標量的特殊用法

加 - e 轉義 才起換行作用

() 由子 shell 完成

{} 由當前的 shell 執行

6、變量的擴展


6.1、判斷變量是否存在

6.2、字符串的操作

7、條件測試


test 命令:用於測試字符串、文件狀態和數字

test 命令有兩種格式:

test condition 或 [condition]

使用方括號時,要注意在條件兩邊加上空格。

7.1、文件測試

7.2、字符串測試

7.3、數值測試

7.4、符合語句測試

8、控制語句


8.1、if 控制語句

格式一:
if [條件1]; then
    執行第一段程序
else
    執行第二段程序
fi
格式二:
if [條件1]; then
    執行第一段程序
elif [條件2];then
執行第二段程序
else
    執行第三段程序
fi

案例:

案例:判斷當前路徑下有沒有文件夾 有就進入創建文件 沒有 就創建文件夾 再進入創建文件

運行結果:

案例:

運行結果:

8.2、case

8.3、for 循環語句

案例:

案例:掃描當前文件

8.4、while

8.5、until

8.6、break continue

9、函數


所有函數在使用前必須定義,必須將函數放在腳本開始部分,直至 shell 解釋器首次發現它時,纔可以使用

案例:求最值

案例:函數分文件

fun.sh

24_sh.sh

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/wCwWfEAEqnsWeSczWkVmBw