}}
Shell變量名使用的特殊字符
$# 傳送給命令Shell的參數序號
$- 在Shell啟動或使用set命令時提供選項
$? 上一條命令執行後返回的值
$$ 當前shell的進程號
$! 上一個子進程的進程號
$@ 所有的參數,每個都用雙括號括起
$* 所有參數,用雙括號括起
$n 位置參數值,n表示位置
當前shell名
echo "$HOME $PATH"
結果顯示$/u/ice_walk/bin:/etc:/usr/bin
而
echo '$HOME $PATH' 結果顯示$HOME $PATH
shell的逃逸符是一個"\",表示其後的字符不具有特殊的含義或不是shell的函數
echo $HOME $PATH
結果顯$$HOME /bin:/etc:/usr/bin:
可以用變量和其他字符組成新的字,例如:
SUN=sun
echo $day
sunday
用戶也可以在命令行上同時對多個變量賦值,賦值語句之間用空格分開:
X=x Y=y
注意變量賦值是從右到左進行的
}}}
expr命令將把一個算術表達式作為參數,通常形式如下:
expr [數字] [操作符] [數字]
由於Shell是按字符形式存儲變量的,所以用戶必須保證參加算術運算的操作數必須為數值。下面是有效的算術操作符:
+ 兩個整數相加
- 第一個數減去第二個數
* 兩整數相乘
/ 第一個整數除以第二個整數
% 兩整數相除,取余數
用戶不能單純使用"*"做乘法,若輸入:
$expr 4*5
系統將會報錯,因為Shell看到"*"將會首先進行文件名替換。正確形式為:
$expr 4 \* 5
結果顯示:20
{{{{shell樣例 注意:}}}}
#!/bin/bash
flag=1
top=10000
date >>/backup1/time.txt
while [ $flag -lt $top ] -lt是小於 注意 需要用[ ],且注意 [後 和]後,都有空格
do
cd /backup1/check
dd if=/dev/zero of=test_$flag.txt bs=1024 count=2000000
rm -f test_$flag.txt
flag=`expr $flag + 1` 注意 左邊 需要用flag而不是$flag表示 給變量值,特別注意是=號,前後 不能有空格,而且 expr $flag + 1 需要用執行符``包括
done
}}}}}
echo命令可以使用一些特殊的逃逸字符進行格式化輸出,下面是這些字符及其含義:
\b Backspace
\c 顯示後不換行
\f 在終端上屏幕的開始處顯示
\n 換行
\r 回車
\t 制表符
\v 垂直制表符
\ 反斜框
nnn 用1,2或3位8進制整數表示一個ASCII碼字符
echo -en $"\t\tPress 'I' to enter interactive startup."
-e表示 允許\有新的意義
-n表示 不換行 如果 和 “”內的參數 有沖突,以“”內為准
}}
測試字符串間的關系
有關串的操作符如下:
str1 = str2 當兩個串有相同內容、長度時為真
str1 != str2 當串str1和str2不等時為真
-n str1 當串的長度大於0時為真(串非空)
-z str1 當串的長度為0時為真(空串)
str1 當串str1為非空時為真
if [ -z "$IN_INITLOG" ]; 字符使用時 用""
有關文件的測試
使用test進行的第三類測試是測試文件的狀態,用戶可以測試文件是否存在,是否可寫以及其他文件屬性。下面是文件測試時使用的選項。注意只有文件存在時,才有可能為真。
-r file 用戶可讀為真
-w file 用戶可寫為真
-x file 用戶可執行為真
-f file 文件為正規文件為真
-d file 文件為目錄為真
-c file 文件為字符特殊文件為真
-b file 文件為塊特殊文件為真
-s file 文件大小非0時為真
-t file 當文件描述符(默認為1)指定的設備為終端時為真
復雜的條件測試(and 、or 、not)
-a 與
-o 或
! 非
就是組合條件了,任何高級語言中都有的(NOT 、AND 、OR),例如:
$test -r em.null -a -s em.null
$echo $?
結果顯示:1
說明了em.null並不是可讀並且非空的文件
測試兩個整數之間關系
test命令與expr命令一樣,也可以把字符轉變成整數,然後對其操作。test命令對兩個數進行比較,使用的操作符如下:
int1 -eq int2 兩數相等為真 equal (eq)
int1 -ne int2 兩數不等為真 not equal (ne)
int1 -gt int2 int1大於int2為真 great (gt)
int1 -ge int2 int1大於等於int2為真 great equal (ge)
int1 -lt int2 int1小於int2為真 less than (lt)
int1 -le int2 int1小於等於int2為真 less than equal (le)
本階段 小程序:
使用while循環使程序執行一次可以備份多個用戶指定的目錄。代碼如下:
echo "歡迎使用備份小程序"
ANS=Y
while [ $ANS = Y -o $ANS = y ]
do
echo _
#讀目錄名
echo "輸入要備份的目錄名:\c"
read DIR
if [ ! -d $DIR ]
then
echo "$DIR不是一個目錄!"
exit 1
fi
cd $DIR
echo "請選擇:"
echo _
echo "1 恢復數據到 $DIR"
echo "2 備份$DIR的數據"
echo
echo "請選擇:\c"
read CHOICE
case "$CHOICE" in
1) echo "恢復中… …"
cpio -i 2) echo "備份中… …"
cpio -o >/dev/rmt0;;
*) echo "選擇無效"
esac
if [ $? -ne 0 ]
then
echo "cpio執行過程中出現問題"
exit 2
fi
echo "繼續別的目錄嗎?(Y/y)\c"
read ANS
done
2。
if [ $# -eq 0 ]
then
echo "Usage:x_shift2.sh 參數"
exit 1
fi
3。
I=1
while [ $I -lt 10 ]
do
{
echo "$I\c"
I=`expr $I + 1`
if [ $I -eq 3 ]
then
continue
fi
if [ $I -eq 7 ]
then
break
fi
}
done