shell編程其實真的很簡單(一)
如今诚亚,不會Linux的程序員都不意思說自己是程序員赖草,而不會shell編程就不能說自己會Linux。說起來似乎shell編程很屌啊乡翅,然而不用擔(dān)心鳞疲,其實shell編程真的很簡單。
背景
什么是shell編程
高大上的解釋蠕蚜,往往讓人摸不住頭腦尚洽。一句話概括就是:shell編程就是對一堆Linux命令的邏輯化處理。
為什么要會shell編程
舉個簡單的例子靶累,我們做javaweb開發(fā)的腺毫,在以前,如果要在本地將程序打包挣柬,然后部署到遠程服務(wù)器(拋開現(xiàn)在的ci潮酒, 原始的方法), 我們以前的做法通常會經(jīng)歷如下幾個步驟:
拉取最新代碼(git pull)
編譯打包
上傳并部署到遠程服務(wù)器
每次打包都要經(jīng)歷這一個階段,效率低又煩躁凛忿。而此時澈灼,我們可以編寫一個shell腳本,然后每次只需要運行一下這個shell腳本,即可實現(xiàn)打包部署這一系列動作叁熔,徹底解放雙手委乌,多好
入門
第一個shell程序
#!/bin/bash
#第一個shell小程序
echo hello world!
以上,我們的第一個shell小程序就完成了荣回,結(jié)果當(dāng)然是輸出我們熟悉的hello world遭贸。
第一行表示我們選擇使用bash shell。
shell中#符號表示注釋心软。shell的第一行比較特殊壕吹,一般都會以#!開始來指定使用的shell類型。在linux中删铃,除了bash shell以外耳贬,還有很多版本的shell, 例如zsh猎唁、dash等等...不過bash shell還是我們使用最多的咒劲。
第二行以#符號開始,表示本行是注釋诫隅,運行的時候是不會運行本行的腐魂。
第三行中的echo是linux中的輸出命令,該行的意思很明顯的就是輸出hello world逐纬!
運行第一個shell程序
新創(chuàng)建一個文件(hello_world.sh), 然后將以上代碼復(fù)制到此文件中蛔屹,然后需要賦予此文件的可執(zhí)行權(quán)限。
chmod +x hello_world.sh
最后執(zhí)行:
./hello_world.sh
在linux中豁生,后綴名幾乎是可以任意的或者沒有后綴名兔毒,一般將shell保存為xxx.shell是為了看起來更直觀。
如果直接執(zhí)行hello_world.sh沛硅,這時會默認從$PATH環(huán)境變量中去尋找眼刃,這時,由于我們?yōu)閷⒋宋募渲迷诃h(huán)境變量中摇肌,因此會找不到擂红。所以,我們用了"."這個符號围小,表示從當(dāng)前目錄找昵骤。
除了以上執(zhí)行方法,我們還可以直接指定shell來運行:
/bin/sh hello_world.sh
這兒我們指定用了/bin/sh來執(zhí)行肯适,這時hello_world.sh中指定的/bin/bash將不會生效变秦。
變量
編程豈能沒有變量?對吧?
shell編程中分為兩種變量框舔,第一種是我們自己定義的變量(自定義變量)蹦玫,第二種是Linux已定義的環(huán)境變量(環(huán)境變量赎婚, 例如:HOME 等..., 這類變量我們可以直接使用)。
#!/bin/bash
#使用環(huán)境變量
echo $PATH
#自定義變量hello
hello="hello world"
echo $hello
以上演示了自定義變量和系統(tǒng)環(huán)境變量的用法樱溉,使用很簡單挣输,就是使用符號撩嚼,使用變量要加$就行了。
在第5行中挖帘,我們在自定義變量時完丽,使用了雙引號,在shell編程中拇舀, 如果變量出現(xiàn)空格或者引號逻族,那么也必須加引號, 否則就可以省略你稚。
還有一點需要注意瓷耙,定義變量的時候,“=”左右千萬不要有空格啊刁赖。
將linux命令執(zhí)行結(jié)果賦值給變量
#!/bin/bash
path=$(pwd)
files=`ls -al`
echo current path: $path
echo files: $files
以上2行和第3行分別演示了兩種方式來將Linux命令執(zhí)行結(jié)果保存到變量。
第2行將pwd執(zhí)行結(jié)果(當(dāng)前所在目錄)賦值給path變量长搀。
第3行將ls -al命令執(zhí)行結(jié)果(列出當(dāng)前目錄下所有的文件及文件夾)賦值給變量
注意:第三行的符號不是單引號宇弛,是鍵盤上“~”這個按鍵
好啦,到此源请,對shell編程已經(jīng)有初步認識了枪芒,也會使用變量了。到此谁尸,看起來shell編程是不是很的簡單舅踪。沒錯,其實真的就這么一回事良蛮。