一、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   (根据变量值的匹配结果执行相应的操作)