Linux中執行Shell指令碼的方式(三種方法)
原文地址:https://blog.csdn.net/timchen525/article/details/76407735
Shell 指令碼的執行方式通常有如下三種:
(1)bash script-name 或者 sh script-name;(2)path/script-name或者./script-name;(3)source script-name或者. script-name。下面,分別介紹下這三種方式的特點:
(1)bash script-name或者sh script-name
這是當指令碼檔案本身沒有可執行許可權(即檔案許可權屬性x位為-號)時常使用的方法,或者指令碼檔案開頭沒有指定直譯器時需要使用的方法。推薦使用這種方法。
(2)path/script-name或者./script-name
指在當前路徑下執行指令碼(指令碼需要有執行許可權),需要將指令碼檔案的許可權改為可執行(即檔案許可權屬性為x位)。具體方法為:chmod a+x script-name。然後通過執行指令碼絕對路徑或者相對路徑就可以執行指令碼了。
注意:在生產環境中,運維人員由於忘記為該指令碼設定可執行許可權,然後直接使用,導致出錯。因此,推薦第一種 bash script-name。
(3)source script-name或者. script-name
source或者“.”命令的功能是:讀入指令碼並執行指令碼,即在當前Shell中執行source或“.”載入並執行的相關指令碼檔案的命令及語句,而不是產生一個子Shell來執行檔案中的命令。
注意:這是和其他幾種執行shell方式的最大不同。
舉個例子:
新建一個檔案test_sh.sh,不給它賦予任何可執行的許可權x。
編輯內容如下:
檔案以及檔案中內容與常見的shell不同之處在於,這裡的檔案沒有賦予可執行許可權以及在檔案內容中的首行中沒有新增#!/bin/bash。我們現在用上述介紹的幾種方式來測試下效果。
第二種方式./script-name,執行效果如下:報許可權拒絕,Permission denied,此時,我們只要更改檔案的屬性為可執行即可。
執行第一種bash script-name,效果如下:
可以成功執行,輸出:hello。但是,我們輸入命令:echo $name,發現如下:
name的值是空的。不難理解,bash script-name是產生了一個子程式shell,而我們當前的操作還在父shell中因此得不到該變數值。
執行第三種方法. test_sh.sh,效果如下:
可以成功的輸出變數的值。這是因為source script-name和. script-name是將script-name中的內容直接載入到當前的shell,因此能夠輸出當前變數的值。
剛才第二種方式我們執行失敗,現在我們通過chmod a+x script-name,然後再次執行上述命令,檢視效果:
注意:該種方式也是產生了一個子程式Shell,因此echo $name仍然找不到該變數。
補充知識點:
一個規範的Shell指令碼在第一行會指出由哪個程式(直譯器)來執行指令碼中的內容,這一行內容在Linux bash的程式設計一般為:
#!/bin/bash
或
#!/bin/sh
注意:
(1)在Shell中如果一行的第一個字母是#,則是註釋,但是上面兩個是寫在第一行,所以不是指令碼註釋行,如果寫在某個命令之後,則變成註釋行。
(2)sh為bash的軟連結,大多數情況下,指令碼的開頭使用“#!/bin/bash”和“#!/bin/sh”是沒有區別的,但更規範的寫法是在指令碼的開頭使用“#!/bin/bash”。
相關文章
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- shell指令碼的三種執行方式和區別指令碼
- Shell指令碼執行有哪些方式?linux系統學習指令碼Linux
- shell指令碼linux命令連續執行指令碼Linux
- 執行shell指令碼指令碼
- Java執行groovy指令碼的兩種方式Java指令碼
- appium ios java 指令碼如何用指令執行,例如 adb 那種方式執行指令碼APPiOSJava指令碼
- Shell指令碼入門:編寫格式與執行方式指令碼
- linux shell指令碼中 =~ 的作用Linux指令碼
- 在 Ruby 中執行 Shell 命令的 6 種方法
- Linux Shell獲取正在執行指令碼的絕對路徑Linux指令碼
- Mac 終端執行 shell 指令碼Mac指令碼
- Linux Shell指令碼Linux指令碼
- 建立執行緒的三種方式執行緒
- Linux學習之路(三)Shell指令碼初探Linux指令碼
- linux常用的shell指令碼Linux指令碼
- Linux系統Shell指令碼如何執行?linux運維繫統工程師Linux指令碼運維工程師
- 詳解shell中source、sh、bash、./執行指令碼的區別指令碼
- 什麼是Shell指令碼?Shell指令碼在Linux運維工作中的地位!指令碼Linux運維
- 三種方式本地執行Knative
- 在Linux中,如何使用shell指令碼判斷某個服務是否正在執行?Linux指令碼
- [20231023]生成bbed的執行指令碼(bash shell).txt指令碼
- 在 Linux 中執行.sh 指令碼 No such file or directoryLinux指令碼
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- Linux中配置開機自啟動執行指令碼的方法是什麼?Linux指令碼
- 六種用ruby呼叫執行shell命令的方法
- shell指令碼執行錯誤 $‘\r‘:command not found指令碼
- 執行 shell 指令碼 \r 問題解決指令碼
- 關於Python指令碼中執行adb命令的方法Python指令碼
- 如何在 Linux 中以指令碼模式執行 TopLinux指令碼模式
- Linux執行shell指令碼完成任務計劃是以秒為單位Linux指令碼
- Shell 中 $ 關於指令碼引數的幾種用法指令碼
- Linux上執行記憶體中的指令碼和程式Linux記憶體指令碼
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- Shell指令碼應用(三)指令碼
- linux學習day4——shell指令碼中Linux指令碼
- 使用Mac自定義快捷鍵執行shell指令碼Mac指令碼
- php執行shell指令碼需要sudo許可權PHP指令碼