shell編程其實真的很簡單(一)

現在,不會Linux的程序員都不意思說本身是程序員,而不會shell編程就不能說本身會Linux。提及來彷佛shell編程很屌啊,然而不用擔憂,其實shell編程真的很簡單。
java

背景

什麼是shell編程

高大上的解釋,每每讓人摸不住頭腦。一句話歸納就是:shell編程就是對一堆Linux命令的邏輯化處理。linux

爲何要會shell編程

舉個簡單的例子,咱們作javaweb開發的,在之前,若是要在本地將程序打包,而後部署到遠程服務器(拋開如今的ci, 原始的方法), 咱們之前的作法一般會經歷以下幾個步驟:git

  • 拉取最新代碼(git pull)
  • 編譯打包
  • 上傳並部署到遠程服務器

每次打包都要經歷這一個階段,效率低又煩躁。而此時,咱們能夠編寫一個shell腳本,而後每次只須要運行一下這個shell腳本,便可實現打包部署這一系列動做,完全解放雙手,多好程序員

入門

第一個shell程序

#!/bin/bash
#第一個shell小程序
echo hello world!

以上,咱們的第一個shell小程序就完成了,結果固然是輸出咱們熟悉的hello world。web

第一行表示咱們選擇使用bash shell。shell

shell中#符號表示註釋。shell的第一行比較特殊,通常都會以#!開始來指定使用的shell類型。在linux中,除了bash shell之外,還有不少版本的shell, 例如zsh、dash等等...不過bash shell仍是咱們使用最多的。編程

第二行以#符號開始,表示本行是註釋,運行的時候是不會運行本行的。小程序

第三行中的echo是linux中的輸出命令,該行的意思很明顯的就是輸出hello world!bash

運行第一個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編程是否是很的簡單。沒錯,其實真的就這麼一回事。


個人獨立博客: javafan.cn

相關文章
相關標籤/搜索