Linux下shell script的執行方式彙編

2021-06-19 12:06:35 字數 1618 閱讀 5654

假設存在shell scripts檔案為/home/myscripts/helloworld.sh,現列舉如下的執行方式:

一、直接命令執行

1)絕對路徑——/home/myscripts/helloworld.sh

2)相對路徑——假設當前工作目錄為/home/myscripts,則執行方式為./helloworld.sh

3)利用變數path— —將helloworld.sh指令碼檔案放在path變數中任乙個目錄,然後直接以helloworld.sh來執行

remarks:

問題:在第2)條中,為什麼不是直接用helloworld.sh來執行呢?因為相對於其當前工作目錄/home/myscripts,./hellowold.sh和helloworld.sh都是相對路徑了。假設當前工作目錄為/home,那麼可以通過./myscripts/helloworld.sh和myscripts/helloworld.sh來執行都可以的。這和問題上面的有什麼不同呢?

解答: 如果想直接用helloworld.sh來執行成功的話,其實就要採取第3)種方式了。

二、以bash程序來執行

假設當前工作目錄為/home/myscripts,則直接通過bash helloworld.sh或者sh helloworld.sh來執行

remarks:可以使用sh helloworld.sh來執行,是因為/bin/sh就是/bin/bash的連線檔案

三、以source或小數點(.)來執行

假設當前工作目錄為/home/myscripts,則通過source helloworld.sh或. helloworld.sh來執行,二者是一樣的哦

四、各種執行shell scripts方式的區別

a )第三種執行方式和第

一、二種執行方式的區別           

利用第三種方式來執行shell scripts,就會在父程序中去執行shell scripts中的命令。而第

一、二兩種方式,會使用乙個新的bash環境來執行指令碼內的命令,就是在子程序中執行指令碼命令了。所以如果指令碼檔案中有有關變數的設定的時候,第

一、二種方式下,等指令碼檔案執行完畢,回到父程序bash中時,在指令碼檔案中設定的變數已經查不到了。而第三種方式下,因為指令碼檔案就是在父程序bash中執行的,所以等指令碼檔案執行完畢,仍然可以查到在指令碼檔案中設定的變數。

b)第一種執行和第二種執行方式一樣嗎

從原理上說,二者是一樣的,因為在shell scripts檔案的第一行有#!/bin/bash語句,就是說要用bash來執行,相當於shell *.sh

五、linux中命令的查詢的過程

當我們在命令提示符下輸入乙個命令時,linux的查詢該命令的流程如下:

(1)已相對命令或決定命令去查詢(像/home/jianzai/script/my_script.sh,或./my_script.sh,但是如果直接是my_script.sh的話,那就不經過第1步了,從第2步開始找了 )

(2)有alias找到命令,然後執行

(3)shell內建的命令執行

(4)在path環境變數設定的目錄中去查詢

六、備註

第一種方式需要賦予檔案可執行許可權,第二種方式則不要,只要有shell(或python命令)的執行許可權就行了。注意python、perl指令碼的執行的方式都是類似的哦。

Linux下Redis下安裝

redis安裝 檢查是否安裝redis ps ef grep redis2.檢查gcc服務是否安裝成功 rpm qa grep gcc注 安裝成功則顯示 mkdir redis5.解壓redis安裝包 tar zxvf redis 2.8.17 tar.gz c usr local redis 解壓...

Linux下程式設計

windows下我的環境為 windows10 vs2015 opencv3.4.0 opencv3.4.0 contrib python linux下我的環境為 ubuntu16004 也有ubuntu1804 opencv3.4.0 opencv3.4.0 contrib python gnu ...

linux下萬用字元

萬用字元是一類鍵盤字元,有星號 和問號 當查詢檔案呀資料夾時,可以使用它來代替乙個或多個真正字元 當不知道真正字元或者不想建入完整名字時,常常使用萬用字元代替乙個或多個真正字元。星號 可以使用星號代替0個或多個字元。如果正在查詢以aew開頭的乙個檔案,但不記得檔名其餘部分,可以輸入aew,查詢以ae...