Fabric01-1

一:shell腳本基礎(chǔ)

1.shell命令 : 在linux終端能夠被解析出來的命令
2.shell腳本 : 多個shell命令的集合, 邏輯判斷, 循環(huán), 函數(shù), 變量

二:shell命令被解析的過程:

1.有一個解析命令的進(jìn)程: bash(linux)/shell(unix)
2.bash解析過程, 監(jiān)測終端輸入, 有回車的時候輸入完成, bash檢測環(huán)境變量PATH (有多個路徑), bash從前往后依次遍歷每個路徑, 檢測各個路徑中有沒有用戶輸入的命令, 如果找到了, 執(zhí)行該路徑下的命令, 如果沒找到找下一個, 最后還是沒找到, 提示這個命令無法解析

三:shell腳本的基本格式:

1.命名格式
shell腳本是一個文件, 命令方式: xxx.sh
.sh的后綴不是必須的, 目的是為了方便識別

2.書寫格式
(1).第一行是固定的, 指定解析腳本內(nèi)容使用的命令解析器:#! /bin/bash (指令使用的命令解析器是bash), 這行可以省略
(2).后邊就是shell命令, 變量定義, 函數(shù)調(diào)用, 邏輯判斷循環(huán)

四:shell腳本的執(zhí)行

1.文件訪問者:
擁有者u——-user
所屬組g——-group
其他用戶o—–other

2.文件訪問權(quán)限的種類:
可讀(r) 可寫(w) 可執(zhí)行(x)

3.目錄初始默認(rèn)權(quán)限為 : 775(八進(jìn)制), 111 111 101(二進(jìn)制),-rwxrwxr-x 1 root root
文件初始默認(rèn)權(quán)限為: 644(八進(jìn)制), 110 110 100(二進(jìn)制),-rw-rw-r-- 1 root root

腳本文件需要執(zhí)行權(quán)限:
chmod u+x xxx.sh //u:當(dāng)前文件所有者 + x執(zhí)行權(quán)限
chmod a+x xxx.sh //a:當(dāng)前文件所有者所有組的人 + x執(zhí)行權(quán)限
chmod 777 xxx.sh

4.腳本文件的執(zhí)行
./xxx.sh 和執(zhí)行可執(zhí)行程序一樣,最常用
sh xxx.sh 也可以執(zhí)行xxx.sh腳本

五:shell腳本中的變量

echo shell命令:表示輸出

1.普通變量(本地變量)
//變量名=變量值  (默認(rèn)字符串類型)
hello=123
//在shell中定義變量的時候, 必須初始化,=前后不能有空格,普通變量名小寫

2.環(huán)境變量(一般大寫)
//export 環(huán)境變量名=值 或 set 環(huán)境變量名=值
export GOROOT=/usr/local/go
export GOROOT=$HOME/go
//環(huán)境變量在全局范圍內(nèi)都可以使用
3.位置變量和特殊變量

在執(zhí)行腳本文件的時候, 可以進(jìn)行參數(shù)傳遞, 在腳本內(nèi)部需要接收這些參數(shù), 這時候需要用到位置變量

$0:腳本的名字
$1:給shell腳本傳遞的第一個參數(shù),
$2:給shell腳本傳遞的第二個參數(shù),以此類推

$#:   給shell腳本傳遞的參數(shù)的個數(shù)
$@: 給shell腳本傳遞的所有參數(shù)的集合
$$:  shell腳本開始執(zhí)行,產(chǎn)生的進(jìn)程ID
$?:  進(jìn)程執(zhí)行狀態(tài)(在腳本中沒法體現(xiàn),因?yàn)樾枰M(jìn)程執(zhí)行完,才能查看進(jìn)程執(zhí)行狀態(tài)),腳本執(zhí)行完成后,在命令行中查看
- 0     表示成功
- 非0  表示失敗

編寫腳本文件:vi position.sh

腳本代碼:


#! /bin/bash

ls
echo "腳本的名字 = " $0
echo "第1個參數(shù) = " $1
echo "第2個參數(shù) = " $2
echo "第3個參數(shù) = " $3
echo "第4個參數(shù) = " $4
echo "第5個參數(shù) = " $5

echo "參數(shù)的個數(shù): " $#
echo "所有的參數(shù): " $@
echo "腳本執(zhí)行之后的進(jìn)程ID: " $$


執(zhí)行腳本,并傳遞參數(shù)以及執(zhí)行結(jié)果:


image.png
4.取值

(1)取普通變量的值

$變量名
${變量名}
1.JPG

(2)取命令執(zhí)行之后的結(jié)果值

str=$(shell命令)
str=`shell命令`
1.JPG
5.引號的使用

(1)雙引號:加雙引號和不加是一樣的
如果是字符串, 原樣輸出
如果是待解析的指令, 會將其解析

(2)單引號:
如果是字符串, 原樣輸出
如果是待解析的指令, 不會解析, 原樣輸出

6.shell腳本中的if條件判斷

注意事項(xiàng):
if和[]之間有空格
[]和條件判斷前后有空格

if [ 條件判斷 ];then
    處理指令(shell命令)
fi

if [ 條件判斷 ]
then
    處理指令(shell命令)
fi

if [ 條件判斷 ];then
    處理指令(shell命令)
elif [ 條件判斷 ];then
    處理指令(shell命令)
else
    處理指令(shell命令)
fi

shell條件測試參考:

1.JPG
2.JPG

例:給腳本傳參, 文件名, 在腳本中判斷這文件名對一個的文件是普通文件還是目錄

#! /bin/bash

# 取出文件名
filename=$1
# 判斷
if [ -d $filename ];then        //當(dāng)pathname 存在并且是一個目錄時返回真

    echo "$filename 是一個目錄!"   
elif [ -s $filename ];then     //當(dāng)filename 存在并且文件大小大于0 時返回真
    echo "$filename 存在!!!"
else
    echo "$filename 不存在, 或者文件為空"
fi

結(jié)果:


1.JPG
7.shell腳本中的for循環(huán)

語法: for 變量名 in 列表;do ... done

for num in 123 345 22 33 44 55;do
    echo "$num"
done

for dir in $(ls);do
    echo "$dir"
done
# 腳本內(nèi)容
#! /bin/bash
# 遍歷當(dāng)前目錄
for dir in `ls`;do
    echo $dir
done

# 遍歷傳遞進(jìn)來的參數(shù)
for arg in $@;do
    echo $arg
done

結(jié)果:


1.JPG
8.shell腳本中的函數(shù)

沒有函數(shù)修飾符, 沒參數(shù), 沒有返回值
沒有參數(shù)但是可以傳參數(shù), 在函數(shù)內(nèi)部取參數(shù)使用的是位置變量
可以得到返回值, 表示的函數(shù)的執(zhí)行狀態(tài), 0或非0
0 -> 成功
非0 -> 調(diào)用有問題

  1. 函數(shù)定義, 定義完成, 函數(shù)體不會執(zhí)行, 必須被調(diào)用
myfunc()
{
    函數(shù)體
    shell指令(for循環(huán), if語句等)
}

2.函數(shù)調(diào)用

函數(shù)名 [參1 參數(shù)2 參數(shù)3]
myfunc 11 22 33

例子代碼:

# 寫個函數(shù)判斷傳遞進(jìn)去的文件名是不是目錄, 如果存在什么也不干, 不存在, 創(chuàng)建
#! /bin/bash
# 定義函數(shù)
myfunc()
{
    # 遍歷接收到的所有文件名
    for name in $@;do
        # 文件類型判斷
        if [ -d $name ];then
            echo $name 是一個目錄!
        else
            # 創(chuàng)建目錄
            mkdir $name
            # 判斷目錄是不是創(chuàng)建成功了
            if [ $? -ne 0 ];then
                echo "目錄創(chuàng)建失敗: $name"
            else
                echo " $name 創(chuàng)建成功..."
            fi
        fi
    done
}

# 函數(shù)調(diào)用
myfunc a b c d e f g

結(jié)果:


1.JPG
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末垮庐,一起剝皮案震驚了整個濱河市松邪,隨后出現(xiàn)的幾起案子哨查,更是在濱河造成了極大的恐慌测摔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锋八,死亡現(xiàn)場離奇詭異,居然都是意外死亡挟纱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門腐宋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胸竞,你說我怎么就攤上這事欺嗤∥乐Γ” “怎么了煎饼?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵校赤,是天一觀的道長吆玖。 經(jīng)常有香客問我马篮,道長沾乘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任翅阵,我火速辦了婚禮,結(jié)果婚禮上掷匠,老公的妹妹穿的比我還像新娘读慎。我一直安慰自己,他們只是感情好夭委,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著募强,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擎值。 梳的紋絲不亂的頭發(fā)上慌烧,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天鸠儿,我揣著相機(jī)與錄音屹蚊,去河邊找鬼进每。 笑死汹粤,一個胖子當(dāng)著我的面吹牛田晚,可吹牛的內(nèi)容都是我干的嘱兼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼芹壕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了接奈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤序宦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后挨厚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堡僻,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疫剃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巢价。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖城菊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碉克,我是刑警寧澤凌唬,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布漏麦,位于F島的核電站客税,受9級特大地震影響撕贞,放射性物質(zhì)發(fā)生泄漏更耻。R本人自食惡果不足惜捏膨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一秧均、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧目胡,春花似錦、人聲如沸链快。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巫延。三九已至地消,卻和暖如春炉峰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疼阔。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留半夷,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓巫橄,卻偏偏與公主長得像淘邻,于是被迫代替她去往敵國和親湘换。 傳聞我的和親對象是個殘疾皇子宾舅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容