linux中有好多中不同的shell,但是通常我們使用bash (bourne again shell) 進行shell程式設計,因為bash是免費的並且很容易使用。所以在本文中筆者所提供的指令碼都是使用bash(但是在大多數情況下,這些指令碼同樣可以在 bash的大姐,bourne shell中執行)。
如同其他語言一樣,通過我們使用任意一種文字編輯器,比如nedit、kedit、emacs、vi
等來編寫我們的shell程式。
程式必須以下面的行開始(必須方在檔案的第一行):
#!/bin/sh
符號#!用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用/bin/sh來執行程式。
當編輯好指令碼時,如果要執行該指令碼,還必須使其可執行。
要使指令碼可執行:
chmod +x filename
然後,您可以通過輸入: ./filename 來執行您的指令碼。
注釋 在進行shell程式設計時,以#開頭的句子表示注釋,直到這一行的結束。我們真誠地建議您在程式中使用注釋。如果您使用了注釋,那麼即使相當長的時間內沒有使用該指令碼,您也能在很短的時間內明白該指令碼的作用及工作原理。
變數 在其他程式語言中您必須使用變數。在shell程式設計中,所有的變數都由字串組成,並且您不需要對變數進行宣告。要賦值給乙個變數,您可以這樣寫:
變數名=值
取出變數值可以加乙個美元符號($)在變數前面:
?
1
2
3
4
5
6
#!/bin/sh
#對變數賦值:
a=
"hello world"
# 現在列印變數a的內容:
echo
"a is:"
echo
$a
複製**
**如下:
#!/bin/sh
for var in a b c ; do
echo "var is $var"
done
下面是乙個更為有用的指令碼showrpm,其功能是列印一些rpm包的統計資訊:
?
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
# list a content summary of a number of rpm packages
# usage: showrpm rpmfile1 rpmfile2 ...
# example: showrpm /cdrom/redhat/rpms/*.rpm
for
rpmpackage
in
$*;
do
if
[ -r
"$rpmpackage"
];
then
echo
"*************** $rpmpackage **********===="
rpm -qi -p $rpmpackage
else
echo
"error: cannot read file $rpmpackage"
fi
done
這裡出現了第二個特殊的變數$*,該變數包含了所有輸入的命令列引數值。如果您執行showrpm openssh.rpm w3m.rpm webgrep.rpm
此時 $* 包含了 3 個字串,即openssh.rpm, w3m.rpm and webgrep.rpm.
引號 在向程式傳遞任何引數之前,程式會擴充套件萬用字元和變數。這裡所謂擴充套件的意思是程式會把萬用字元(比如*)替換成合適的檔名,它變數替換成變數值。為了防 止程式作這種替換,您可以使用引號:讓我們來看乙個例子,假設在當前目錄下有一些檔案,兩個jpg檔案, mail.jpg 和tux.jpg。
這將列印出"mail.jpg tux.jpg"的結果。
引號 (單引號和雙引號) 將防止這種萬用字元擴充套件:
這將列印"*.jpg" 兩次。
單引號更嚴格一些。它可以防止任何變數擴充套件。雙引號可以防止萬用字元擴充套件但允許變數擴充套件。
#!/bin/sh
echo $shell
echo "$shell"
echo '$shell'
執行結果為:
/bin/bash
/bin/bash
$shell
最後,還有一種防止這種擴充套件的方法,那就是使用轉義字元——反斜桿:
這將輸出:
shell入門基礎
shell基礎知識 shell是linux的外殼,它包在linux核心的外面,為使用者和核心之間的互動提供乙個介面 當使用者下達指令給作業系統,實際上是把指令告訴給shell,經過shell解釋,處理後核心做出相應的動作 系統的回應和輸出資訊由shell處理,然後顯示在使用者螢幕上 檢視系統預設sh...
shell基礎和簡單入門
1 shell簡介 shell提供了使用者和核心進行互動操作的一種介面,它接收使用者的命令並送入核心執行。shell指令碼語言是linux unix系統上應用廣泛的實用程式語言,所以對於任何乙個希望精通linux作業系統的人,掌握shell指令碼知識都是非常必要的。而它的特點是容易學習,但是精通很難...
shell入門 基礎命令篇
diff 命令 diff 命令是用來比較兩個檔案或目錄的不同 diff 在比較檔案過程中結果讀取方式 num1 num2 a c d num3,num4 num1,num2 表示在第乙個檔案中的行數 a 表示新增 add c 表示更改 change d 表示刪除 delete 表示第乙個檔案中的內容...