Shell腳本的執行方式可以有以下幾種:
方式一:
./script.sh # 利用小數點來執行
方式二:
sh script.sh 或 bash script.sh # 利用bash(sh)來執行腳本
前面兩種方式其實都是一樣的:都是在當前父進程下的子進程中執行,子進程完成后,子進程中的各項變量或操作將會結束而不會傳回到父進程中.舉例來說:
可以看到,執行后再看腳本中兩個變量,在父進程中不起作用!
備注: 如果在script2.sh文件里面執行script1.sh的腳本,那么就是執行. ./script1.sh [中間有空格]
方式三:
source script.sh 或 . liqiang.sh# 利用小數點來執行
而通過第三種方式執行(source test.sh)的話,在父進程中就起作用了:
這就是直接執行與用source命令執行的區別,前者只作用於子進程本身,后者則作用於整個父進程。
因此:如要想不注銷系統,並讓全局配置文件生效,則必須用source命令:
比如說: 在全局配置文件中/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”。