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脚本中的任意位置。
原文地址:https://www.cnblogs.com/csj2018/p/9582380.html