shell指令碼的建立與執行

2021-07-25 17:45:31 字數 3274 閱讀 3778

指令碼的開頭(第一行):

規範的指令碼在指令碼的第一行會指出由哪個程式(直譯器)來執行指令碼中的內容在linux bash的程式設計中一般為:

#!/bin/bash

或 #!/bin/sh

『#!』被稱為幻數,用來指出執行指令碼所用的直譯器,並且此行必須用在第一行,若不是指令碼第一行則其就是注釋行sh與bash的區別:

[root@localhost shell]# ls -l /bin/sh

lrwxrwxrwx. 1 root root 4 jan 15 2016 /bin/sh -> bash

[root@localhost shell]# ll /bin/bash

-rwxr-xr-x. 1 root root 960368 jan 29 2014 /bin/bash

[root@localhost shell]#

sh為bash的軟連線,但又有區別;

當使用/bin/sh執行指令碼不正常的時候,可以使用/bin/bash執行

也可以不加#!/bin/bash,是因為linux系統預設/bin/bash

指令碼的注釋:

在shell指令碼中,跟在(#)號後面的內容表示注釋,用來對指令碼進行解釋說明;

注釋可以自成一行,也可以跟在指令碼命令後面與命令在同一行。

shell指令碼的執行:

在執行shell指令碼之前,它會先載入系統環境變數env(該變數指定了環境檔案,通常是 .bashrc , .bash_profile , /etc/bashrc , /etc/profile等),然後執行指令碼。

特殊:設定定時任務時,最好把系統環境變數在定時任務指令碼中重新定義,否則,一些系統環境變數將不被載入

shell指令碼的執行方式:<1>bash script-name 或 sh script-name(推薦使用)

該方法是當指令碼檔案本身沒有可執行許可權時,或者檔案開頭沒有指定直譯器時常使用的方法

[root@localhost

shell]# vim test.sh

[root@localhost

shell]# cat test.sh

echo 'hello world'

[root@localhost

shell]# sh test.sh

hello world

[root@localhost

shell]#

[root@localhost

shell]# cat >test1.sh //用cat向檔案中寫內容

echo 'ni hao, ming tian'

^c[root@localhost

shell]# cat test1.sh

echo 'ni hao, ming tian'

[root@localhost

shell]# /bin/sh test1.sh

ni hao, ming tian

[root@localhost

shell]# /bin/bash test1.sh

ni hao, ming tian

[root@localhost

shell]#

<2>path/script-name 或 ./script-name(當前路徑下執行指令碼)

該方式需要指令碼有執行許可權

[root@localhost shell]# ll

total 8

-rw-r--r-- 1 root root 25

dec31

10:55 test1.sh

-rw-r--r-- 1 root root 19

dec31

10:50 test.sh

[root@localhost shell]# chmod +x test.sh

[root@localhost shell]# ll

total 8

-rw-r--r-- 1 root root 25

dec31

10:55 test1.sh

-rwxr-xr-x

1 root root 19

dec31

10:50 test.sh

[root@localhost shell]# ./test.sh

hello world

[root@localhost shell]#

<3>source script-name 或 . script-name《注意 . 號》

[root@localhost

shell]# source test.sh

hello world

[root@localhost

shell]# . test.sh

hello world

[root@localhost

shell]#

<4>用重定向或者管道來執行

[root@localhost

shell]# sh ni hao, ming tian

[root@localhost

shell]# cat test1.sh | sh

ni hao, ming tian

[root@localhost

shell]#

例題:

其執行結果為《空》,即就是沒有輸出結果

原因:echo $user是父shell,而test.sh是子shell,父shell不能直接繼承子shell的變數,函式等,反之可以

如果希望可以繼承(即讓父繼承子),用source或者點號執行就可以

shell知識點 指令碼的建立與執行

指令碼建立 指令碼執行當shell指令碼以非互動式方式執行時,會先查詢環境變數env,該變數指定了乙個環境檔案 通常是 bashrc 然後從該環境變數檔案開始執行。當讀取了env檔案後,shell才開始執行shell指令碼中的neri 執行方法 指令碼開發基本規範及習慣 開頭指定指令碼直譯器 bin...

如何建立可執行的shell指令碼

1.首先有乙個可以執行的linux環境,最簡單使用vm虛擬機器加linux系統,此次使用ubuntu12系統 2.進入系統後,使用ctrl shift t進入命令列,使用mkdir命令建立乙個資料夾 mkdir shell script 建立乙個shell script的資料夾,使用ls命令檢視,可...

shell 執行shell指令碼

bin bash echo hello world 是乙個約定的標記,它告訴系統這個指令碼需要什麼直譯器來執行,即使用哪一種 shell。echo 命令用於向視窗輸出文字。1 作為可執行程式 chmod x test.sh 使指令碼具有執行許可權 test.sh 執行指令碼注意,一定要寫成 test...