1.test測試命令
test命令用于檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試,其測試符和相應的功能分別如下:
(1)數值測試:
-eq:等于則為真
-ne:不等于則為真
-gt:大于則為真
-ge:大于等于則為真
-lt:小于則為真
-le:小于等于則為真
(2)字符串測試:
=:等于則為真
!=:不相等則為真
-z 字符串:字符串長度偽則為真
-n 字符串:字符串長度不偽則為真
(3)文件測試:
-e 文件名:如果文件存在則為真
-r 文件名:如果文件存在且可讀則為真
-w 文件名:如果文件存在且可寫則為真
-x 文件名:如果文件存在且可執行則為真
-s 文件名:如果文件存在且至少有一個字符則為真
-d 文件名:如果文件存在且為目錄則為真
-f 文件名:如果文件存在且為普通文件則為真
-c 文件名:如果文件存在且為字符型特殊文件則為真
-b 文件名:如果文件存在且為塊特殊文件則為真
另外,Linux還提供了與(“!”)、或(“-o)、非(“-a”)三個邏輯操作符用于將測試條件連接起來,其優先級為:“!”最高,“-a”次之,“-o”最低。同時,bash也能完成簡單的算術運算,格式如下:
$[expression]
例如:var1=2
var2=$[var1*10+1]
則:var2的值為21。
2.if條件語句
if [ -x /sbin/quotaon ]; then
echo "Turning on Quota for root filesystem"
/sbin/quotaon /
elif [ -x /sbin/quotaon ]; then
/usr/bin/bash
else
echo "ok"
fi
3.for 循環
#!/bin/sh
WORD="a b c d e f g h i j l m n o p q r s t u v w x y z"
for i in $WORD ; do
echo $i
done
#!/bin/sh
FILES=`ls /txt/*.txt`
for txt in $FILES ; do
doc=`echo $txt | sed "s/.txt/.doc/"`
mv $txt $doc
done
4.while和until 循環
#!/bin/sh
while [ -f /var/run/ppp0.pid ] ; do
killall pppd
done
#!/bin/sh
until [ -f /var/run/ppp0.pid ] ; do
sleep 1
done
Shell還提供了true和false兩條命令用于建立無限循環結構的需要,它們的返回狀態分別是總為0或總為非0
5.case 條件選擇
#!/bin/sh
case $1 in
start | begin)
echo "start something"
;;
stop | end)
echo "stop something"
;;
*)
echo "Ignorant"
;;
esac
case表達式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。
6.無條件控制語句break和continue
break 用于立即終止當前循環的執行,而contiune用于不執行循環中后面的語句而立即開始下一個循環的執行。這兩個語句只有放在do和done之間才有效。
7.函數定義
在shell中還可以定義函數。函數實際上也是由若干條shell命令組成的,因此它與shell程序形式上是相似的,不同的是它不是一個單獨的進程,而是shell程序的一部分。函數定義的基本格式為:
functionname
{
若干命令行
}
調用函數的格式為:
functionname param1 param2 ……
shell函數可以完成某些例行的工作,而且還可以有自己的退出狀態,因此函數也可以作為if、while等控制結構的條件。在函數定義時不用帶參數說明,但在調用函數時可以帶有參數,此時shell將把這些參數分別賦予相應的位置參數$1、$2、...及$*。