• shell 10流程控制


    1. if判断

    1.1 if...

    #!/bin/sh
    a=5
    if [[ $a > 3 ]];then
    	echo "$a>3"    # 5>3
    fi
    #写成一行
    if [[ $a < 6 ]];then echo "$a<6";fi    # 5<6
    

    1.2 if...else

    #!/bin/sh
    a=5
    if [[ $a > 8 ]];then
    	echo "$a>8"
    else
    	echo "$a<8"    # 5<8
    fi
    

    1.3 if...elif...else

    #!/bin/sh
    a=5
    if [[ $a > 5 ]];then
    	echo "$a>5"
    elif [ $a -gt 5 ];then
    	echo "$a5"
    else
    	echo "$a=5"    #5=5
    fi
    

    1.4 使用&& ||来实现判断语句

    && 当条件为true时执行后面的语句 || 当条件为false时执行后面的语句
    [ 5 -gt 4 ]&&echo "5>4"    #5>4
    [ 5 -ge 6 ]&& echo "5>=6"||echo "5<6"    #5<6
    

    区别:||是将前面的所有语句视为条件,如绿色和蓝色为false时就会执行。如果绿色为true,蓝色执行不成功,同样会引发前面的语句为false,导致红色语句被执行。
    [ 5 -lt 6 ]&& echo "hello";[ 5 -lt 3 ]||echo "5>=6"

    [ 5 -lt 6 ]&& echo "hello";[ 5 -lt 3 ]||echo "5>=6"    #hello  5>=6
    

    2. for循环

    #!/bin/sh
    for i in `seq 1 5`;do
    	echo $i    # 1 2 3 4 5
    done
    

    3. while语句

    a=1
    while [ $a -lt 5 ];do
    	echo "$a"    # 1 2 3 4
    	let "a++"
            #或者 a=`expr $a + 1`
    done
    

    4. 无限循环

    4.1 while中用:代替条件

    #!/bin/sh
    while : ;do
    	echo "hello"
    done
    

    4.2 while 条件一直为true

    #!/bin/sh
    while true;do
    	echo "hello"
    done
    

    <2>4.3 使用for循环

    #!/bin/sh
    for ((;;));do
    	echo "hello"
    done
    

    5. until 循环

    #!/bin/sh
    a=0
    until [ $a -gt 10 ]; do
    	echo $a    # 0 1 2 3 4 5 6 7 8 9 10
    	let "a++"
    done
    

    6. case

    case为多选语句,每个case语句匹配一个值与一个模式.
    case用easc结束,每个case分枝用 ;;来break

    #!/bin/sh
    read -p "请输入的你的名次:" num
    case $num in
    	1) echo "武林盟主"
    	;;
    	2) echo "五岳盟主"
    	;;
    	3) echo "华山掌门"
    	;;
    	*) echo "回家玩去"
    esac
    

    7. 跳出循环

    7.1 break跳出所有循环

    while :;do
    	read -p "请输入1到5之间的数字:" num
    	case $num in
    		1|2|3|4|5) echo "你输入的数字为$num"
    		;;
    		*) echo "你输入的数字不在1和5之间"
    			break
    		;;
    	esac
    done
    

    输入6后停止循环

    请输入1到5之间的数字:5
    你输入的数字为5
    请输入1到5之间的数字:4
    你输入的数字为4
    请输入1到5之间的数字:6
    你输入的数字不在1和5之间*
    

    7.2 continue跳出本次循环

    while :;do
    	read -p "请输入1到5之间的数字:" num
    	case $num in
    		1|2|3|4|5) echo "你输入的数字为$num"
    		;;
    		*) echo "你输入的数字不在1和5之间"
    			continue
    			echo "游戏结束"
    		;;
    	esac
    done
    

    输入7后继续下次循环

    请输入1到5之间的数字:7
    你输入的数字不在1和5之间
    请输入1到5之间的数字:3
    你输入的数字为3
    请输入1到5之间的数字:6
    你输入的数字不在1和5之间
    

    7.3 return函数返回

    func(){
    	result=`adb shell ps|grep com.android.browser|wc -l`
    	echo $result    #
    	if((${result} > 0));then
    		return 0
    	else
    		return 1
    	fi
    }
    func
    a=$?
    if [ 1 -gt 0 ];then
    	echo "浏览器在运行"    #浏览器在运行
    else
    	echo "浏览器没有在运行"
    fi
    

    7.4 exit脚本退出

    #!/bin/sh
    i=1
    while [ "$i" -lt 10 ];do
    	echo $i    #1 2 3 4 5 不会继续执行
    	if [ $i -eq 5 ];then
    		exit
    	fi
    	((i+=1))
    done
    

    return和exit的区别:

    • 作用不同。exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的。exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程。而return是返回函数值并退出函数;
    • 语义层级不同。return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束;
    • 使用方法不用。return一般用在函数方法体内,exit可以出现在Shell脚本中的任意位置。
  • 相关阅读:
    水题大战Vol.3 B. DP搬运工2
    火题小战 C. 情侣?给我烧了!
    火题小战 B. barbeque
    火题小战 A.玩个球
    P6087 [JSOI2015]送礼物 01分数规划+单调队列+ST表
    NOI2020D1T1美食家
    Java 的随机数
    MySQL 配置文件的配置
    NOIP2020准(ge)备(zi)日记
    android开发EditText禁止输入中文密码的解决方法
  • 原文地址:https://www.cnblogs.com/csj2018/p/9582380.html
Copyright © 2020-2023  润新知