2、shell條件測試,運算符,選擇結構,for循環結構

一、shell條件測試      man bash  //查看幫助

條件測試的命令

test 選項 文件名或目錄名

[ 選項 文件名或目錄名 ]


例:

[ -e /etc/passd ]


文件狀態

-f              //判斷是不是文件,是文件爲真

-d //判斷是不是目錄,是目錄爲真

-e//判斷是不是存在,存在爲真

-r//判斷是否可以閱讀,可以閱讀爲真

-w//判斷是否可寫,可寫爲真

-x//判斷是否可執行,可執行爲真

-l//判斷是否爲鏈接,是鏈接爲真



數值比較(整數比較)

[ 數值1 選項 數值2 ]

test 數值1 選項 數值2


等於 -eq              

不等於 -ne   

小於 -lt

小於等於 -le

大於 -gt

大於等於  -ge


h

[ 字符選項比較 ]


等於 ==                 

不等於 !=

-z 字串爲空爲真

! -z 字串不爲空爲真


例:

[ $USER==root ] && echo "admin"

[ -z $w  ]



邏輯比較(判斷時,是2個或2個以上條件時使用邏輯判斷)

邏輯與  &&  或用 -a   多個條件要同時成立

邏輯或  ||  或用 -o   或用多個條件只要有一個條件成立就可以

邏輯非  !  取號  -z爲空  !-z 加了歎號也就是取反不爲空


[ 5 -gt 6 ] || [ 7 lt 8 ] || [ 0 -lt 1 ]

[ 5 -gt 6 -o 7 -lt 8 -o 0 -lt 1 ]



流程控制 是否執行 取決於條件判斷的判斷結果是否爲真。條件判斷結果爲真,

流程控制纔會執行,反之不會執行。對不同的對象做判斷,要用不同的判斷方式和選項



二、Shell運算符與運算命令

+ - * / % 

++ --

+= -= *= /= %=


運算命令

expr 數值1 運算符 數值2


例1:

#!/bin/bash

#計算用戶從終端輸入的任意2個數的和

read -p "請輸入第一個數" num1

read -p "請輸入第二個數" num2

sum=`expr $num1 + $num2`

echo "$num1 + $num2 = $sum"


例2

expr 只能做整數運算 默認返回計算結果

#expr num1 + num2 - num3 \* num4        //乘號要做轉義

#expr 10 % 8

#a=10

#b=20

#sum=`expr $a + $b`


++ 自加運算 每次數字自動加1

-- 自減運算 每次數字自動減1

let 只做運算,不返回計算結果

let 變量運算符


i=1

let i++     //i=i+1

echo $i


j=10

let j--    //j=j-1

echo $j 


+= -= *- /= %=

  

i=10

let i+=2   //i=i+2

echo $i


加法算的第二種運算方式 $(()) $[] 的使用

#echo $((10*30))

#x=10

#b=20

#echo $((x*y))

#echo $[10*30]


i=10

echo $((++i))    //先執行運算,後參與程序

i=10

echo $((i++))    //先參與程序,後執行運算



Shell裏的流程控制

選擇結構 if    (只有條件判斷結果爲真時,才執行相應的操作)


單分支

if 條件

   條件判斷成立時,要執行的操作

   .......

fi


例:

read -p "please input ip address" addr

if [ -z $addr ];then

echo "你沒有輸入要ping的ip地址"

exit

fi

ping -c 3 $addr &> /dev/null

if [ $? -eq 0 ];then

echo "主機在線"

fi

echo "script over"



雙分支

if 條件測試命令;then

條件判斷成立時,要執行的操作

.........

else

條件判斷不成立時,要執行的操作

.........

fi


#!bin/bash

service sshd status &> /dev/null

if [ $? -eq 0 ];then

echo "sshd in running"

else

service sshd start

fi


多分支

if 條件測試命令1;then

   條件測試成立時執行的命令序列

   ......

   ......

elif 條件測試命令2;then

     條件測試成立時執行的命令序列

     ......

     ......


elif 條件測試命令3;then

     條件測試3成立時執行的命令序列

     ......

     ......

elif 條件測試命令N;then 

     條件測試N成立時執行的命令序列

     ......

     ......

else

     以上所有的條件判斷都成立時執行的命令

     ......

     ......

fi



循環結構(反覆執行相同操作時,使用循環結構)

for語法格式


for 變量名 in 變量值列表

do

當變量值列表有值賦給變量名時,執行的語句塊

......

.....

doneasswd


#!/bin/bash

#for i in 1 2 3 4 5 

#for i in `seq 30 45`

#for i in `seq 254`

#for i in `seq 10 2 30`

#for i in {1..30}

#for i in {a..z} 

for i in `head /etc/`

for i in `ls /shell/*.sh`

do

echo $i

done



while

C-for

until


分支結構 case   (根據變量值的匹配結果執行相應的操作)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章