學習目標
位置引數
內部引數
如同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:~$ vitest1
#! /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...