標籤:變數及shell編程
編程能力:
指令碼編程
程式設計語言:機器語言,組合語言,進階語言
進階語言:
靜態語言:編譯型語言
不需要藉助額外的二進位,需要一個編譯器,直接轉換為二進位啟動並執行。
強型別(變數):變數在使用前, 必須事先聲明,甚至還需要初始化
關鍵字:
事先轉換成可執行格式
c、c++、java、c#
動態語言:解釋型語言 on the fly
弱類型語言:變數隨時(用時)聲明,不區分類型
邊解釋邊執行
asp asp.net php shell python perl
面向過程:shell ,c,perl,
面積對象:java,python,perl,c++
變數類型:直接決定了變數的儲存格式,用來確定資料的儲存格式和長度
字元
數值
時期
真假型
邏輯運算:與(乘)、或、非、異或
1:真
0:假
1&0=0
0&1=0
0&0=0
1&1=1
或:只一一個為真就為真,同時為假就為假
非:!真=假 !假=真
異或:運算元相同者為假, 不同者為真,相同者為零,否者為1
與:只要有一個為假,結果為假
或:只要有一個為真,結果為真
整形
浮點型 11.23 1.123*10^1 | 0.1123*10^2
變數:記憶體空間,命名的記憶體空間,
變數名稱:
1、只能包含字母,數字,底線,並且不能數字開頭。
2、不應該跟系統中已有的環境變數重名。
3、最好做到見名知義
記憶體:編址的儲存單元
進程:
Bash變數類型:
引用變數:${VARNAME},預設{}可以省略,例:
ANIMAL=pig
echo "There are some ${ANIMAL}s."
1、環境變數:
範圍為當前shell進程及其子進程
exprot VARNAME=VALUE "匯出"
指令碼在執行時使用時會啟動一個子shell進程
命令列啟動的指令碼會繼承當時shell環境變數;
系統自動執行的指令碼(非命令列啟動)就需要自我定義需要的各環境變數
2、本地變數(局部變數)
bash:進程的變數
VARNAME=VALUE,本地變數,範圍為整個bash進程有用;
local VARNAME=VALUE,局部變數,範圍為當前程式碼片段
3、位置變數
$1,$1,$2......
4、特殊變數(Bash內建的,也稱系統變數)
是為了儲存特殊資料的,例:$?:上一個命令的執行狀態傳回值;
程式執行結果
程式狀態傳回碼(0-255)
0:正確執行
1-255:錯誤執行,1,2,127系統預留:
撤消變數:
unset VARNAME
查看當前shell中變數:
set (包括環境變數和本地變數)
查看當前shell中的環境變數:
printenv
env
export
一個變數對應多個值:
ANIMAL=pig:dog:goat 或者:ANIMAL=$ANIMAL:pig
輸出重新導向:
>
>>
2>
2>>
&> 同時重新導向
/dev/null
id student &> /dev/null
指令碼:命令的堆砌,按實際需要,結合命令流程式控制制機制實現的來源程式
#!/bin/bash
#注釋行,不執行
Bash中如何?條件判斷?
條件測試類型:
1、整數測試
2、字元測試
3、檔案測試
條件測試的運算式:
[ expression ]
[[ expression ]]
test expression
整數比較:
需要兩個運算元
-eq:測試兩個整數是否相等,比如:$A -eq $B
[ $A -eq $B ]
-ne:測試兩個整數是否不等,不等為真,相等為假
-gt:測試一個數是否大於另一個數,大於為真,否則為假
-lt:測試一個數是否小於另一個數,小於為真, 否則為假
-ge:大於或
-le:小於或等於
命令間的邏輯關係:
邏輯與:&& id user1 &> /dev/null && echo "hello user1"
第一個條件為假時,第二個條件不用判斷,最終結果已經有了。
第一個條件為真時,第二個條件必須得判斷
邏輯或:||
!id user6 && useradd user6 前面為假就不執行,為真就執行
id user6 || useradd user6 如果前面為真就不執行,為假就執行
如果使用者存在,就顯示使用者已存在,否則就添加此使用者:
id user1 && echo "use1 exists" || useradd user1
如果使用者不存在,就添加,否則顯示其已經存在
! id user1 && useradd user1 || echo "user1 exists"
如果使用者不存在,添加並且給密碼,否則,顯示其已經存在;
!id user1 && useradd user1 && echo "user1" | passwd --stdin user1 || echo "user1 exists"
例:
#!/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 user1 &> /dev/null || echo ""user3 exists."
USERS=`wc -l /etc/passwd | cut -d‘‘ -f1
echo "$USERS users"
#!/bin/bash
NAME=user1
USERID=`id -u $name`
[ $USERID -eq 0 ] && echo "This is root" || echo "This is not root"
條件判斷,控制結構
單分支if語句:
if判斷條件;then
statement1
statement2
...
fi
例:
#!/bin/bash
NAME=user1
if id $NAME &> /dev/null;then
ehco "$NAME exists."
fi
雙分支的if語句:
if 判斷條件;then
statement1
statement2
...
else
statement1
statement2
...
fi
例:
#!/bin/bash
NAME=user1
if id $NAME &> /dev/null;then
ehco "$NAME exists."
else
echo "$NAME not exist"
fi
#!/bin/bash
NAME=root
if [ `id -u $NAME` -eq 0 ]; then
echo "This is Admin"
else
echo "This is not Admin"
fi
變數及shell編程