工具篇-shell腳本編程快速入門(一)

參考:《shell腳本-菜鳥教程》

1.shell腳本簡介

1.1. 什么是shell

百度百科解釋如下:

image-20200615111228918

1.2 . 什么是腳本

百度百科解釋如下:

image-20200615111343779

腳本語言又被稱為擴建的語言, 或者動態(tài)語言, 是一種編程語言, 用來控制軟件應(yīng)用程序, 腳本通常是以文本 (ASCⅡ) 保存, 只是在被調(diào)用時進(jìn)行解釋或者編譯

簡單的來說:

就是一條條可執(zhí)行的命令。這些命令保存在一個文本文件里面漾橙,稱為腳本文件。

常見的腳本文件有: Javascript腳本温自,sql腳本,shell腳本,jsp腳本等等

1.3 什么是shell腳本

百度百科 解釋如下:

image-20200615121637072

簡單的來說

就是把各種linux命令放入存放到一個文本文件中吃既,然后去執(zhí)行這個文本文件斧蜕,就像把所有的SQL放入到一個文本中渺杉,然后去執(zhí)行SQL文件是一樣的道理

1.4 shell腳本好處

  • 提交程序開發(fā)效率
  • 批量處理蛇数,加快任務(wù)完成進(jìn)度

2. shell分類

  • Bourne Shell

    UNIX 最初使用的 shell,并且在每種 UNIX 上都可以使用, 在 shell 編程方面相當(dāng)優(yōu)秀是越,但在處理與用戶的交互方面做得不如其他幾種shell耳舅。

  • Bourne Again Shell(/bin/bash)

    Linunx默認(rèn)的shell,是Bourne shell 的擴展,簡稱 Bash倚评,與 Bourne shell 完全向后兼容,并且在Bourne Shell基礎(chǔ)上加了很多新的特性浦徊。因此也更加靈活。所以一般來說shell腳本都會執(zhí)行它為執(zhí)行路徑蔓纠。也可以認(rèn)為

  • C Shell

    主要是為了讓用戶更容易的使用交互式功能辑畦,并把ALGOL風(fēng)格的語法結(jié)構(gòu)變成了C語言風(fēng)格吗蚌。它新增了命令歷史腿倚、別名、文件名替換蚯妇、作業(yè)控制等功,其內(nèi)部命令共有52個敷燎,現(xiàn)在已經(jīng)被tc shell所取代了。

  • K Shell

    Korn shell 是與 Bourne shell 向后兼容的箩言,并且包含大部分的 Bourne shell 的特點和幾個 C shell 的最好特點硬贯。許多安裝腳本都是用了ksh,其內(nèi)部共有42條命令。

  • TC Shell

    Tcsh是csh的增強版陨收,并且完全兼容csh饭豹。它不但具有csh的全部功能,還具有命令行編輯务漩、拼寫校正拄衰、可編程字符集、歷史紀(jì)錄饵骨、作業(yè)控制等功能翘悉,以及C語言風(fēng)格的語法結(jié)構(gòu)。

3. shell 快速入門

3.1 準(zhǔn)備工作

  • 安裝Linux系統(tǒng)居触,這里我安裝虛擬機妖混。配置如下:

    image-20200615140614256

3.2 shell -helloword

  • 在當(dāng)前文件夾下新建一個hello.sh

    image-20200615140830090

    解釋:

    shell腳本文件后綴名必須為 xx.sh

  • 文件內(nèi)容如下

    #!/bin/bash
    #這是一個注釋
    echo '這是第一個腳本'
    

    解釋:

    腳本文件第一行必須為#!/bin/bash.其含義是告訴系統(tǒng)腳本文件的解釋器路徑是什么老赤。

    shell腳本里面的注釋為: #注釋

    echo 輸出語句,類似于java中System.out.print

  • 修改文件權(quán)限

    image-20200615141453003

    解釋:

    既然hello.sh是一個腳本文件,那么就需要去執(zhí)行制市,可是創(chuàng)建出來的文件沒有執(zhí)行權(quán)限抬旺,因此需要增加執(zhí)行權(quán)限。

    chmod +x hello.sh
    
  • 執(zhí)行腳本

    ./hello.sh
    
    image-20200615141743283

    注意:

    一定要寫成./hello.sh,如果寫成hello.sh,那么就會出現(xiàn)下面的錯誤

    image-20200615141858511

    這是因為直接寫hello.sh息堂,linux 系統(tǒng)會去 PATH里尋找有沒有叫 hello.sh 的嚷狞,而只有 /bin,/sbin, /usr/bin/usr/sbin 等在 PATH 里荣堰,而當(dāng)前目錄通常不在 PATH 里床未,所以寫成 hello.sh 是會找不到命令的,要用 ./hello.sh 告訴系統(tǒng)說振坚,就在當(dāng)前目錄找薇搁。

    當(dāng)然除此以外還有另外一種方式去運行腳本:

    這種運行方式是,直接運行解釋器渡八,其參數(shù)就是 shell 腳本的文件名啃洋,如:

    /bin/bash hello.sh
    
    image-20200615142151341

3.3 小練習(xí)

  • 在到/home目錄下,創(chuàng)建一個aa.txt文件

    vim test1.sh
    

    文件內(nèi)容如下:

    #!/bin/bash
    #進(jìn)入home目錄
    cd /home
    #創(chuàng)建文件
    touch aa.txt
    echo '執(zhí)行成功'
    

    增加文件權(quán)限

     chmod +x test1.sh 
    

    執(zhí)行腳本

    ./test1.sh
    
    image-20200615143300976

    注意屎鳍,切換到root用戶下執(zhí)行宏娄,否則可能會有權(quán)限問題。

    查看執(zhí)行結(jié)果:

    image-20200615143352435

    通過上述的練習(xí)我們可以知道逮壁,所謂的腳本就是將多個命令堆積到一塊孵坚,然后去執(zhí)行這個腳本。當(dāng)然這只是shell基本寫法窥淆,除了這個基本寫法以外還有一些高級寫法卖宠,接下來我們就來看看高級寫法

3.4 變量

3.4.1 基本變量

  • 定義變量

    name='value'
    name="value"
    
    • 變量名只能由英文字母,數(shù)字和下劃線組成忧饭,不能以數(shù)字開頭扛伍。
    • 變量名中間不能有空格
    • 不能使用標(biāo)點符號
    • 不能使用關(guān)鍵字(可以使用help指令查看關(guān)鍵字)
  • 使用變量

    your_name="hello"
    echo $your_name
    

    使用變量就在變量名前面加上美元符號即可

  • 案例

    #!/bin/bash
    #字符串需要加上單引號和雙引號
    name="lisi"
    #數(shù)字可以不加不加
    num=1
    #boolean類型的數(shù)據(jù)也可以不加
    flag=true
    
    # 使用變量 $變量名
    echo $name
    echo $num
    echo $flag
    

    執(zhí)行結(jié)果如下

    image-20200615145606780

    注意:

    雙引號能夠識別變量,且能夠使用轉(zhuǎn)義

    單引號不能夠識別變量且不能夠轉(zhuǎn)移词裤,只能原樣輸出刺洒。如下:

    #!/bin/bash
    num=123
    test1="hello$num"
    test2='hello$num'
    echo $test1
    echo $test2
    

    執(zhí)行結(jié)果如下:

    image-20200615150340386
  • 定義變量,輸入日期格式吼砂,格式為年:月:日 時:分:秒

    #!/bin/bash
    dt=`date  +'%F %T'`
    echo $dt
    

    命令的結(jié)果賦值給一個變量逆航,需要加上反單引號

3.4.2 只讀變量

使用 readonly命令可以將變量改為只讀變量,只讀變量不能夠再去賦值帅刊,如下:

#!/bin/bash
name=lisi
readonly name
name=wangwu
echo $name

執(zhí)行報錯纸泡,從下圖的錯誤顯示看,name是一個只讀變量

image-20200615151434338

3.4.3 刪除變量

使用unset刪除變量

#!/bin/bash
name="lisi"
age=15
unset name
echo $age
echo $name

執(zhí)行可知

image-20200615151755026

如圖,當(dāng)把name變量刪除后女揭,打印出來的就只有空行了蚤假。

3.4.4 接收用戶輸入

使用read -p 提示信息 變量名去接收用戶的參數(shù)

#!/bin/bash
read -p '請輸入姓名' name
echo  $name
image-20200615152138949

3.5 字符串操作

3.5.1 拼接字符串

  • 單引號

    • 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的吧兔;
    • 單引號字串中不能出現(xiàn)單獨一個的單引號(對單引號使用轉(zhuǎn)義符后也不行)磷仰,但可成對出現(xiàn),作為字符串拼接使用境蔼。
  • 雙引號

    • 雙引號里可以有變量
    • 雙引號里可以出現(xiàn)轉(zhuǎn)義字符
  • 案例

    • 拼接字符串

      #!/bin/bash
      name="lisi"
      #單引號拼接字符串
      desc='你的名字是'$name''
      
      #雙引號拼接字符串
      desc2="你的名字是$name"
      
      echo $desc $desc2
      
      image-20200615153232497

3.5.2 字符串長度

#!/bin/bash
name="lisi"
#單引號拼接字符串
desc='你的名字是'$name''

#雙引號拼接字符串
desc2="你的名字是$name"

echo $desc $desc2
# 獲取字符串長度
echo ${#desc2}
image-20200615153428743

3.5.3 截取字符串

#!/bin/bash
name="lisi"
#單引號拼接字符串
desc='你的名字是'$name''

#雙引號拼接字符串
desc2="你的名字是$name"

echo $desc $desc2
# 獲取字符串長度
echo ${#desc2}

#從索引為2的位置開始連續(xù)截取4個字符灶平,索引從0開始
echo ${desc:2:4}
image-20200615153921933

3.6 數(shù)組

3.6.1 簡介

bash 支持一維數(shù)組,不支持多維數(shù)組箍土,與java一樣逢享,數(shù)組下標(biāo)從0開始,數(shù)組大小沒有限制吴藻,對數(shù)組里面的元素類型也沒有限制

3.6.2 定義數(shù)組

  • 語法1

    array_name=(value1 value2 ...);
    
  • 語法2

    array_name=(
      value1
      value2
      value3
      ...
    )
    
    array_name[0]=value0
    array_name[1]=value1
    ...
    

3.6.3 獲取數(shù)組值

  • 語法

    #獲取數(shù)組特定元素
    ${array_name[index]}
    
    #獲取數(shù)組所有元素
    ${array_name[@]}
    
  • 案例

    #!/bin/bash
    # 定義數(shù)組 里面的數(shù)組類型沒有特定的顯示
    array=(1 5 6 "lisi")
    
    # 打印數(shù)組里面所有的元素
    echo ${array[@]}
    
    # 打印數(shù)組下標(biāo)為2的元素
    
    echo ${array[2]}
    
    
    echo "------------------------------------------------"
    
    #數(shù)組第二種方式
    arr=(
     true
     "lisi"
     1
     5
    )
    
    echo ${arr[1]}
    echo ${arr[@]}
    
    echo "---------------------------------------------"
    
    #數(shù)組的第三種方式
    arr2[0]=1
    arr2[1]=true
    arr2[2]="wangwu"
    
    echo ${arr2[@]}
    

    執(zhí)行腳本

    image-20200615155525521

3.6.4 數(shù)組長度

#!/bin/bash
array=(1 5 6 "lisi")

length=${#array[@]}
echo $length

執(zhí)行結(jié)果如下:

image-20200615155803395

3.7 注釋

  • 單行注釋

    #這是一個注釋,到時候注釋會被解釋器忽略掉
    # 通過每一行加一個 # 號設(shè)置多行注釋瞒爬,像這樣
    ##### tomcat start #####
    #
    #
    # tomcat config
    # 
    #
    ##### tomcat end  #####
    
  • 多行注釋

    :<<EOF
    這是一個注釋1
    這是一個注釋2
    這是一個注釋3
    ...
    EOF
    
    #!/bin/bash
    :<<EOF
    注釋1
    注釋2
    EOF
    array=(1 5 6 "lisi")
    
    length=${#array[@]}
    echo $length
    

    執(zhí)行結(jié)果如下:

    image-20200615160345856
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者沟堡。
  • 序言:七十年代末侧但,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子航罗,更是在濱河造成了極大的恐慌禀横,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粥血,死亡現(xiàn)場離奇詭異柏锄,居然都是意外死亡,警方通過查閱死者的電腦和手機立莉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門绢彤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來七问,“玉大人蜓耻,你說我怎么就攤上這事⌒笛玻” “怎么了刹淌?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長讥耗。 經(jīng)常有香客問我有勾,道長,這世上最難降的妖魔是什么古程? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任蔼卡,我火速辦了婚禮,結(jié)果婚禮上挣磨,老公的妹妹穿的比我還像新娘雇逞。我一直安慰自己荤懂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布塘砸。 她就那樣靜靜地躺著节仿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掉蔬。 梳的紋絲不亂的頭發(fā)上廊宪,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音女轿,去河邊找鬼箭启。 笑死,一個胖子當(dāng)著我的面吹牛蛉迹,可吹牛的內(nèi)容都是我干的册烈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼婿禽,長吁一口氣:“原來是場噩夢啊……” “哼赏僧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起扭倾,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淀零,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后膛壹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驾中,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年模聋,在試婚紗的時候發(fā)現(xiàn)自己被綠了肩民。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡链方,死狀恐怖持痰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祟蚀,我是刑警寧澤工窍,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站前酿,受9級特大地震影響患雏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罢维,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一淹仑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦匀借、人聲如沸取试。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞬浓。三九已至,卻和暖如春蓬坡,著一層夾襖步出監(jiān)牢的瞬間猿棉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工屑咳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萨赁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓兆龙,卻偏偏與公主長得像杖爽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子紫皇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

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