shell程式設計

2021-09-21 05:21:43 字數 4090 閱讀 3162

說到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 形式儲存所有輸入的命令列引數 以 ...