執行shell指令碼的方式通常有以下四種
方式一bash
方式執行指令碼的話,會在當前的終端下面產生乙個bash子程序來執行指令碼,所以對當前的環境是沒有影響的。
[root@lincoding usr]# bash ./test.sh
方式二./test.sh
的方式執行,則指令碼第一行宣告是哪個shell直譯器就會產生哪個shell直譯器的子程序來執行指令碼,如果宣告的shell直譯器是bash,則與方式一類似。
[root@lincoding usr]# ./test.sh
方式三和方式四執行的時候,和上面的方式一和方式略有點不同。
因為他執行的時候是通過當前的終端來執行shell指令碼的,不會產生子程序,所以會當前的環境是有影響的。
[root@lincoding usr]# source ./test.sh
[root@lincoding usr]# . ./test.sh
上述也提及到了方式一和方式二,由於是會產子程序來執行shell指令碼,所以對當前的環境是沒有影響的;而方式二和方式三,是在當前的終端執行shell指令碼,所以是會對當前的環境是有影響的。
舉個栗子,編寫乙個切換目錄的test.sh指令碼,內容如下
#!/bin/bash
# 切換到tmp目錄
cd /tmp
# 列印當前目
pwd
那麼使用方式一執行test.sh指令碼,其結果如下:
[root@lincoding /]# bash test.sh
/tmp
[root@lincoding /]# pwd
/
可以發現,使用方式一去執行指令碼,不需要給予執行許可權。
方式二執行test.sh指令碼,其結果如下:
[root@lincoding /]# chmod u+x test.sh
[root@lincoding /]# ls -l test.sh
-rwxr--r--. 1 root root 64 sep 26 18:34 test.sh
[root@lincoding /]# ./test.sh
/tmp
[root@lincoding /]# pwd
/
方式一和方式二執行完切換到/tmp
目錄的shell指令碼後,終端所在的目錄沒有變化,還是在/
根目錄,說明方式一和方式二的執行方式是對當前的環境是沒有影響的。
原因就是方式一和二執行shell指令碼時,會產生子程序來執行shell指令碼,當指令碼執行結束後,子程序退出,回到了父程序,那麼對當前所在的環境就不會產生影響。
接下來看,方式三執行結果:
[root@omp120 /]# source ./test.sh
/tmp
[root@omp120 tmp]# pwd
/tmp
方式四執行結果:
[root@omp120 /]# . ./test.sh
/tmp
[root@omp120 tmp]# pwd
/tmp
從上面方式三和方式四的執行結果,可以發現,執行完切換到/tmp
目錄的shell指令碼後,當前的終端環境所在的目錄已經被切換了到了/tmp
目錄,說明方式三和方式四的執行方式是對當前的環境是有影響的。
方式一和方式二執行shell指令碼時,會產生子程序來執行shell指令碼,當指令碼執行結束後,子程序退出,回到了父程序,那麼對當前所在的環境就不會產生影響。
而方式二和方式四是在當前環境執行shell指令碼,也就是在當前程序執行shell指令碼,其執行的結果就會影響當前的環境。
Linux shell程式設計學習筆記(三) 指令碼引數
1 指令碼傳遞引數測試 bin bash test.sh test pass parameters by wzs 20171021 echo parameters echo 執行指令碼如下 book wzs work tq210 shell test.sh a b c d 2 parameters ...
三 指令碼編寫與執行
編寫指令碼的思路 明確指令碼實現的功能 哪些資料是變化的,把變化的資料用變數來表示 使用哪種流程控制 使用哪些系統命令 1 編寫指令碼 使用vim文字編輯器 每行一條linux命令,按執行順序依次編寫 2 賦予可執行許可權 若直接執行指令碼檔案,必須具有可執行屬性 3 執行指令碼檔案 指令碼檔案路徑...
Mysql資料備份三 指令碼備份mysqldump
使用mysqldump進行備份,這個是最保險最安全的資料備份方法.雖然使用它比mysqlhotcopy要慢些,但其匯出的是sql語句文字檔案,不存在平台的相容性問題.也可用於備份除myisam型別以外的資料表.下面給出shell指令碼,大家可以根據自己的實際需要對其進行修改,以完成自己需要的功能.s...