1.什么是shell
shell是一個(gè)命令解釋器耕皮,將人類輸入高級(jí)語(yǔ)言,通過shell程序轉(zhuǎn)換為二進(jìn)制
shell分為兩種使用方式
- 交互: 登錄 執(zhí)行命令 退出
- 非交互:執(zhí)行某個(gè)文件蝙场,文件中都是一堆命令凌停,整個(gè)文件從上往下執(zhí)行
2.shell腳本能做什么
標(biāo)準(zhǔn):
1.安裝方式一致
2.安裝路徑一致
3.目錄結(jié)構(gòu)一致
4.日志格式一致
5.腳本路徑一致
能將平時(shí)操作腳本化,流程化售滤,自動(dòng)化 ITIL
ppt 人 流程 技術(shù)/工具
備份
監(jiān)控
自動(dòng)化上線
約束標(biāo)準(zhǔn)
3.Shell腳本編寫規(guī)范、執(zhí)行方式完箩。
執(zhí)行方式分為兩種:
1.加執(zhí)行權(quán)限 ./script_filename.sh
2.通過bash直接翻譯 bash script_filename.sh
'#!/usr/bin/bash 加與不加區(qū)別在哪?
1.如果你明確清楚這是一個(gè)什么類型的腳本,直接調(diào)用對(duì)應(yīng)的解釋器執(zhí)行,沒有影響?
2.如果你不清楚是什么類型的腳本, 直接使用./執(zhí)行,那么會(huì)讀取該腳本的第一行
如果第一行是#!/usr/bin/bash 或者 沒有寫該行,那么都將使用默認(rèn)的bash翻譯
問題: 如果我是一個(gè)python腳本,沒有寫開頭,那么執(zhí)行一定會(huì)報(bào)錯(cuò)
因?yàn)槟J(rèn)查找的是bash解釋器,而我的文件需要用python解釋器來(lái)翻譯.
添加命令解釋器的幾種方式:
#!/usr/bin/bash
#!/usr/bin/sh
#!/usr/bin/env bash
#!/usr/bin/env python
1.什么是變量
變量是shell中傳遞數(shù)據(jù)的一種方法赐俗。
簡(jiǎn)單理解: 就是用一個(gè)固定的字符串去表示不固定的值,便于后續(xù)引用弊知。
2.定義變量規(guī)范
1.大寫開頭,后面小寫或數(shù)字都o(jì)k
2.變量具體一定的含義
3.注意 變量的寫法 僅支持 a=1 不支持 a = 1
3.自定義變量
var="hello world"
echo $var
echo ${var}_log
$* 和 $@ 的區(qū)別?
可以看到不加引號(hào)時(shí),二者都是返回傳入的參數(shù),但加了引號(hào)后,此時(shí)$*把參數(shù)作為一個(gè)字符串整體(單字符串)返回,$@把每個(gè)參數(shù)作為一個(gè)字符串返回
1.定義變量幾種方式
1.1 自定義變量
1.2 系統(tǒng)全局變量
1.3 位置參數(shù)變量 sh test.sh 11 22
1.4 預(yù)定義變量 $? $#
2.通過read交互方式讀入變量
read -t -s -n -p
3.變量替換
${var#}
${var##}
${var%}
${var%%}
${var//}
${var///}
${#var}
4.變量計(jì)算
[] expr
5.注意事項(xiàng):
${} #引用變量
$() #和``功能相同, 都是用來(lái)做命令替換
$(()) #進(jìn)行整數(shù)運(yùn)算
$[] #進(jìn)行整數(shù)運(yùn)算
"" #弱引用,會(huì)解析變量
'' #強(qiáng)引用,所見即所得
6.if在判斷的過程中,需要表達(dá)式
1.基于文件的方式判斷 -d判斷目錄是否存在 -f判斷文件是否存在 -s判斷是否有內(nèi)容默認(rèn)是有 -e判斷是否有這個(gè)對(duì)象 -z 空文件 -n非空
2.基于整數(shù)的方式判斷 -eq 等于 -ne不等 -ge大等 -gt大于 -le小等 -lt小于
3.基于字符串方式判斷 = !=
4.基于正則表達(dá)式方式判斷 =~ ^[0-9]+ ^[A-Z]+
正則表達(dá)式外面格式為[[ ]]