shell程式設計簡介
shell程式設計簡介
來源:hpuxZone 編輯:丁克川 2003.11.05 1918?
--------------------------------------------------------------------------------
1.1 shell程式設計概述
shell程式是一個包含UNIX命令的普通檔案。
這個檔案的許可許可權至少應該為可讀和可執行。
在shell提示符下鍵入檔名就可執行shell程式。
shell程式可以透過三種方式接受資料:
??-環境變數
??-命令列引數
??-使用者的輸入
shell是一個命令直譯器,它會解釋並執行命令提示符下輸入的命令。但是,你可能想要多次執行一組命令,shell提供了一種功能,讓你將這組命令存放在一個檔案中,然後你可以象unix系統提供的其他程式一樣執行這個檔案,這個命令檔案就叫做shell程式或者shell指令碼。當你執行這個檔案,它會象你在命令列輸入這些命令一樣地執行這些命令。為了讓shell能讀取並且執行你的shell程式,shell指令碼的檔案許可權必須被設定為可讀和可執行。為了讓shell可以找到你的程式,你可以選擇輸入完全路徑名,或者將這個指令碼的路徑放在於你的PATH環境變數指定的路徑列表中。許多的使用者會在他們的HOME目錄下建立一個bin目錄來存放他們自己開發的script,然後將$HOMEbin加入到他們的PATH環境變數中。你可以寫出非常複雜的shell指令碼,因為shell指令碼支援變數、命令列引數、互動式輸入、tests(判斷))、branches(分支),和loops(迴圈)等複雜的結構。
1.2 shell程式舉例
$ cat myprog
#this is the program myprog
date
ls –F
$ myprog
要建立一個shell程式,考慮進行以下步驟:
$ vi myprog ?????一個包含shell命令的程式。
#this is the program myprog
date
ls –F
$ chmod +x myprog 增加檔案的執行模式
$ myprog
Thu Jul 11 1110 EDT 1994
F1 f2 memo myprog
首先使用一個文字編輯器建立一個shell程式myprog。在程式執行之前,這個檔案必須被賦予可執行的許可權。然後在命令提示符下輸入這個程式名,如上例所示,當myprog執行的時候,一個子shell會被建立。這個子shell會從shell程式檔案myprog讀取輸入而不是從命令列讀取輸入,這個shell中的每個命令的執行都會建立一個子shell。一旦所有的命令都被執行,所有的子shell會中止,然後會返回到原始的父shell。
Shell程式中的註釋:
推薦在shell程式中提供註釋語句來註明程式的內容。註釋由一個#符號開始,Shell不會去執行任何在#之後的語句。#能夠出現在命令列的任何位置。
注意:你不可以給shell程式取名為test因為test是一個內部的shell命令。
1.3 傳遞資料給shell程式
$ color = lavender
$ cat color1
echo you are now running program color1
echo the value of the variable color is $color
$ chmod +x color1
$ color1
you ar now running program color1
the value of the variable color is
$ export color
$ color1
you are now running program color1
the value of the variable color is lavender
傳遞資料給shell指令碼的一種方法就是透過環境。在上例中,本地變數color被賦值為lavender,然後建立了shell程式color1;然後更改為可執行許可權;然後這個shell程式被執行,color1指令碼的意圖是顯示color變數的值,但是由於color是一個本地變數,屬於父shell私有的,執行color1產生的子shell不能識別這個變數,因此不能列印出它的值,而當color被輸出到環境中就可以被子shell讀取。
同樣,由於shell程式不能夠更改父程式的環境,對一個子程式中的環境變數重新賦值不會影響到父程式環境中的值。如以下的shell指令碼中的color2。
echo The original value of the variable color is $color
ech0 This program will set the value of color to amber
color=amber
echo The value of color is now $color
echo When your program concludes,display the value of the color variable
觀察在你設定了color的值後有什麼變化。輸出這個變數,然後執行color2
$ export color=lavender
$ echo $color
lanvender
$ color2
The original value of the variable color is lavender
The program will set the value of color to amber
The value of volor is now amber
When your progam concludes, display the value of the color variable,
$ echo $color
lanvender
1.4 shell 程式的引數
命令列:
?$ sh_program arg1 arg2 . . . argx
???$0 ???$1?? $2 ....? $X
例子:
$ cat color3
echo you are now running program $0
echo The value of command line argument #1 is $1
echo The value of command line argument #2 is $2
$ chmod +x color3
$ color3 red green
You are now running program color3
The value of command line argument #1 is red
The value of command line argument #2 is green
大多數的UNIX系統命令可以接收命令列引數,這些引數通常告訴命令它將要操作的檔案或目錄(cp f1 f2),另外指定的引數擴充套件命令的能力(ls –l),或者提供文字字串(banner hi there)。
命令列引數對shell程式同樣有效,使用這種方式傳送資訊給你的程式十分方便。透過開發一個接收命令列引數的程式,你可以傳遞檔案或者目錄命令名給你的程式處理,就像你執行UNIX系統命令一樣,你也可以定義命令列選項來讓命令列使用shell程式額外的功能。
在shell程式中的命令列引數與引數在命令列的位置相關,這樣的引數被稱為位置引數,因為對每一個特殊變數的賦值依靠一這些引數在命令列中的位置,變數的變數名對應變數在命令列中的位置,因此這些特殊的變數名為數字0,1,2等,一直到最後的引數被傳遞,變數名的存取也透過同樣的方法,在名字前面加上$ 符號,因此,為了存取你的shell程式中的命令列引數,你可以應用$0,$1,$2等等。在$9以後,必須使用括號:$(10),$(11),否則,shell會將$10看成是$1後面跟一個0。而$0會一直儲存程式或命令的名字
以下的shell程式會安裝一個程式,這個程式作為一個命令列引數被安裝到你的bin目錄:首先建立程式my_install,注意目錄$HOMEbin應該預先存在。
$ cat my_install
echo $0 will install $1 to your bin directory
chmod +x $1
mv $1 $HOMEbin
echo Installation of $1 is complete
ctrl + d
$ chmod +x my_intalll
$ my_install color3
my_install will install color3 to your bin directory
Installation of color3 is complete
$
這個例子中,程式指明第一個命令列引數為一個檔名,然後加上執行許可權,然後移動到你當前目錄下的bin目錄下。
記住UNIX系統的慣例是存貯程式在bin的目錄下。你也許想要在你的HOME目錄下建立一個bin目錄,在這個目錄下你可以儲存你的程式檔案,記住要將你的bin目錄放在PATH環境變數中,這樣shell才會找到你的程式。
1.5 一些特殊shell變數- #和
# ???命令列引數的數量
???完全的引數字串
例子:
$ cat color4
echo There are $#?comand line argument
echo They are $
ehco The first command line argument is $1
$ chmod +x color4
$ color4 red green yellow blue
They are 4 command line arguments
They are red green yellow blue
The first command line argument is red
$
至今為止我們看到的shell程式都不是很靈活,如color3需要輸入兩個正確的引數而my_install只需要一個。通常在建立一個接收命令列引數的shell程式的時候,你想要使用者輸入一個引數的變數號碼。你同時要程式執行成功,不管使用者鍵入1個引數或是20個引數。當處理變數引數列表的時候,特殊shell變數會提供你許多的靈活性。透過$#你可以知道有多少引數已經被輸入,透過$可以存取全部的引數列表,而不管引數的數量。請注意引數($0)不在$這個引數列表裡。
每一個命令列引數都是互相獨立的,你可以透過$集中檢索這些引數,也可以透過$1,$2,$3等等來獨立的檢索這些引數。
一個可以接收多個命令列引數的安裝程式的例子:
$ cat my_install2
echo $0 will install $# files to your bin directory
echo The files to be installed are $
chmod +x $
mv $ $HOMEbin
echo Installaton is complete
ctril + d
$ chmod +x my_install2
$ my_install2 color1 color2
my_intall2 will install 2 files to your bin directory
The files to be installed are color1,color2
Intallaiton is complete
這個安裝程式更加靈活,如果你有多個檔案要安裝,你僅需要執行這個程式一次,只要一次輸入多個名字即可。
非常重要的是:如果你計劃傳遞整個引數的字串給一個命令,這個命令必須能夠接收多個引數。
在以下的指令碼中,使用者提供一個目錄名作為一個命令列引數。程式會更改到指定的目錄,顯示當前的位置,並且列出內容。
$ cat list_dir
cd $
echo You are in the $(pwd) directory
echo The contents of the directory are
ls –F
$ list_dir dir1 dir2 dir3
sh cd bad argument count
由於cd命令不能同時進入到多個目錄中,這個程式執行會出錯。
1.6 shift 命令
向左移動所有的在中的字串n個位置
#的數目減少n個(n的預設值是1)
語法:shift [n]
例子:
$ cat color5
orig_args=$
echo There are $# command line arguments
echo They are $
echo Shifting two arguments
shift 2
echo There are $# comand line arguments
echo They are $
echo Shifting two arguments
shift 2; final_args=$
echo Original arguments are $orig_args
echo Final arguments are $final_args
shift命令會重新分配命令列引數對應位置引數,在shift n以後,所有的中的引數會向左移動n個位置。同時$#會減n。預設的n為1。Shift命令不會影響到引數0的位置。一旦你完成一次移動,被移出命令列的引數會丟失。如果你想在你的程式中引用這個引數,你需要在執行shift之前存貯這個引數到一個變數中。
Shift命令可以用於:存取一組引數的位置,例如一系列的x,y的座標
從命令列刪除命令選項,假定選項在引數之前。
例子:
$ color5 red green yellow orange black
There are 6 command line arguments
They are red green yellow blue orange black
Shifting two arguments
There are 4 command line arguments
They are yellow blue orange black
Shiftging two arguments
Original arguments are red green yellow blue orange black
Final argument are orange black
$
1.7 read 命令
語法:
read variable [variable......]
例子:
$ cat color6
echo This program prompts for user input
echo “please enter your favorite two colors - c”
read color_a color_b
echo The colors you entered are $color_b $color_a
$ chmod +x color6
$ color6
This program prompts for user input
Please enter your favorite two colors - red blue
The colors you entered are blue red
$ color6
This program prompts for user input
Please enter you favorite two colors - red blue tan
The color you enterd are blue tan red
如果使用命令列引數傳遞資訊程式序,在命令執行之前使用者必須知道正確的語法。有一種情況,你想要在使用者執行程式的時候提示他輸入這些引數。read命令就是用來在程式執行的時候收集終端鍵入的資訊。
通常會使用echo命令來給使用者一個提示,讓他知道程式正在等待一些輸入,同時通知使用者應該輸入的型別。因此,每一個read命令應該在echo命令後面。
read命令會給出一個變數名的列表,使用者在提示符下輸入會給這些變數賦值(變數之間以空格分隔)。如果read命令定義的變數比輸入的詞要多,多出的變數會被賦空值。如果使用者輸入的詞要比變數多,剩餘的資料會賦給列表中的最後一個變數。
一旦被賦值,你就可以象其他的shell變數一樣存取這些變數。
注意:不要混淆位置引數和變數read。位置引數在命令被啟用時直接在命令列中使用,而read命令給變數賦值是在程式執行之中,使用者響應輸入的提示而給變數賦值。
以下例子提示使用者輸入要被安裝的檔名:
$ cat my_install3
echo $0 will install files into your bin directory
echo “Enter the names of the files - c”
read filenames
mv $filenames $HOMEbin
echo Instllation is complete
ctrl + d
$ chmod +x my_install13
$ my_install13
my_install13 will install files into your bin directory
Enter the names of the files - f1 f2
Installaton is complete
這個安裝指令碼會提示使用者輸入需要chmod並移動到$HOMEbin的檔案的檔名。這個程式給使用者更多的關於應該輸入資料情況的指引。而不像install2中使用者必須在命令列中提供檔名,使用者使用程式不需要特殊的語法,程式讓使用者確切地知道要輸入什麼。所有的輸入的檔名都會被賦值給變數filenames。
1.8 另外的技術
#號開始的文件為註釋部分。
sh shell_program argumetns?
shell_program 的屬性可以不是可執行的。
shell_program 必須是可讀的。
sh –x shell_program arguments
每一行在被執行前被列印出來。
在除錯程式時有用處。
在shell程式中,#符號的意思是後面是一段註釋,而shell會自動忽略#符號以後直到一個回車符號為止的所有字元。
執行一個shell程式的另外一種方法是
sh shell_program arguments
這種方式啟用一個子shell並且指定這個子shell為執行這個程式的命令直譯器。這個程式檔案的屬性不一定必須為可執行。這種方式的用途在:你正在在一種shell下工作,同時想要執行用其他shell命令語言寫的shell程式十分有用。
你也可以在你的shell程式的第一行前加入! usrbin shell_name來指定命令列直譯器,這樣如果你當前正在POSIX shell下工作,但是想要執行一個C shell的指令碼,你的C shell程式的第一行應該為:
#!usrbincsh
雖然shell程式沒有偵錯程式,命令:
sh –x shell_program arguments
會在執行每一行時,先在螢幕上列印出shell程式的每一行。這允許你看到shell如何進行檔名產生,變數替代,和命令替代。這個選項對發現打字錯誤十分有幫助。[@more@]
來源:hpuxZone 編輯:丁克川 2003.11.05 1918?
--------------------------------------------------------------------------------
1.1 shell程式設計概述
shell程式是一個包含UNIX命令的普通檔案。
這個檔案的許可許可權至少應該為可讀和可執行。
在shell提示符下鍵入檔名就可執行shell程式。
shell程式可以透過三種方式接受資料:
??-環境變數
??-命令列引數
??-使用者的輸入
shell是一個命令直譯器,它會解釋並執行命令提示符下輸入的命令。但是,你可能想要多次執行一組命令,shell提供了一種功能,讓你將這組命令存放在一個檔案中,然後你可以象unix系統提供的其他程式一樣執行這個檔案,這個命令檔案就叫做shell程式或者shell指令碼。當你執行這個檔案,它會象你在命令列輸入這些命令一樣地執行這些命令。為了讓shell能讀取並且執行你的shell程式,shell指令碼的檔案許可權必須被設定為可讀和可執行。為了讓shell可以找到你的程式,你可以選擇輸入完全路徑名,或者將這個指令碼的路徑放在於你的PATH環境變數指定的路徑列表中。許多的使用者會在他們的HOME目錄下建立一個bin目錄來存放他們自己開發的script,然後將$HOMEbin加入到他們的PATH環境變數中。你可以寫出非常複雜的shell指令碼,因為shell指令碼支援變數、命令列引數、互動式輸入、tests(判斷))、branches(分支),和loops(迴圈)等複雜的結構。
1.2 shell程式舉例
$ cat myprog
#this is the program myprog
date
ls –F
$ myprog
要建立一個shell程式,考慮進行以下步驟:
$ vi myprog ?????一個包含shell命令的程式。
#this is the program myprog
date
ls –F
$ chmod +x myprog 增加檔案的執行模式
$ myprog
Thu Jul 11 1110 EDT 1994
F1 f2 memo myprog
首先使用一個文字編輯器建立一個shell程式myprog。在程式執行之前,這個檔案必須被賦予可執行的許可權。然後在命令提示符下輸入這個程式名,如上例所示,當myprog執行的時候,一個子shell會被建立。這個子shell會從shell程式檔案myprog讀取輸入而不是從命令列讀取輸入,這個shell中的每個命令的執行都會建立一個子shell。一旦所有的命令都被執行,所有的子shell會中止,然後會返回到原始的父shell。
Shell程式中的註釋:
推薦在shell程式中提供註釋語句來註明程式的內容。註釋由一個#符號開始,Shell不會去執行任何在#之後的語句。#能夠出現在命令列的任何位置。
注意:你不可以給shell程式取名為test因為test是一個內部的shell命令。
1.3 傳遞資料給shell程式
$ color = lavender
$ cat color1
echo you are now running program color1
echo the value of the variable color is $color
$ chmod +x color1
$ color1
you ar now running program color1
the value of the variable color is
$ export color
$ color1
you are now running program color1
the value of the variable color is lavender
傳遞資料給shell指令碼的一種方法就是透過環境。在上例中,本地變數color被賦值為lavender,然後建立了shell程式color1;然後更改為可執行許可權;然後這個shell程式被執行,color1指令碼的意圖是顯示color變數的值,但是由於color是一個本地變數,屬於父shell私有的,執行color1產生的子shell不能識別這個變數,因此不能列印出它的值,而當color被輸出到環境中就可以被子shell讀取。
同樣,由於shell程式不能夠更改父程式的環境,對一個子程式中的環境變數重新賦值不會影響到父程式環境中的值。如以下的shell指令碼中的color2。
echo The original value of the variable color is $color
ech0 This program will set the value of color to amber
color=amber
echo The value of color is now $color
echo When your program concludes,display the value of the color variable
觀察在你設定了color的值後有什麼變化。輸出這個變數,然後執行color2
$ export color=lavender
$ echo $color
lanvender
$ color2
The original value of the variable color is lavender
The program will set the value of color to amber
The value of volor is now amber
When your progam concludes, display the value of the color variable,
$ echo $color
lanvender
1.4 shell 程式的引數
命令列:
?$ sh_program arg1 arg2 . . . argx
???$0 ???$1?? $2 ....? $X
例子:
$ cat color3
echo you are now running program $0
echo The value of command line argument #1 is $1
echo The value of command line argument #2 is $2
$ chmod +x color3
$ color3 red green
You are now running program color3
The value of command line argument #1 is red
The value of command line argument #2 is green
大多數的UNIX系統命令可以接收命令列引數,這些引數通常告訴命令它將要操作的檔案或目錄(cp f1 f2),另外指定的引數擴充套件命令的能力(ls –l),或者提供文字字串(banner hi there)。
命令列引數對shell程式同樣有效,使用這種方式傳送資訊給你的程式十分方便。透過開發一個接收命令列引數的程式,你可以傳遞檔案或者目錄命令名給你的程式處理,就像你執行UNIX系統命令一樣,你也可以定義命令列選項來讓命令列使用shell程式額外的功能。
在shell程式中的命令列引數與引數在命令列的位置相關,這樣的引數被稱為位置引數,因為對每一個特殊變數的賦值依靠一這些引數在命令列中的位置,變數的變數名對應變數在命令列中的位置,因此這些特殊的變數名為數字0,1,2等,一直到最後的引數被傳遞,變數名的存取也透過同樣的方法,在名字前面加上$ 符號,因此,為了存取你的shell程式中的命令列引數,你可以應用$0,$1,$2等等。在$9以後,必須使用括號:$(10),$(11),否則,shell會將$10看成是$1後面跟一個0。而$0會一直儲存程式或命令的名字
以下的shell程式會安裝一個程式,這個程式作為一個命令列引數被安裝到你的bin目錄:首先建立程式my_install,注意目錄$HOMEbin應該預先存在。
$ cat my_install
echo $0 will install $1 to your bin directory
chmod +x $1
mv $1 $HOMEbin
echo Installation of $1 is complete
ctrl + d
$ chmod +x my_intalll
$ my_install color3
my_install will install color3 to your bin directory
Installation of color3 is complete
$
這個例子中,程式指明第一個命令列引數為一個檔名,然後加上執行許可權,然後移動到你當前目錄下的bin目錄下。
記住UNIX系統的慣例是存貯程式在bin的目錄下。你也許想要在你的HOME目錄下建立一個bin目錄,在這個目錄下你可以儲存你的程式檔案,記住要將你的bin目錄放在PATH環境變數中,這樣shell才會找到你的程式。
1.5 一些特殊shell變數- #和
# ???命令列引數的數量
???完全的引數字串
例子:
$ cat color4
echo There are $#?comand line argument
echo They are $
ehco The first command line argument is $1
$ chmod +x color4
$ color4 red green yellow blue
They are 4 command line arguments
They are red green yellow blue
The first command line argument is red
$
至今為止我們看到的shell程式都不是很靈活,如color3需要輸入兩個正確的引數而my_install只需要一個。通常在建立一個接收命令列引數的shell程式的時候,你想要使用者輸入一個引數的變數號碼。你同時要程式執行成功,不管使用者鍵入1個引數或是20個引數。當處理變數引數列表的時候,特殊shell變數會提供你許多的靈活性。透過$#你可以知道有多少引數已經被輸入,透過$可以存取全部的引數列表,而不管引數的數量。請注意引數($0)不在$這個引數列表裡。
每一個命令列引數都是互相獨立的,你可以透過$集中檢索這些引數,也可以透過$1,$2,$3等等來獨立的檢索這些引數。
一個可以接收多個命令列引數的安裝程式的例子:
$ cat my_install2
echo $0 will install $# files to your bin directory
echo The files to be installed are $
chmod +x $
mv $ $HOMEbin
echo Installaton is complete
ctril + d
$ chmod +x my_install2
$ my_install2 color1 color2
my_intall2 will install 2 files to your bin directory
The files to be installed are color1,color2
Intallaiton is complete
這個安裝程式更加靈活,如果你有多個檔案要安裝,你僅需要執行這個程式一次,只要一次輸入多個名字即可。
非常重要的是:如果你計劃傳遞整個引數的字串給一個命令,這個命令必須能夠接收多個引數。
在以下的指令碼中,使用者提供一個目錄名作為一個命令列引數。程式會更改到指定的目錄,顯示當前的位置,並且列出內容。
$ cat list_dir
cd $
echo You are in the $(pwd) directory
echo The contents of the directory are
ls –F
$ list_dir dir1 dir2 dir3
sh cd bad argument count
由於cd命令不能同時進入到多個目錄中,這個程式執行會出錯。
1.6 shift 命令
向左移動所有的在中的字串n個位置
#的數目減少n個(n的預設值是1)
語法:shift [n]
例子:
$ cat color5
orig_args=$
echo There are $# command line arguments
echo They are $
echo Shifting two arguments
shift 2
echo There are $# comand line arguments
echo They are $
echo Shifting two arguments
shift 2; final_args=$
echo Original arguments are $orig_args
echo Final arguments are $final_args
shift命令會重新分配命令列引數對應位置引數,在shift n以後,所有的中的引數會向左移動n個位置。同時$#會減n。預設的n為1。Shift命令不會影響到引數0的位置。一旦你完成一次移動,被移出命令列的引數會丟失。如果你想在你的程式中引用這個引數,你需要在執行shift之前存貯這個引數到一個變數中。
Shift命令可以用於:存取一組引數的位置,例如一系列的x,y的座標
從命令列刪除命令選項,假定選項在引數之前。
例子:
$ color5 red green yellow orange black
There are 6 command line arguments
They are red green yellow blue orange black
Shifting two arguments
There are 4 command line arguments
They are yellow blue orange black
Shiftging two arguments
Original arguments are red green yellow blue orange black
Final argument are orange black
$
1.7 read 命令
語法:
read variable [variable......]
例子:
$ cat color6
echo This program prompts for user input
echo “please enter your favorite two colors - c”
read color_a color_b
echo The colors you entered are $color_b $color_a
$ chmod +x color6
$ color6
This program prompts for user input
Please enter your favorite two colors - red blue
The colors you entered are blue red
$ color6
This program prompts for user input
Please enter you favorite two colors - red blue tan
The color you enterd are blue tan red
如果使用命令列引數傳遞資訊程式序,在命令執行之前使用者必須知道正確的語法。有一種情況,你想要在使用者執行程式的時候提示他輸入這些引數。read命令就是用來在程式執行的時候收集終端鍵入的資訊。
通常會使用echo命令來給使用者一個提示,讓他知道程式正在等待一些輸入,同時通知使用者應該輸入的型別。因此,每一個read命令應該在echo命令後面。
read命令會給出一個變數名的列表,使用者在提示符下輸入會給這些變數賦值(變數之間以空格分隔)。如果read命令定義的變數比輸入的詞要多,多出的變數會被賦空值。如果使用者輸入的詞要比變數多,剩餘的資料會賦給列表中的最後一個變數。
一旦被賦值,你就可以象其他的shell變數一樣存取這些變數。
注意:不要混淆位置引數和變數read。位置引數在命令被啟用時直接在命令列中使用,而read命令給變數賦值是在程式執行之中,使用者響應輸入的提示而給變數賦值。
以下例子提示使用者輸入要被安裝的檔名:
$ cat my_install3
echo $0 will install files into your bin directory
echo “Enter the names of the files - c”
read filenames
mv $filenames $HOMEbin
echo Instllation is complete
ctrl + d
$ chmod +x my_install13
$ my_install13
my_install13 will install files into your bin directory
Enter the names of the files - f1 f2
Installaton is complete
這個安裝指令碼會提示使用者輸入需要chmod並移動到$HOMEbin的檔案的檔名。這個程式給使用者更多的關於應該輸入資料情況的指引。而不像install2中使用者必須在命令列中提供檔名,使用者使用程式不需要特殊的語法,程式讓使用者確切地知道要輸入什麼。所有的輸入的檔名都會被賦值給變數filenames。
1.8 另外的技術
#號開始的文件為註釋部分。
sh shell_program argumetns?
shell_program 的屬性可以不是可執行的。
shell_program 必須是可讀的。
sh –x shell_program arguments
每一行在被執行前被列印出來。
在除錯程式時有用處。
在shell程式中,#符號的意思是後面是一段註釋,而shell會自動忽略#符號以後直到一個回車符號為止的所有字元。
執行一個shell程式的另外一種方法是
sh shell_program arguments
這種方式啟用一個子shell並且指定這個子shell為執行這個程式的命令直譯器。這個程式檔案的屬性不一定必須為可執行。這種方式的用途在:你正在在一種shell下工作,同時想要執行用其他shell命令語言寫的shell程式十分有用。
你也可以在你的shell程式的第一行前加入! usrbin shell_name來指定命令列直譯器,這樣如果你當前正在POSIX shell下工作,但是想要執行一個C shell的指令碼,你的C shell程式的第一行應該為:
#!usrbincsh
雖然shell程式沒有偵錯程式,命令:
sh –x shell_program arguments
會在執行每一行時,先在螢幕上列印出shell程式的每一行。這允許你看到shell如何進行檔名產生,變數替代,和命令替代。這個選項對發現打字錯誤十分有幫助。[@more@]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/503782/viewspace-983114/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux Shell程式設計(1)——shell程式設計簡介Linux程式設計
- shell程式設計—簡介(一)程式設計
- BASH SHELL 程式設計簡介(轉)程式設計
- Shell程式設計 --- Shell介紹程式設計
- shell 程式設計簡記程式設計
- Shell程式設計——極簡教程程式設計
- Linux程式設計-11.Shell Script(bash)--(1)簡介(轉)Linux程式設計
- shell簡介之bash程式設計之引數說明(轉)程式設計
- windows程式設計簡介Windows程式設計
- shell程式設計–bash變數介紹程式設計變數
- IO程式設計和NIO程式設計簡介程式設計
- 結對程式設計簡介程式設計
- Shell簡介
- shell程式設計程式設計
- Scala 簡介 [摘自 Scala程式設計 ]程式設計
- Linux Socket 程式設計簡介Linux程式設計
- WebGL程式設計指南(1)簡介Web程式設計
- Shell--簡介
- 函數語言程式設計簡介函數程式設計
- .NET泛型程式設計簡介 (轉)泛型程式設計
- Windows Shell 程式設計Windows程式設計
- shell程式設計(轉)程式設計
- shell程式設計二程式設計
- shell程式設計五程式設計
- Shell程式設計-shell變數1程式設計變數
- Bourne Shell及shell程式設計(轉)程式設計
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- shell簡介入門bash程式設計之執行(轉)程式設計
- 01 Python3程式設計之程式設計語法簡介Python程式設計
- 併發程式設計基礎——JMM簡介程式設計
- 響應式程式設計簡介之:Reactor程式設計React
- js DSL超程式設計簡單介紹JS程式設計
- JavaScript 模組化程式設計簡單介紹JavaScript程式設計
- 伯樂線上程式設計挑戰簡介程式設計
- Gtk+/Glade程式設計(一)--簡介程式設計
- Linux 程式設計工具簡單介紹Linux程式設計
- 面向方面程式設計的Annotation簡介(轉)程式設計
- SpringBoo+HTMX程式設計簡介Spring程式設計