3、在Shell程式中使用的引數

Ruthless發表於2013-06-21

學習目標
位置引數
內部引數

如同ls命令可以接受目錄等作為它的引數一樣,在Shell程式設計時同樣可以使用引數。Shell程式中的引數分為位置引數和內部引數等。

12-3-1 位置引數
由系統提供的引數稱為位置引數。位置引數的值可以用$N得到,N是一個數字,如果為1,即$1。類似C語言中的陣列,Linux會把輸入的命令字串分段並給每段進行標號,標號從0開始。第0號為程式名字,從1開始就表示傳遞給程式的引數。如$0表示程式的名字,$1表示傳遞給程式的第一個引數,以此類推。

12-3-2  內部引數
上述過程中的$0是一個內部變數,它是必須的,而$1則可有可無,最常用的內部變數有$0、$#、$?、$*,它們的含義如下。
$0: 含命令所在的路徑。
$#: 傳遞給程式的總的引數數目。
$?: Shell程式在Shell中退出的情況,正常退出返回0,反之為非0值。
$*: 傳遞給程式的所有引數組成的字串。

例項:編寫一個Shell程式,用於描述Shell程式中的位置引數為:$0、$#、$?、$*,程式名為test1,程式碼如下:

root@ubuntu:~$ vi test1
#! /bin/sh
 
echo "Program name is $0";
echo "There are totally $# parameters passed to this program";
echo "The last is $?";
echo "The parameter are $*";
 
root@ubuntu:~$ ./test1 this is a test program //傳遞5個引數
執行後的結果如下:
Program name is ./test1 //給出程式的完整路徑和名字
There are totally 5 parameters passed to this program //引數的總數
The last is 0 //程式執行效果
The parameter are this is a test program  //返回由引數組成的字串
 

注意:命令不計算在引數內。
        
例項:利用內部變數和位置引數編寫一個名為test2的簡單刪除程式,如刪除的檔名為a,則在終端中輸入的命令為:test a。
分析:除命令外至少還有一個位置引數,即$#不能為0,刪除不能為$1,程式設計過程如下。

1)、用vi編輯程式
root@ubuntu:~$ #vi test2
#! /bin/sh
 
if test $# -eq 0
    then echo "Please specify a file!"
else
    gzip $1 //現對檔案進行壓縮
    mv $1.gz $HOME/dustbin //移動到回收站
    echo "File $1 is deleted !"          
fi
 
2)、設定許可權
root@ubuntu:~$ chmod +x test2
 
3)、執行
root@ubuntu:~$ ./test2
Please specify(指定) a file!
root@ubuntu:~$ ./test2 a
gzip: a: No such file or directory
mv: cannot stat `a.gz': No such file or directory
File a is deleted !
root@ubuntu:~$ touch a
root@ubuntu:~$ ./test2 a  (如果a檔案在當前目錄下存在) 
File a is deleted !

 

 

相關文章