Linux Shell編程學習筆記
登陸Shell,用戶每次登陸系統後自動加載的Shell程序
大多數Linux系統采用 /bin/bash 作為默認登陸Shell
/etc/shells 文件記錄系統支持的Shell
系統可以使用的shells,記錄在/etc/shells檔案中
cat /etc/shells
echo $SHELL
/etc/passwd
每一行的最後一項數據就是用戶登錄取得的shell
編寫shell script的注意事項:
1.指令是從上而下、從左而右分析並執行
2.如果讀取到一個Enter符號,就嘗試開始執行該行命令
3.可以使用 \[Enter] 進行分行
4.# 做注釋
執行腳本
執行/home/zack/shell.sh:
1. 直接命令執行: shell.sh檔案必須要具備r,x權限
2. 以bash程序執行: bash shell.sh 或 sh shell.sh
shell.sh 只要有r權限即可
3. 利用 source 來執行,在父程序中執行
特殊符號
雙引號
允許引用,\轉義
單引號
禁止引用、轉義
反撇號,或者 $()
以命令輸出進行替換
前一個命令的狀態值
$? 0為正常、非0異常
expr命令,計算表達式
如: expr 45 - 32
expr 12 /* 11
$[]表達式,算式替換
如: echo $[45+12]
x=45;y=11;echo $[x-y]
變量遞增,遞減
let 變量名++
let 變量名--
let 變量名+=2
隨機數
echo $RANDOM
echo $[RANDOM%100]
$(seq 1 100) # seq 為 sequence(連續) 的縮寫,從1到100的連續數
seq 首數 末數
seq 首數 增量 末數
生成隨機字符串
head -n 1 /dev/urandom | md5sum | cut -b 1-8
test指令
利用test指令檢測系統上某些檔案或屬性
中括號“[]”進行判斷
如: [ "$HOME" == $"MAIL" ]
[ "$yn" == "N" -o "$yn" == "n" ]
-e 是否存在
-f 是否是文件
-d 是否是目錄
-r 讀權限read
-w 寫權限write
-x 執行權限excution
-z 是否為空
-eq 等於
-ne 不等於
-gt 大於
-lt 小於
-ge 大於等於
-le 小於等於
! 否
script 參數
scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
$# 參數個數
$@ 參數的全部內容
if判斷語句
if []; then
elif []; then
fi
case判斷
1.以case開頭,以esac結束
2.每一個變量用雙引號括起來,以小括號")"結束
3.程序段落以";;"結束
4.用*來代表其他值
case $變量名稱 in <==關鍵詞為 case ,還有變數前有錢字號
"第一個變量內容") <==每個變量內容建議用雙引號括起來,關鍵詞則為小括號 )
程序段
;; <==每個類刪結尾使用兩個連續的分號來處理!
"第二個變量內容")
程序段
;;
*) <==最後一個變量內容都會用 * 來代表所有其他值 ,不包含第一個變量內容與第二個變量內容的其他程序執行段
exit 1
;;
esac
在shell script 當中的 function 一定要在程序的最前面
函數名稱代表示 $0 ,而後續接的參數也是以 $1, $2... 來表示的
循環
while [ condition ] <==中括號內的狀態就是判斷式
do <==do 是循環的開始!
程序段落
done <==done 是循環的結束
until [ condition ]
do
程序段落
done
for var in con1 con2 con3 ...
do
程序段
done
for (( 初始值; 限制值; 執行步階 ))
do
程序段
done
sh [-nvx] scripts.sh
選項參數:
-n :不要執行 script,僅查詢語法的問題;
-v :在執行 sccript 前,先將 scripts 的內容輸出到屏幕上;
-x :將使用到的 script 內容顯示到屏幕上,這是很有用的參數!
可使用 sh -x script.sh 來進行程序的 debug