Linux Shell 學(xué)習(xí)筆記
# #!是一個(gè)約定標(biāo)記,告訴系統(tǒng)用哪個(gè)Shell來(lái)執(zhí)行
#!/bin/bash
# echo:在控制臺(tái)窗口輸出文本
echo "hello world"
# 添加可執(zhí)行權(quán)限
chmod +x ./test.sh
# 執(zhí)行腳本
./test.sh
# 變量命名規(guī)則
# 1,變量名和=之間不能有空格;
# 2,由英文字符、數(shù)字、下劃線組成,不能數(shù)字開(kāi)頭,不能使用bash關(guān)鍵字
# 使用變量
# $變量名 或者 ${變量名} 推薦
# 設(shè)置變量只讀
readonly 變量名
# 刪除變量(不能刪除只讀變量)
unset 變量名
# 變量類型
# 1,局部變量:在腳本或命令中定義,僅在當(dāng)前shell實(shí)例中有效,其他shell不能訪問(wèn)
# 2,環(huán)境變量:所有的包括shell啟動(dòng)的程序都能訪問(wèn),有些程序依靠環(huán)境變量運(yùn)行。shell腳本可以定義環(huán)境變量
# 3,shell變量:由shell程序設(shè)置的保證shell正常運(yùn)行的特殊變量。
# Shell字符串
# 1,單引號(hào):任何字符都會(huì)原樣輸出,所以變量是無(wú)效的;不能出現(xiàn)單獨(dú)的一個(gè)單引號(hào),可以成對(duì)出現(xiàn)拼接
# 2,雙引號(hào):可以有變量,會(huì)轉(zhuǎn)義字符
# 3,不用引號(hào)
# 獲取字符串長(zhǎng)度
${#string}
# 提取字串:從第二個(gè)字符開(kāi)始截取 4個(gè)字符,有頭有尾
${string:1:4}
# 查找字符串:查找字符i或o的位置(哪個(gè)字符先出現(xiàn)就計(jì)算哪個(gè))
`expr index "$string" io`
# Shell數(shù)組:只支持一維數(shù)組,元素用空格分隔
# 定義:數(shù)組名=(值1 值2 ... 值n)
# 讀取某個(gè)數(shù)組
${數(shù)組名[下標(biāo)]}
# 讀取所有元素
${數(shù)組名[@]}
# 獲取數(shù)組元素個(gè)數(shù)
length=${#數(shù)組名[@]}
length=${#數(shù)組名[*]}
# 獲取數(shù)組中單個(gè)元素的長(zhǎng)度
lengthn=${#數(shù)組名[n]}
# Shell注釋
# 單行:#
# 多行:
:<<EOF
注釋內(nèi)容
注釋內(nèi)容
EOF
# Shell參數(shù)傳遞
# 腳本中定義$n,如$1 $2 $3
# 運(yùn)行時(shí)傳遞 A B C
# 算術(shù)運(yùn)算符:使用反引號(hào)``括起來(lái),算術(shù)運(yùn)算符兩側(cè)必須有空格
`expr $a + $b`
`expr $a - $b`
`expr $a \* $b`
`expr $a / $b`
`expr $a % $b`
# 條件表達(dá)式:[]括起來(lái),[]同樣必須有空格
[ $a == $b ]
[ $a != $b ]
# 關(guān)系運(yùn)算符:-eq、-ne、-gt、-lt、-ge、-le
# 兩邊相等,返回true
[ $a -eq $b ]
# 邏輯運(yùn)算符:!、-o、-a、||、&&,非、或、與、雙與、雙或,雙與/雙或要加上兩個(gè)[]
# 字符串運(yùn)算符:=、!=、-z、-n、$,等于、不等于、是否是0長(zhǎng)度、是否不是0長(zhǎng)度、是否為空
# 文件測(cè)試運(yùn)算符:-d、-f、-r、-w、-x、-s、-e,文件夾、普通文件、可讀、可寫(xiě)、可執(zhí)行、文件大小不為0、存在
# read:從標(biāo)準(zhǔn)輸入讀取一行,并指定給變量
read inputStr
# echo:字符串輸出
echo -e "a \n b" # -e 開(kāi)啟轉(zhuǎn)義,\n 換行
# printf命令:
printf比echo移植性更好,基于POSIX標(biāo)準(zhǔn)。
printf format-string args...
%s:字符串格式化、%c:?jiǎn)蝹€(gè)字符、%d:整數(shù)、%f:小數(shù)
%-10s:指一個(gè)寬度為 10 個(gè)字符(- 表示左對(duì)齊,沒(méi)有則表示右對(duì)齊),任何字符都會(huì)被顯示在 10 個(gè)字符寬的字符內(nèi),如果不足則自動(dòng)以空格填充,超過(guò)也會(huì)將內(nèi)容全部顯示出來(lái)。
printf "%s\n" aa bb cc:一個(gè)格式對(duì)多個(gè)參數(shù),格式會(huì)被重用
printf "%s%c%d%f":沒(méi)有參數(shù),%s默認(rèn)為NULL,%c默認(rèn)為NULL,%d默認(rèn)為0,%f默認(rèn)為0.000000
printf轉(zhuǎn)移序列:\b 回退、\n 換行、\r 回車、\t 水平制表符、\v 垂直制表符、\\ \
# Shell流程控制S
if else判斷(判斷分支不可為空)
# if else if1=100 if2=200 if test $[if1] -eq $[if2] then echo "$if1 等于 $if2" elif test $[if1] -gt $[if2] then echo "$if1 大于 $if2" else echo "$if1 小于 $if2" fi
for循環(huán)
# for forArr=(1 2 3 4 5) for i in ${forArr[*]} do echo "the value is $i" done
while循環(huán)
# while w1=1 while(( $w1<=5 )) # while后面還可以接read:while read inputStr do echo $w1 let "w1++" done
無(wú)限循環(huán)
incre=1 while true # 或者冒號(hào): # for(( ; ; )) do echo "死循環(huán)啦$incre" let "incre++" done
until循環(huán)(與while相反)
# until:與while相反 u1=1 until [ ! $u1 -lt 3 ] # 只要u1不小于3,則執(zhí)行do do echo $u1 u1=`expr $u1 + 1` done
case遍歷
echo '請(qǐng)輸入1-3之間的數(shù)字' echo '您輸入的數(shù)字為:' read inputNum case $inputNum in 1) echo '您輸入了1' ;; 2) echo '您輸入了2' ;; 3) echo '您輸入了3' ;; *) echo '您沒(méi)有輸入1-3之間的數(shù)字' ;; esac
break&continue
while : do echo -n "請(qǐng)輸入1到5之間的數(shù)字" read inputNum case $inputNum in 1|2|3|4|5) echo "您輸入的數(shù)字為$inputNum" ;; *) echo "您輸入數(shù)字不在1到5之間" break # 跳出所有循環(huán) # continue # 跳出當(dāng)前循環(huán),后面的語(yǔ)句不會(huì)被執(zhí)行 # echo "GG" ;; esac done
# Shell函數(shù)
# 無(wú)參函數(shù)
myfunc01(){ echo "this is my first function" return `expr 1 + 2` } myfunc01 # 函數(shù)必須先定義再調(diào)用 echo "函數(shù)的返回值是: $? " # 函數(shù)的返回值通過(guò) $? 獲取
# 有參函數(shù) myfun02(){ echo "$1" echo "$2" echo "$10" echo "${10}" # 當(dāng)$后面>=10時(shí),要使用${10} echo "傳入的參數(shù)個(gè)數(shù)是 $# 個(gè)" } myfun02 1 2 3 4 5 6 7 8 9 33 44

浙公網(wǎng)安備 33010602011771號(hào)