shell编程02-流程控制和函数

一.if语法

  1.格式:

if condition 
     then 
    statements 
[elif condition 
    then statements. ..] 
[else 
    statements ] 
fi

例: #!/bin/bash

read -p "please input your name:" NAME   ## read命令用于从控制台读取输入数据

if [ $NAME = root ]

        then

                echo "hello ${NAME},  welcome !"

        elif [ $NAME = itcast ]

                then

                        echo "hello ${NAME},  welcome !"

        else

                echo "SB, get out here !"

fi

2. 条件判断

      [ condition ]   (注意condition前后要有空格)

#非空返回true,可使用$?验证(0true>1false

#空返回false

     注意[  ]内部的=周边的空格,有区别:

 例:[root@mini scripts]# if [ a = b ];then echo ok;else echo notok;fi

notok

[root@miniscripts]# if [ a=b ];then echo ok;else echo notok;fi

ok

3. 短路(理解为三元运算符)

   [ condition ] && echo OK || echo notok

条件满足,执行&&后面的语句;条件不满足,执行|| 后面的语句

4. 条件判断组合

   注:[] [[ ]] 的区别:[[ ]] 中逻辑组合可以使用 &&  || 符号

            而[] 里面逻辑组合可以用  -a   -o

例:[root@mini ~]# if [ a = b -a b = b ]; then echo ok;else echo notok;fi

notok

[root@mini ~]# if [ a = b -o b = b ]; then echo ok;else echo notok;fi

ok

[root@mini ~]# if [[ a = b && b = b ]]; then echo ok;else echo notok;fi

notok

[root@mini ~]# if [[ a = b || b = b ]]; then echo ok;else echo notok;fi

ok

5. 字符串比较运算符

  -z 字符串长度为0返回true

 -n 字符串长度不为0返回true

  = 字符串相等返回true

  != 字符串不相等返回true

例:if [ 'aa' = 'bb' ]; then echo ok; else echo notok;fi

       if [ -n "aa" ]; then echo ok; else echo notok;fi

      if [ -z "" ]; then echo ok; else echo notok;fi

   整数判断运算符

 -lt 小于

-le 小于等于

-eq 等于

-gt 大于

-ge 大于等于

-ne 不等于

文件判断运算符

-d 是否为目录

if [ -d /bin ]; then echo ok; else echo notok;fi

-f 是否为文件

if [ -f /bin/ls ]; then echo ok; else echo notok;fi

-e 是否存在

if [ -e /bin/ls ]; then echo ok; else echo notok;fi

6. while语法

方式一:while expression

do

command

Done

方式二:i=1

while ((i<=3))

do

            echo $i

            let i++

done

7. case语法

 case $1 in

start)

echo "starting"

;;

stop)

echo "stoping"

;;

*)

echo "Usage: {start|stop}"

esac

8. for语法

方式一:for N in 1 2 3

do

       echo $N

done

for N in 1 2 3; do echo $N; done

for N in {1..3}; do echo $N; done

方式二:for ((i = 0; i <= 5; i++))

do

         echo "welcome $i times"

done

for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

9. 函数定义

 #!/bin/bash

# func1.sh

hello()    ## 函数定义

{

        echo "Hello there today's date is `date +%Y-%m-%d`"

        # return  2      ###返回值其实是状态码,只能在[0-255]范围内

}   

hello

# echo $?  获取函数的return值  

echo "now going to the function hello"

echo "back from the function"

  函数调用:

function hello()  

function hello

hello

注意:

1/.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译

2./函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

 

10函数参数

  #!/bin/bash

 # fun1.sh

funWithParam(){

    echo "第一个参数为 $1 !"

    echo "第二个参数为 $2 !"

    echo "第十个参数为 $10 !"

    echo "第十个参数为 ${10} !"

    echo "第十一个参数为 ${11} !"

    echo "参数总数有 $# !"

    echo "作为一个字符串输出所有参数 $* !"

}

funWithParam 1 2 3 4 5 6 7 8 9 34 73

注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。

11. 函数返回值

      #!/bin/bash

   # fun2.sh

   funWithReturn(){

    echo "这个函数会对输入的两个数字进行相加运算..."

    echo "输入第一个数字: "

    read aNum

    echo "输入第二个数字: "

    read anotherNum

    echo "两个数字分别为 $aNum $anotherNum !"

    return $(($aNum+$anotherNum))

}

funWithReturn

echo "输入的两个数字之和为 $? !"

12. 跨脚本调用函数

     上述fun2.sh的路径为:/root/scripts/fun2.sh

     现在在fun3.sh中调用fun2.sh

     #! /bin/bash

     # fun3.sh

     source  /root/scripts/fun2.sh    或(.  /root/scripts/fun2.sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值