3 在Shell程式中使用的引數

2021-09-06 10:33:29 字數 2138 閱讀 3389

學習目標

位置引數

內部引數

如同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

aroot@ubuntu:~$ ./test2 a  (如果a檔案在當前目錄下存在)

file a is deleted !

在Shell中使用alias

以前在linux跳機上登入其他伺服器 ssh ip 為了方便,把很多伺服器的ip和業務名稱touch到了使用者主目錄下,這樣方便了好多,每次ls l 出來下就可以了,然後複製,貼上就方便了。如下圖。這樣每次複製貼上還是不是特別方便,所以行能不能輸入業務名字,直接就登入了,仍然保持著touch的檔案 ...

在程式中使用NV 3D Vision

多年前nvidia就發布了3d vision技術,能提供多種立體渲染的效果。隨著2009年的電影阿凡達所帶來的世界性3d狂潮,你是否也想在自己的程式中加入立體渲染呢?根據 vision的原理如下 注意加粗的幾個詞所透露出來的資訊。首先,你的每乙個draw call都被驅動變成了兩個draw call...

在程式中使用NV 3D Vision

多年前nvidia就發布了3d vision技術,能提供多種立體渲染的效果。隨著2009年的電影阿凡達所帶來的世界性3d狂潮,你是否也想在自己的程式中加入立體渲染呢?根據 vision的原理如下 注意加粗的幾個詞所透露出來的資訊。首先,你的每乙個draw call都被驅動變成了兩個draw call...