天天看點

菜鳥學Linux 第014篇筆記 bash腳本(變量,變量類型)

菜鳥學Linux 第014篇筆記 bash腳本(變量,變量類型)

上一節忘記講了,sorry 還有一個指令fgrep

此指令是fast grep=grep -F 快速搜尋文本,該指令不可以使用正規表達式,

如果有包含正規表達式的字元,直接當字元去比對。

Shell程式設計

程式設計語言:機器語言、彙編語言、進階語言

進階語言:

靜态語言:編譯型語言

強類型(變量) 強:變量在使用前,必須事先聲名,甚至還需要初始華; 強:變量在使用前,必須事先聲名,甚至還需要初始華;

關鍵字:

執行時要事先轉換成可執行格式,而動态語言的解釋器則是由靜态語言所編寫而成

屬于靜态語言的: C、 C++、 JAVA、 C#、 ...

動态語言:解釋型語言

通常弱類型 弱:變量不需要聲名(不區分類型)

執行時邊解釋邊執行

屬于動态語言: ASP、 ASP.net、 PHP、 SHELL、 python、 perl ...

程式設計模型

面向過程 shell、 C

就是把程式設計的着眼點、立足點主要在于問題解決過程本身。(适合開發小型程式)

Linux 核心是使用面向過程的C語言研發的

面向對象 JAVA(純面向對象), Python, perl(兩者都有), C++

把整個我們要實作的項目、抽象成一個個對象、并且定義對象之間的動作

(可發出的操作)來完成。這樣的風格适合開發大型應用程式。

變量:記憶體空間,命名

變量類型:事先定義資料的存儲格式和長度

字元型

數值型

整  型:11

浮點型:11.23   1.123*10^1   0.1123*10^2

時間型

布爾型true 1 false 0

記憶體:編址的存儲單元

程序:

邏輯運算:與、或、非、異或

1:真

0:假

與運算:&& and 

1&&0=0

0&&1=0

0&&0=0

1&&1=1

或運算:or

1||0=1

0||1=1

0||0=0

1||1=1

非運算:not

!true = false

! false =true

異或:

1 0=1

0 1=1

0 0=0

1 1=0

短路運算

與:隻要有一個為假,結果一定為假;

或:隻要有一個為真,結果一定為真;

        變量指派: VAR_NAME=value

bash變量類型:

環境變量

本地變量(局部變量)

位置變量

特殊變量

本地變量:

作用域:整個bash程序

VARNAME=VALUE

局部變量:

作用域:目前代碼段

local VARNAME=value

環境變量:

作用域:目前shell程序及其子程序(如果重新登入一個shell則無效)

export VARNAME=value; 

也可以先定義VAR_NAME=value then export VAR_NAME

位置變量:

$1, $2, ...      表示引用某個變量

特殊變量:

$?: 上一個的執行狀态傳回值

程式執行時,可能有兩類傳回值:(0-255)

程式執行結果

程式狀态傳回代碼

0 正确執行

1-255 錯誤執行   系統預留代碼1,2,127

使用輸出重定向技巧

>

>>

2>

2>>

&>

/dev/null: 軟體裝置 bit bucket 資料黑洞

id student &> /dev/null

撤消變量:

unset VAL_NAME

檢視目前shell中變量:set (包含環境變量和本地變量)

檢視目前shell環境變量: printenv (print environment) env export

追加變量:

ANIMALS=pig

ANIMALS=$ANIMALS:pig ANIMALS=pig$ANIMALS

export PATH=$PATH:/usr/local/apache/bin

PATH=/usr/local/mysql/bin:$PATH

shell變量預設是字元串,不可以做算術運算

腳本在執行時會啟動一個子shell程序

指令行中啟動的腳本會繼承目前shell環境變量;

系統自動執行的腳本(非指令行啟動)需要自我定義需要各環境變量

bash: 變量是程序的變量,如果程序結束,則變量清除;

且父shell聲名變量,子shell無法調用,反之亦然;

引用變量: ${VAR_NAME} 括号有時可省略

檢視變量 echo $VAR_NAME

'' 單引号不執行變量替換

"" 雙引号可執行變量替換

寫腳本

腳本:指令的堆砌,按實際需要,結合指令流程控制機制實作的

shebang:魔數 #!/bin/bash

含義:因為linux核心隻能識别elf可執行檔案,而腳本是一個文本文檔

如果想要其執行,必須使用解釋器,而上邊#!/bin/bash則表示檔案要執行,

用bash解釋器來解釋文本裡包含的執行指令

#表示注釋行,不執行

練習:

練習寫腳本,使其完成以下任務

腳本1

1、添加5個使用者,user1,...,user5

2、每個使用者的密碼同使用者名,而且要求,添加密碼完成後不顯示指令的執行結果資訊

3、每個使用者添加完成後,都要顯示“使用者某某添加成功資訊”

腳本2

1、使用一個變量儲存一個使用者名;

2、删除此變量中的使用者且一并删除其家目錄;

3、顯示使用者“删除完成”類的資訊;

key:

script 1:(初學編寫,有待優化,見諒)

#!/bin/bash

S=student

T1=${S}1

T2=${S}2

T3=${S}3

useradd -M $T1

echo $T1 | passwd --stdin $T1 &> /dev/null

echo $?

echo "User $T1 have added"

我隻添加的一段,其它使用者的類似

script 2:

rm -f /var/mail/$T1

userdel $T1

echo "User $T1 have deleted"

初次編寫腳本錯誤經驗

1、變量起名時不用加$

2、引用變量時後邊有其它文本時用${VAL_NAME}而不是{$name}

本文轉自Winthcloud部落格51CTO部落格,原文連結http://blog.51cto.com/winthcloud/1861891如需轉載請自行聯系原作者

Winthcloud