Shell語言 02 四種執行方式

2021-10-17 12:34:40 字數 4494 閱讀 9884

其實就是進入到指令碼所在的資料夾然後使用./執行指令碼,但是注意要許可權,不然會報錯,

[root@centos-root473791 ~]

# ./9*9.sh

-bash: ./9*9.sh: permission denied

[root@centos-root473791 ~]

# chmod a+x 9*9.sh

[root@centos-root473791 ~]

# ./9*9.sh

1*1=

12*1=

22*2=

43*1=

33*2=

63*3=

94*1=

44*2=

84*3=

124*4=

165*1=

55*2=

105*3=

155*4=

205*5=

256*1=

66*2=

126*3=

186*4=

246*5=

306*6=

367*1=

77*2=

147*3=

217*4=

287*5=

357*6=

427*7=

498*1=

88*2=

168*3=

248*4=

328*5=

408*6=

488*7=

568*8=

649*1=

99*2=

189*3=

279*4=

369*5=

459*6=

549*7=

639*8=

729*9=

81[root@centos-root473791 ~]

#

99乘法指令碼如下

#! /bin/basha=

1b=1

while

((a<=9))

dowhile

((b<=a))

dolet"c=a*b"

echo -n "$a*$b=$c "

let b++

done

let a++

letb=

1#因為每個乘法表都是1開始乘,所以b要重置

echo

""done

其實就是從根目錄 / 到指令碼所在的目錄 執行指令碼,跟工作目錄其實差不多一回事,也需要許可權

[root@centos-root473791 ~]

# `pwd`/9*9.sh

1*1=

12*1=

22*2=

43*1=

33*2=

63*3=

94*1=

44*2=

84*3=

124*4=

165*1=

55*2=

105*3=

155*4=

205*5=

256*1=

66*2=

126*3=

186*4=

246*5=

306*6=

367*1=

77*2=

147*3=

217*4=

287*5=

357*6=

427*7=

498*1=

88*2=

168*3=

248*4=

328*5=

408*6=

488*7=

568*8=

649*1=

99*2=

189*3=

279*4=

369*5=

459*6=

549*7=

639*8=

729*9=

81

sh執行,指的是用指令碼對應的shbash來接著指令碼執行,換句話說,簡單理解就是 別人來呼叫你執行,而不是你自己執行,也就不需要執行許可權和知道路徑了,反正是別人來找你,官方點就是將hello.sh作為引數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家呼叫執行,所以不要執行許可權和 指定bash路徑

就是在當前shell環境中執行,可以使用點.或者source接指令碼執行

如果不理解會出現一些坑,建議使用sh執行

如下開始有 9*9.sh指令碼,後面我改名為99.sh,再次執行還是會出現結果,這就很神奇,

明明不存在該指令碼了,但是還可以執行,這就是所謂的環境執行

[root@centos-root473791 ~]

# ll

total 72

-rw-r--r-- 1 root root 720 jan 22

21:10 1.sh

-rw-r--r-- 1 root root 1057 jan 22

21:29 2.sh

-rw-r--r-- 1 root root 13 jan 22

22:13 3.sh

-rwxr-xr-x 1 root root 234 nov 23

12:00 99.sh

drwxr-xr-x 2 root root 4096 dec 5 01:25 aaaa

-rw-------. 1 root root 1524 aug 22 07:39 anaconda-ks.cfg

-rw-r--r-- 1 root root 62 nov 27

23:50 awkscript

-rw-r--r-- 1 root root 22 nov 27

23:41 awk.txt

-rw-r--r--. 1 root root 27338 aug 22 07:39 install.log

-rw-r--r--. 1 root root 7572 aug 22 07:38 install.log.syslog

[root@centos-root473791 ~]

# . 9*9.sh

1*1=

12*1=

22*2=

43*1=

33*2=

63*3=

94*1=

44*2=

84*3=

124*4=

165*1=

55*2=

105*3=

155*4=

205*5=

256*1=

66*2=

126*3=

186*4=

246*5=

306*6=

367*1=

77*2=

147*3=

217*4=

287*5=

357*6=

427*7=

498*1=

88*2=

168*3=

248*4=

328*5=

408*6=

488*7=

568*8=

649*1=

99*2=

189*3=

279*4=

369*5=

459*6=

549*7=

639*8=

729*9=

81[root@centos-root473791 ~]

#

1.絕對路徑和相對路徑沒有什麼區別,兩種方式都需要提前賦予指令碼以執行許可權。

2.sh或者bash方式是把指令碼當做bash的呼叫來處理,所以,指令碼不需要有執行許可權就可以執行。

3.前三種方式都是在當前shell中開啟乙個子shell來執行指令碼內容,當指令碼內容結束,則子shell關閉,回到父shell中。

4.source或者.方式是使指令碼內容在當前shell裡執行,而不是單獨開子shell執行。

開子shell與不開子shell的區別就在於,環境變數的繼承關係,如在子shell中設定的當前變數,不做特殊通道處理的話,父shell是不可見的。而在當前shell中執行的話,則所有設定的環境變數都是直接生效可用的。

source是shell(準確地說是bash)的內建命令,在bourne shell中的等價命令是乙個點.,即點命令。用source命令執行指令碼檔案時,是在當前shell程序中執行,而不是像./與sh方式一樣在新的shell程序中執行,因此早先設定的變數在指令碼裡是可以讀取到的。

source一般不用來執行業務指令碼,最常見用途是在某些初始化指令碼修改之後使其立即生效,即source /etc/profile這樣。

Centos上執行Shell的四種方式

注意 我這裡說的shell指令碼是bash shell,其他型別的shell指令碼不保證有效 my.sh 的意思是說在當前的工作目錄下執行my.sh shell my.sh bash my.sh 或sh hello.sh 注意,若以方式三來執行,可以不必事先設定shell的執行許可權,甚至都不用寫s...

Shell指令碼執行的四種方法

1 bash 或sh 指令碼的相對路徑或絕對路徑 xf xuexi cat a.sh bin bash echo hello world xf xuexi bash a.sh hello world xf xuexi which bash usr bin bash xf xuexi sh a.sh ...

linux之四種shell指令碼啟動方式

1.有那四種?bash sh sh source sh sh2.有什麼不同?1.bash sh 啟動乙個bash子程序,執行指令碼中的命令 2.sh 以指令碼的第一行注釋為標準,例如第一行為 bin bash,那麼就啟動乙個bash子程序指令碼,如果第一行是 bin python,那麼就相當於執行了...