菜鳥學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