靜態語言:編譯型語言
強類型(變量) 事先轉換成可執行格式
c c++ java c#
強類型語言的變量在使用前,必選事先聲明,甚至需要初始化
動態語言:解釋型語言
弱類型
邊解釋邊執行
php shell python
弱類型語言,變量聲明時,甚至不區分類型
編程能力:
腳本編譯
變量類型:事先確定數據的存儲格式和長度的
1Byte=8b 1(Byte)字節=8位(bit)
字符型
數值型
整型
浮點型
Bash變量類型
環境變量
本地變量(局部變量)
位置變量
特殊變量:$?
本地變量:
NAME=cary ----定義變量
echo $NAME ----引用變量
Local VARNAME=VALUE ----局部變量,作用域當前代碼段
環境變量:作用域爲當前shell進程及其子進程
export varname=value ----定義環境變量用export 導出關鍵字
腳本在執行時會啓動一個子sehll進程
命令行中啓動的腳本會繼承當前shell環境變量;
系統自動執行的腳本(非命令行)
在SHELL語言中,‘’單引號不做變量替換,裏面是什麼就輸出什麼。
“”雙引號做變量替換,裏面有變量做變量替換輸出
輸出重定向
> ---覆蓋追加
>> ---追加不覆蓋
/dev/null --數據黑洞
撤銷變量:unset varname
查看當前shell中的變量:set
查看當前shell中的環境變量:printenv 或者env 或者export
腳本:命令的堆砌,按實際需要,結合命令流程控制機制實現的源程序
腳本的格式:腳本必須要以一個魔數開頭
#!/bin/bash
其他行數以#開頭都是表示註釋
腳本的執行:腳本的執行必須有X的執行權限,並且需要指明路徑
練習:寫一個腳本
1.添加5個用戶,user1,....user5
2.每個用戶的密碼同用戶名,而且要求,添加密碼完成後不顯示passwd命令的執行結果信息
3.每個用戶創建完成後,顯示添加賬號創建成功
#!/bin/bash
useradd user1
echo "user1" |passwd --stdin user1 >/dev/null
echo "add user1 successfully"
條件判斷:
如果用戶存在
添加用戶,給密碼並顯示添加成功
否則
顯示已經存在,沒有添加
bash 中如何實現條件判斷
條件測試類型:
整數測試
字符測試
文件測試
條件測試的表達式:
[ expression ]
test expression
整數比較:
-eq :測試兩個整數是否相等:比如$A -eq $B
-ne :測試兩個整數是否不等:不等爲真,相等爲假
-gt :測試一個數是否大於另一個數:大於,爲真,否則,爲假
-lt :測試一個數是否小於另一個數,小於,爲真,否則,爲假
-ge :大於或等於
-le :小於或等於
命令的邏輯關係:
邏輯與 &&:第一個條件爲假時,第二個條件就不在判斷,最終結果已經有
如果第一個條件爲真是,第二個條件還需要判斷
邏輯或 || :第一個條件爲真時,第二個條件不執行
如果第一個條件爲假時,還需要執行第二個條件
#!/bin/bash
!id user1 &>/dev/null && useradd user1 && echo "user1" |passwd --stdin user1 &>/dev/null ||echo "user1 exists"
!id user2 &>/dev/null && useradd user2 && echo "user2" |passwd --stdin user2 &>/dev/null ||echo "user2 exists"
!id user3 &>/dev/null && useradd user3 && echo "user3" |passwd --stdin user3 &>/dev/null ||echo "user3 exists"
USERS=`wc -l /etc/passwd |cut -d: -fl`
echo "$USERS USERS"
條件判斷,控制結構:
單分支的if語句
if 判斷條件; then
statement1
statement2
....
fi
eg:
#!/bin/bash
NAME=user1
if id $NAME &>/dev/null;then
echo "$NAME exsits"
fi
雙分支的if語句
if 判斷條件; then
statement1
statement2
.......
else
statement3
statement4
......
fi
eg:
NAME=cary.qin
if id $NAME &>/dev/null;then
echo "$NAME exists"
else
useradd $NAME
echo "$NAME" | passwd --stdin $NAME &>/dev/null
echo "add finished"
fi
`` ----反引號 命令的執行結果,把名稱執行出的內容提供出來
shell的數值運算
A=3
B=6
1. let 算術運算表達式
let c=$A+$B
2. $[算術運算表達式]
c=$[$A+$B]
3.$((算術運算表達式))
c=$(($A+$B))