shell指令碼入門 符號篇

2021-12-30 04:15:05 字數 3467 閱讀 2785

shell就是乙個命令列直譯器,它的作用是解釋執行使用者的命令,使用者輸入一條命令,shell就解釋執行一條,這種方式稱為互動式(interactive)。

shell還有一種執行命令的方式稱為批處理(batch),使用者事先寫一 個shell指令碼(script),其中有很多條命令,讓shell一次把這些命令執行完,而不必一條一條地敲 命令。shell指令碼和程式語言很相似,也有變數和流程控制語句,包括迴圈和分支。但shell指令碼是解釋執行的,不需要編譯,shell程式從指令碼中一行一行讀取並執行這些命令,相當於乙個使用者把指令碼中的命令一行一行敲到shell提示符下執行。作為程式語言,它雖然不是 linux系統核心的一部分,但它呼叫了系統核心的大部分功能來執行程式、建立文件並以並行的方式協調各個程式的執行。

linux系統中常見的shell有:sh、csh、tcsh、bash使用命令: cat /etc/shells 可以檢視當前系統支援的bash

shell指令碼通常以「 .sh」結尾,並不是系統規定,而是一種業界規範

//第一種執行方式:

[root@initiator desktop]# sh testshell.sh

//第二種執行方式:

指令碼中應該有指令碼的說明資訊,

下面的例子是vim自動新增指令碼說明

vim /etc/vimrc

67 map ms:call addtile()'s ##設定快捷鍵為f4

68 function addtile() ##設定函式

69 call append(0,"#!/bin/bash")

70 call append(1,"###############################")

71 call append(2,"#author :lee")

72 call append(3,"#email :[email protected]")

73 call append(4,"#version :")

74 call append(5,"#creat_date :".strftime("%y-%m-%d"))

75 call append(6,"#description :")

76 call append(7,"###############################")

77 endfunction

shell變數不需要進行任何宣告,直接定義即可,因為shell變數的值實際上都是字串(對於沒有定義的變數預設是乙個空串)。定義的時候shell變數由大寫字母加下劃線組成,並且定義的時候等號兩邊不能存在空格,否則會被認為是命令!環境變數:shell程序的環境變數只在當前環境生效,但可以從當前shell程序傳給fork出來的子程序,當前環境關閉則變數失效。

本地變數:只針對配置過的使用者生效,其他使用者無法使用

系統變數:

利用printenv可以顯示當前shell程序的環境變數;利用set命令可以顯示當前shell程序中的定義的所有變數(包括環境變數和本地變數)和函式。

乙個shell變數定義後僅存在於當前shell程序,是乙個本地變數。用export命令可以把本地變數匯出為環境變數。用unset命令可以刪除已定義的環境變數或本地變數。

//分步 先定義後匯出

count=5

export count

//一步完成定義和匯出環境變數

export count=5

//刪除已經定義的環境變數

unset count

變數引用:

引用shell變數要用到$符號,加{}可以防止歧義。

例如:count=5

echo $count

echo $911

// * : 匹配0個或多個任意字元

// ? : 匹配乙個任意字元

// [若干字元] : 匹配方括號中任意乙個字元的一次出現

反引號`` 或者 $()

shell會先執行反引號或$()中的命令,將結果代換到當前命令列中!

反引號和$()的區別:

反引號本身就對\進行了轉義,保留了本身意思,如果我們想在反引號中起到\的特殊意義,我們必須使用2個\來進行表示。

反引號中: \\ = \

$()中:\ = \

算數代換:$(())

例如:將10-2的結果賦給sub,並顯示本地變數sub

sub=$((10-2))

echo $sub

shell指令碼中的單引號和雙引號一樣都是字串的界定符,單引號用於保持引號內所有字元的字面值,而雙引號有些情況則特殊。如果字串中有特殊字元需要處理時就用雙引號。

注:單引號標註的字元中不能再出現單引號。

舉個例子:

#!/bin/bash

echo '\\'

echo "\\"

echo '`date`'

echo "`date`"

diff命令在最簡單的情況下,比較給定的兩個檔案的不同。如果使用「-」代替「檔案」引數,則要比較的內容將來自標準輸入。diff命令是以逐行的方式,比較文字檔案的異同處。如果該命令指定進行目錄的比較,則將會比較該目錄中具有相同檔名的檔案,而不會對其子目錄檔案進行任何比較操作。

diff(選項)(引數)

[num1,num2][a|c|d][num3,num4]

a ##新增

c ##改變

d ##刪除

num1,num2 ##表示在檔案1中的行號

num3,num4 ##表示在檔案2中的行號

以上說明指定了兩個檔案中不同處的行號及其相應的操作。在輸出形式中,每一行後面將跟隨受到影響的若干行。其中,以開始的行屬於檔案1,開始的行屬於檔案2。

diff常用於打補丁,序言安裝patch

yum install patch -y ##安裝補丁軟體

diff file file1>file.path ##生成補丁檔案file.path

patch file file.path ##給file打補丁

##或者

patch -b file file.path ##-b表示備份原始檔為file.orig

指令碼學習 shell指令碼入門 符號篇

shell變數不需要進行任何宣告,直接定義即可,因為shell變數的值實際上都是字串 對於沒有定義的變數預設是乙個空串 定義的時候shell變數由大寫字母加下劃線組成,並且定義的時候等號兩邊不能存在空格,否則會被認為是命令!shell變數的種類 利用printenv可以顯示當前shell程序的環境變...

shell指令碼符號篇

hell執行指令碼 bin bash echo 這是乙個shell指令碼 shell指令碼中用 表示注釋,如果 位於第一 開頭 並且是則例外,它表 該指令碼使 後 指定的直譯器 bin sh解釋執 第一種執行方式 chmod x script.sh shell會 fork 乙個子程序並調 用 exe...

shell指令碼入門篇

1.變數yourname zhangsan echo 不需要型別宣告,賦值時等號中間不能有空格,使用時必須在前面加 建議盡量將變數名用花括號包裹 readonly yournameunset yourname 2.字串 單引號和雙引號的區別 3.陣列array name 1 zhangsan ech...