Shell腳本的執行方式能夠有如下幾種:java
方式一: 編程
./script.sh # 利用小數點來執行
方式二: bash
sh script.sh 或 bash script.sh # 利用bash(sh)來執行腳本
前面兩種方式其實都是同樣的:都是在當前父進程下的子進程中執行,子進程完成後,子進程中的各項變量或操做將會結束而不會傳回到父進程中.舉例來講:spa
能夠看到,執行後再看腳本中兩個變量,在父進程中不起做用!code
備註: 若是在script2.sh文件裏面執行script1.sh的腳本,那麼就是執行. ./script1.sh [中間有空格]blog
方式三: 進程
source script.sh 或 . liqiang.sh# 利用小數點來執行
而經過第三種方式執行(source test.sh)的話,在父進程中就起做用了:ip
這就是直接執行與用source命令執行的區別,前者只做用於子進程自己,後者則做用於整個父進程。class
所以:如要想不註銷系統,並讓全局配置文件生效,則必須用source命令:test
好比說: 在全局配置文件中/etc/profile添加了JAVA_HOME,要讓他對整個環境生效
export JAVA_HOME=/usr/java/jdk1.7.0_75
就必須執行source /etc/profile
注意:在執行時要賦權限
chmod a+x liqiang.sh #賦權限chmod a+x script-name
補充知識點:
一個規範的Shell腳本在第一行會指出由哪一個程序(解釋器)來執行腳本中的內容,這一行內容在Linux bash的編程通常爲:
#!/bin/bash
或
#!/bin/sh
注意:
(1)在Shell中若是一行的第一個字母是#,則是註釋,可是上面兩個是寫在第一行,因此不是腳本註釋行,若是寫在某個命令以後,則變成註釋行。
(2)sh爲bash的軟連接,大多數狀況下,腳本的開頭使用「#!/bin/bash」和「#!/bin/sh」是沒有區別的,但更規範的寫法是在腳本的開頭使用「#!/bin/bash」。