shell程式設計其實真的很簡單(一)
如今,不會Linux的程式設計師都不意思說自己是程式設計師,而不會shell程式設計就不能說自己會Linux。說起來似乎shell程式設計很屌啊,然而不用擔心,其實shell程式設計真的很簡單。
背景
什麼是shell程式設計
高大上的解釋,往往讓人摸不住頭腦。一句話概括就是:shell程式設計就是對一堆Linux命令的邏輯化處理。
為什麼要會shell程式設計
舉個簡單的例子,我們做javaweb開發的,在以前,如果要在本地將程式打包,然後部署到遠端伺服器(拋開現在的ci, 原始的方法), 我們以前的做法通常會經歷如下幾個步驟:
拉取最新程式碼(git pull)
編譯打包
上傳並部署到遠端伺服器
每次打包都要經歷這一個階段,效率低又煩躁。而此時,我們可以編寫一個shell指令碼,然後每次只需要執行一下這個shell指令碼,即可實現打包部署這一系列動作,徹底解放雙手,多好
入門
第一個shell程式
#!/bin/bash
#第一個shell小程式
echo hello world!
以上,我們的第一個shell小程式就完成了,結果當然是輸出我們熟悉的hello world。
第一行表示我們選擇使用bash shell。
shell中#符號表示註釋。shell的第一行比較特殊,一般都會以#!開始來指定使用的shell型別。在linux中,除了bash shell以外,還有很多版本的shell, 例如zsh、dash等等…不過bash shell還是我們使用最多的。
第二行以#符號開始,表示本行是註釋,執行的時候是不會執行本行的。
第三行中的echo是linux中的輸出命令,該行的意思很明顯的就是輸出hello world!
執行第一個shell程式
新建立一個檔案(hello_world.sh), 然後將以上程式碼複製到此檔案中,然後需要賦予此檔案的可執行許可權。
chmod +x hello_world.sh
最後執行:
./hello_world.sh
在linux中,字尾名幾乎是可以任意的或者沒有後綴名,一般將shell儲存為xxx.shell是為了看起來更直觀。
如果直接執行hello_world.sh,這時會預設從$PATH環境變數中去尋找,這時,由於我們為將此檔案配置在環境變數中,因此會找不到。所以,我們用了"."這個符號,表示從當前目錄找。
除了以上執行方法,我們還可以直接指定shell來執行:
/bin/sh hello_world.sh
這兒我們指定用了/bin/sh來執行,這時hello_world.sh中指定的/bin/bash將不會生效。
變數
程式設計豈能沒有變數?對吧?
shell程式設計中分為兩種變數,第一種是我們自己定義的變數(自定義變數),第二種是Linux已定義的環境變數(環境變數, 例如:$PATH, $HOME 等…, 這類變數我們可以直接使用)。
!/bin/bash
#使用環境變數
echo $PATH
#自定義變數hello
hello="hello world"
echo $hello
以上演示了自定義變數和系統環境變數的用法,使用很簡單,就是使用 符號,使用變數要加$就行了。
在第5行中,我們在自定義變數時,使用了雙引號,在shell程式設計中, 如果變量出現空格或者引號,那麼也必須加引號, 否則就可以省略。
還有一點需要注意,定義變數的時候,“=”左右千萬不要有空格啊。
將linux命令執行結果賦值給變數
#!
/bin/bash
path=$(pwd)
files=`ls -al`
echo current path: $path
echo files: $files
以上2行和第3行分別演示了兩種方式來將Linux命令執行結果儲存到變數。
第2行將pwd執行結果(當前所在目錄)賦值給path變數。
第3行將ls -al命令執行結果(列出當前目錄下所有的檔案及資料夾)賦值給變數
注意:第三行的符號不是單引號,是鍵盤上“~”這個按鍵
好啦,到此,對shell程式設計已經有初步認識了,也會使用變量了。到此,看起來shell程式設計是不是很的簡單。沒錯,其實真的就這麼一回事。shell程式設計其實真的很簡單(一)
如今,不會Linux的程式設計師都不意思說自己是程式設計師,而不會shell程式設計就不能說自己會Linux。說起來似乎shell程式設計很屌啊,然而不用擔心,其實shell程式設計真的很簡單。
背景
什麼是shell程式設計
高大上的解釋,往往讓人摸不住頭腦。一句話概括就是:shell程式設計就是對一堆Linux命令的邏輯化處理。
為什麼要會shell程式設計
舉個簡單的例子,我們做javaweb開發的,在以前,如果要在本地將程式打包,然後部署到遠端伺服器(拋開現在的ci, 原始的方法), 我們以前的做法通常會經歷如下幾個步驟:
拉取最新程式碼(git pull)
編譯打包
上傳並部署到遠端伺服器
每次打包都要經歷這一個階段,效率低又煩躁。而此時,我們可以編寫一個shell指令碼,然後每次只需要執行一下這個shell指令碼,即可實現打包部署這一系列動作,徹底解放雙手,多好
入門
第一個shell程式
#!/bi
n/bash
#第一個shell小程式
echo hello world!
以上,我們的第一個shel
l小程式就完成了,結果當然是輸出我們熟悉的hello world。
第一行表示我們選擇使用bash shell。
shell中#符號表示註釋。shell的第一行比較特殊,一般都會以#!開始來指定使用的shell型別。在linux中,除了bash shell以外,還有很多版本的shell, 例如zsh、dash等等…不過bash shell還是我們使用最多的。
第二行以#符號開始,表示本行是註釋,執行的時候是不會執行本行的。
第三行中的echo是linux中的輸出命令,該行的意思很明顯的就是輸出hello world!
執行第一個shell程式
新建立一個檔案(hello_world.sh), 然後將以上程式碼複製到此檔案中,然後需要賦予此檔案的可執行許可權。
chmod +x hello_world.sh
最後執行:
./hello_world.sh
在linux中,字尾名幾乎是可以任意的或者沒有後綴名,一般將shell儲存為xxx.shell是為了看起來更直觀。
如果直接執行hello_world.sh,這時會預設從$PATH環境變數中去尋找,這時,由於我們為將此檔案配置在環境變數中,因此會找不到。所以,我們用了"."這個符號,表示從當前目錄找。
除了以上執行方法,我們還可以直接指定shell來執行:
/bin/sh hello_world.sh
這兒我們指定用了/bin/sh來執行,這時hello_world.sh中指定的/bin/bash將不會生效。
變數
程式設計豈能沒有變數?對吧?
shell程式設計中分為兩種變數,第一種是我們自己定義的變數(自定義變數),第二種是Linux已定義的環境變數(環境變數, 例如:$PATH, $HOME 等…, 這類變數我們可以直接使用)。
#!/bin/bash
#使用環境變數
echo $PATH
#自定義變數hello
hello="hello world"
echo $hello
以上演示了自定義變數和系統環境變數的用法,使用很簡單,就是使用 符號,使用變數要加$就行了。
在第5行中,我們在自定義變數時,使用了雙引號,在shell程式設計中, 如果變量出現空格或者引號,那麼也必須加引號, 否則就可以省略。
還有一點需要注意,定義變數的時候,“=”左右千萬不要有空格啊。
將linux命令執行結果賦值給變數
#!/bin/bash
path=$(pwd)
files=`ls -al`
echo current path: $path
echo files: $files
以上2行和第3行分別演示了兩種方式來將Linux命令執行結果儲存到變數。
第2行將pwd執行結果(當前所在目錄)賦值給path變數。
第3行將ls -al命令執行結果(列出當前目錄下所有的檔案及資料夾)賦值給變數
注意:第三行的符號不是單引號,是鍵盤上“~”這個按鍵
好啦,到此,對shell程式設計已經有初步認識了,也會使用變量了。到此,看起來shell程式設計是不是很的簡單。沒錯,其實真的就這麼一回事。