做語法測試,沒有消息就是最好的消息
加權限
單個語句的錯誤并不妨礙之后的語句,但是邏輯錯誤會導致后續語句執行不了
bash:
-n:語法測試
-x:模擬單步執行
變量類別:
本地變量
環境變量:
export:導出,作用于當前進程及其子進程
局部變量
位置變量:到達兩位數用${10}
2、
命令引用:
1、“使用反引號
2、使用$()
3、
4、寫一個腳本,接受一個參數作為用戶名,此腳本可創建此用戶,并且其密碼同用戶名
5、$#記錄參數的個數,$*所有的參數,$@所有的參數(當成一個參數)
6、
shift [n]:n默認為1
bash的循環語句:
for:遍歷有限的元素列表
while
until
for語句格式:
for var_name in list;do
循環體
done
生成數值列表:
1、{start..end}
2、seq 開始 [步進] 結束
練習:創建10個用戶,user301–user310
for userNo in {301..310}
或
for userNo in $(seq 301 310);do
useradd user${userNo}
done
練習:創建目錄/tmp/dir-當前時間,在此目錄中創建10個空文件,分別為file1-file10
練習:
1、創建用戶tuser1-tuser9
2、創建目錄/tmp/dir-當前時間
3、在/tmp/dir-當前時間目錄中創建9個空文件
4、將file101的屬主改為tuser1,依次類推
bash中的算術運算
declare
-i:整型變量
-x:環境變量,類似于export
let varName=算術表達式
varName=$[算術表達式]
varName=$((算術表達式))
varName=`expr $num1 + $num2`
練習:計算100以內所有正整數之和
練習:分別計算100以內所有奇數和偶數之和
練習:計算當前系統所有用戶的id之和
練習:計算/etc/rc.d/rc.sysinit /etc/init.d/functions /etc/issue三個文件中的字符數之和
練習:新建用戶tmpuser1-tmpuser10,并計算他們的id之和
位置參數:
$#:參數個數
$*,$@:引用所有的位置參數
交互式腳本:
給變量以默認值:
varName=${varName:-value}
如果varName不空,則其值不變,否則value則作為其值
${varName:-value}
超時和默認值:
練習:通過鍵盤給定一個文件的路徑,來判斷文件內容的類型
練習:通過鍵盤給定一個目錄路徑,默認為“/”,來判斷目錄下文件內容的類型
算術運算:
let varName=value
declare -i varNmae=value
declare -x全局變量
bash實現算術運算的方式:(不支持小數運算)
let varName=expression
$[expression]
$((expression))推薦
expr expression 中間必須加空格
a=2
b=4
let c=$a+$b
let a++
字串連接:
變量引用后方跟直接字串時,變量名要加{}
變量命名:第一個單詞首字母小寫,其他單詞首字母大寫
練習:
1、腳本可以接受一個以上的文件路徑作為參數
2、顯示每個文件所擁有的行數
3、顯示本次共對多少個文件執行了行數統計
4、顯示所有文件的總行數
練習:
新建10個用戶,并求他們的id之和
練習:
分別統計/etc/rc.d/rc.sysinit /etc/rc.d/init.d/functions /etc/inittab以#開頭的行和空白行
練習:
顯示當前系統上所有默認shell為bash的用戶名、uid及所有此類用戶的uid之和
邏輯運算:
與運算:
真,假:
真&&真=真
真&&假=假
假&&真=假
假&&假=假
或運算:
真,假:
真||真=真
真||假=真
假||真=真
假||假=假
非運算:
真,假:
!真=假
!假=真
亦或運算:操作數相同為假、相反為真
比較運算:>,<,>=,<=,==,!=
條件測試:
[ expr ]:命令
[[ expr ]]:關鍵字
test expr
測試類型:根據比較時的操作數的類型
整數測試:整數比較
字符串測試
文件測試:判斷文件的存在及屬性等
注意:比較運算通常只在同一種類型之間進行
整型測試:
-gt:大于
-lt:小于
-ge:大于等于
-le:小于等于
-eq:等于
-nq:不等
字符測試:
>:大于
<:小于
<=:小于等于
>=:大于等于
!=:不等
-n:是否不空,不空為真,空為假
-z:是否為空,空為真,不空為假
選擇:
if和case
if:三種格式
1、if 測試條件;then
選擇分支
fi
if ! id $username &> /dev/null;then
useradd $username
fi
練習:寫一個腳本,接受一個參數,這個參數是用戶名,如果用戶存在,則顯示其id號
改進版:
2、if 測試條件;then
分支1
else:
分支2
fi
練習:通過命令行傳遞2個整數參數給腳本,腳本返回其最大值
練習:通過命令行傳遞任意個整數給腳本,腳本可以返回其最大值
練習:通過命令行給定一個文件路徑,判斷如果此文件中存在空白行,則顯示其空白行的總數,否則顯示無空白行
如果把命令執行成功與否當做條件,則if語句后必須只跟命令本身,而不能引用
3、if 條件1;then
分支1
elif 條件2;then
分支2
elif 條件3;then
分支3
else
分支n
fi
練習:傳遞一個參數給腳本,如果參數為quit則顯示你要退出了,如果參數為yes,則顯示說你要繼續,如果為其他任意參數,則說無法識別。
練習:傳遞一個用戶名給腳本:如果其id為0,則為管理員,如果id大于500則為普通用戶,其他為系統用戶
重定向:改變其標準位置
標準輸入:0
鍵盤
標準輸出:1
顯示器
錯誤輸出:2
顯示器
輸出重定向:
command > position覆蓋重定向
command >> position追加重定向
錯誤重定向:
command 2> position覆蓋輸出
command 2>> position追加輸出
正常的信息正常輸出:
合并重定向:
command &> position指向同一位置,position中要么保存正常信息,要么是錯誤信息
command > position 2> &1錯誤的也輸出到1的位置
分別重定向:
command > position1 2>position2正確的輸出到position1中,錯誤的輸出到position2中
會把原文件清掉
輸入重定向:
command < position
<<:here document此處生成文檔,EOF:end of file
直接輸出到屏幕
原創文章,作者:黑白子,如若轉載,請注明出處:http://www.www58058.com/46814