說到shell程式設計之前,先介紹變數,變數在shell程式設計中是很重要。變數無非就是一堆可變化的值。
變數的的宣告遵循以下幾條規則:
一,不能跟系統中的變數名重名。如path是系統變數,在宣告時不要也用path當作變數名。
二,不能以數字開關,12user=bingo這是錯誤的,最前面不是數字的話,就認為合法,當然變數名只有二種情況,要麼全部是英文,要麼是英文跟數字組合。等號的兩邊不能有空格,username= bingo這種情況宣告的username是空值,且會把bingo當作命令來執行 ,username = bingo 這種情況會username當作命令來執行 ,username =bingo這種情況會username當作命令來執行。
三,變數內容沒有限制,如果變數內容裡還有變數,則必須用雙引號,不能會出現變數無法替換,如果變數內容有特殊字元則需用\這個跳脫字元將它原來的意義給注釋掉,使它變成乙個普通的字元來使用。
四,取消變數用unset,如unset username.
對變數做基本的介紹下面介紹三種條件測試
(1) test expresstion :用於檢查檔案與比較有效值
(2) [ expreesstion ](判斷符號):與test作用一樣,在指令碼中這種寫法很常見
(3) ` expresstion `:一般判斷常數之間的大小
(4)命令執行有兩種狀態:一種叫做命令執行的結果,一種是命令執行結果的狀態返回值,
(5)命令的引用兩種方式``與$(): echo 「kernel-`uname -r`" 與echo "kernel-$(uname -r)」。(``反單號,在esc鍵的下面)效果都一樣
(6)算術運算:sum=$(($var1+$var2))與sum=$[$var1+$var2]效果一樣
(7)位置引數:執行指令碼為$0這個變數,第乙個接的引數是$1,第二個是$2,依次累推
下面介紹if的用法。if 用於條件判斷。
1, if 條件測試 ;then
語句...
fi (表示結束if語句)
(1) if test 2 -lt 3;then
echo "this is right."
fi(2)if [ 2 -lt 3 ];then (注意要與[ ]之間有空格
echo "this is right"
fi(3) if [[ 2<3 ]];then
echo 「this is right」
fi2,if 條件測試;then(如果條件測試返回的值為真,則執行語句一,否則執行語句二)
語句一....
else
語句二....
fi(1)if [ 4 -lt 3 ];then
echo "this is right."
else
echo "this is wrong."
fi(2) if id root &> /dev/null;then(if後面可以寫命令,&> /dev/null把id命令執行的執行結果輸入到/dev/null,可把/dev/null當作黑洞,永遠都填不滿)
echo "user exist."
else
echo "user not exist."
fi3, if 條件測試1;then
語句一...
elif 條件測試2;then (elif可以有多個)
語句二...
else
語句三...
firead -p 「please input (y/n):." yn(提示使用者輸入y/n,並將值儲存在變數yn中)
if [ "$yn" = "y" -o "$yn" == "y" ];then
echo "ok,continue"
elif [ "$yn"= "n" -o "$yn"="n" ];then
echo "break."
else
echo "input error."
fi4, case常用於變數的值有多種的時候
case 變數名 in
"第乙個變數內容")
語句1....
"第二變數內容」)
語句2....
*) (*表示既不是第乙個變數內容也不是第二變數內容)
語句3.....
esac
case "$1" in($1是位置引數,
start)
service network start;;
stop)
service network stop;;
reload)
sevice network reload;;
restart)
service network restart;;
*)echo "usage: `basename $0` ";;
esac
5,for迴圈,一般用於知道要迴圈幾次。
for 變數名 in 變數值 ;do
語句1....
done
sum=0
for i in `seq 1 100`;do(seq 是表示從1到100都迴圈一次,加``表示先執行seq,得到seq命運行結果)
sum=$(($i+$sum))
let i++ (讓變數自動加1)
done
echo "total $sum."
6,while 迴圈用於變數值不固定的時
while 條件判斷;do(條件滿足時就迴圈)
語句...
done
計算從1到100偶數之和
sum=0
i=0while [ $i -le 100 ];do
sum=$(($sum+$i))
let i+=2
done
echo "total $sum"
7,until 迴圈正好與while相反,當條件不滿足時迴圈
until 條件判斷 do;
語句done
sum=0
i=0until [ $i -ge 100 ];do
sum=$(($sum+$i)
let i++
done
echo "total $sum"
8,function(函式):簡單來說實現**重複呼叫。遵循先定義後呼叫
定義函式兩種方式
(1)function fname (function 是關鍵字,fname是函式名
(2) fname ()
fuser () (定義了乙個fuser是函式名,大小寫都無所謂)
read -p "input user:" username
while [ "$username" != "quit" ];do
fuser $username(給函式傳遞引數也就是$1)
read -p "next user:" username
done
9, continue:退出當前這一次迴圈,提前進入下一次迴圈
i=0sum=0
while [ $i -le 100 ];do
if [ $[$%2] -eq 1 ];then
let i++
continue (如果i是奇數,則又從while開始迴圈)
filet sum=$(($sum+$i))
let i++
done
echo "even total: $sum"
10, break: 中斷當前迴圈
read -p "input username:" uname
while true;do(true表示不用做判斷,開始迴圈)
if id $uname &> /dev/null;then
echo 「user uid: `id -u $uname &> /dev/null`
else
echo "no a user: $uname."
firead -p "n|n for next user,others for quitting."choice
case $choice in
n|n)
read -p "a username:" uname;;
*)break ;;(中止迴圈,並退出)
esac
done
Shell程式設計 shell特性
linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...
Shell程式設計 Shell函式
shell函式 1.將命令序列按格寫在一起 2.可方便重複使用命令序列 3.shell函式定義 function 函式名 4.呼叫函式的方法 函式名 引數1 引數2 5.shell函式應用示例 1 兩個數字求和 要求 通過sum 定義函式 兩個數求和 方法一 root localhost vim d...
Shell程式設計
1 建立指令碼 vi emacs等即可 bin sh 2 shell變數 對shell來講,所有的變數的取值都是乙個字串 shell是一種解釋性語言,變數無需事先定義 shell中的系統變數 程式命令列引數的數目 儲存前乙個命令的返回值 0 當前程式名 以 1 2 形式儲存所有輸入的命令列引數 以 ...