shell指令碼程式設計(學習筆記)

2021-10-09 23:41:03 字數 3274 閱讀 5756

shell指令碼的本質

—— shell指令碼語言是解釋型語言

—— shell指令碼的本質

shell命令的有序集合

shell程式設計的基本過程

基本過程分為三步:

1、建立shell檔案(以.sh結尾)

例:vi shell1.sh

date

2、賦予shell檔案執行許可權

用chmod命令修改許可權

chmod 740 shell1.sh

3、執行shell檔案

直接在命令列上呼叫shell程式

./shell1.sh

shell變數

——shell允許使用者建立變數儲存資料,但不支援資料型別(整型、字元、

浮點型),將任何賦給變數的值都解釋為一串字元

使用者自定義變數

—— 在shell程式設計中通常使用全大寫變數,方便識別

count=1

—— 變數的呼叫:在變數前加$

echo $count

—— linux shell/bash從右向左賦值

y=yx=$y

echo $x

y—— 使用unset命令刪除變數的賦值

z=hello

echo $z

hello

unset z

echo $z

沒有值位置變數

—— $0    與鍵入的命令列一樣,包含指令碼檔名

—— $#    包含命令列引數的個數

—— $@    包含所有命令列引數

—— $?    包含前乙個命令的退出狀態

—— $*    包含所有命令列引數

—— $$    包含正在執行程序的id號

環境變數

可通過export或env來檢視

常見環境變數

home:/ect/passwd檔案中列出的使用者主目錄

ifs:internal file separator,預設為空格,tab及換行符

path:shell搜尋路徑

ps1,ps2:預設提示符($)及換行提示符(>)

term:終端型別,常用的有vt100,ansi,vt200,xterm等

shell功能性語句

shell程式由零或多條shell語句構成。shell語句包括三類:說明性語句、

功能性語句和結構性語句。

—— 說明性語句:

以#號開始到結束,不被解釋執行

#!/bin/bash這句話告訴os用那種型別的shell來解釋執行該程式

—— 功能性語句:

任意的shell命令、使用者程式或其他shell程式

—— 結構性語句:

條件測試語句、多路分支語句、迴圈語句、迴圈控制語句等。 

read語句

—— read var

echo $var

輸入什麼輸出什麼

expr命令(運算子兩邊要有空格)

—— 算術運算命令包括+、-、\*、/、%

expr 12 + 5 \* 3

27test語句(0為真)

—— test語句可測試三種物件:

字串    整數    檔案屬性

—— 每種測試物件都有若干測試操作符

—— 例如:

test "$answer" = "yes"

變數answer的值是否為字串yes

test -d tmp

測試tmp是否為乙個目錄名

test $num -eq 18

變數num的值是否為整數18

字串測試

s1 = s2 測試兩個字串的內容是否完全一樣

s1 != s2 測試兩個字串的內容是否有差異

-z s1  測試s1字串的長度是否為0

-n s1  測試s1字串的長度是否不為0

整數測試

a -eq b 測試a與b是否相等

a -ne b 測試a與b是否不相等

a -gt b 測試a是否大於b

a -ge b 測試a是否大於等於b

a -lt b 測試a是否小於b

a -le b 測試a是否小於等於b

檔案型別測試

-d name    測試name是否為乙個目錄

-e name 測試乙個檔案是否存在

-f name 測試name是否為普通檔案

-l name 測試name是否為符號鏈結

-r name 測試name檔案是否存在且為可讀

-w name 測試name檔案是否存在且為可寫

-x name 測試name檔案是否存在且為可執行

-s name 測試name檔案是否存在且長度不為0

f1 -nt f2 測試檔案f1是否比檔案f2更新

f1 -ot f2 測試檔案f1是否比檔案f2更舊

條件語句(0為真)

if...then...fi

語法結構

if 表示式

then    命令表

fi——如果表示式為真,則執行命令表中的命令;否則退出if語句,執行

fi後面的語句

—— if和fi是條件語句的語句括號,必須成對使用

—— 命令表中的命令可以是一條,也可以是若干條

例:if [ -f $1 ]

then

echo "file $1 exists"

fiif...then...else...fi

語法結構:

if    表示式

then    命令表1

else    命令表2

fi多路分支語句

case...esac

多路分支語句case用於多重條件測試,語法結構清晰自然,其語法為:

case    字串變數    in

模式1)

命令表1

;;模式2|模式3)

命令表2

;;......

模式n)

命令表n

;;esac

迴圈語句for

當迴圈次數已知或確定時,使用for迴圈語句來執行一條或一組命令。

格式為:

for    變數名    in    單詞表

do命令表

done

變數依次取單詞表中的各個單詞,每取一次單詞,就執行一次迴圈體中的

命令,迴圈次數由單詞表中的單詞數確定。命令表中的命令可以時一條,

也可以是由分號或換行符分開的多條。

迴圈語句while

語法結構:

while 命令或表示式

do 命令表

done

linux學習筆記之shell程式設計(指令碼)

bin bash 號表示注釋 shell指令碼從上往下依次執行 date grep root etc passwd 先加許可權 chmod x 1.sh或chmod 744 1.sh 輸入絕對路徑或相對路徑如.1.sh 表示當前目錄 bash 1.sh sh 1.sh source 1.sh 1.s...

shell指令碼學習筆記

學習筆記 1,檔案名字命名為 sh,字尾sh表明這是乙個bash指令碼檔案 2,shell指令碼的第一行如下 bin sh bin sh告訴系統其後路徑所指定的程式即是解釋此指令碼檔案的shell程式 3,寫完指令碼後儲存檔案,然後將檔案變成可執行檔案 chmod x test.sh 4,以下是乙個...

Shell指令碼學習筆記

find 命令 1.基於檔名或者正規表示式搜尋 例子 匹配多個條件 find name txt o name pdf print 找到當前目錄中所有txt pdf檔案輸出 加 o 表示or條件 將中間部分視為乙個整體 find regex py sh regex 基於正規表示式匹配 2.基於目錄深度...