shell脚本-循环选择语句

shell脚本-循环选择语句

过程式编程语言:
顺序执行
选择执行
循环执行
注:条件中的变量,可以在执行语句中使用,不用在加上"$"。

if语句

	根据命令的退出状态来执行命令
	单分支
		if  判断条件;then
			条件为真的分支代码
		fi
	双分支
		if  判断条件; then
			条件为真的分支代码
		else
			条件为假的分支代码
		fi
	多分支
		if  判断条件 1 ; then
			条件为真的分支代码
		elif  判断条件 2 ; then
			条件为真的分支代码
		elif  判断条件 3 ; then
			条件为真的分支代码
		else
			以上条件都为假的分支代码
		fi
		逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if 语句

case 语句

	case用法:
		case 变量引用 in
		PAT1)
			分支1
			;;
		PAT2)
			分支2
			;;
			...
		*)
			默认分支
			;;
		esac
	case 支持glob 风格的通配符:
		*:  任意长度任意字符
		?:  任意单个字符
		[]:指定范围内的任意单个字符
		a|b: a 或b

for语句

	for  变量名 in 列表;do
		循环体
	done
		依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体;  直到列表中的元素耗尽,循环结束。
	or
	for ((exp1;exp2;exp3)); do
		COMMANDS
	done
		控制变量初始化:仅在运行到循环代码段时执行一次
		控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
	列表生成方式:
		直接给出列表
		整数列表:
			(a) {start..end}
			(b) $(seq [start [step]] end)==`        `
		返回列表的命令
			$(COMMAND)
		使用glob,如:*.sh
		变量引用;
			$@, $*

while语句

	while CONDITION; do
		循环体
	done
	CONDITION:
		循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断。
		条件为"true" ,则执行一次循环,直到条件测试状态为"false" 终止循环。
		CONDTION 一般应该有循环控制变量,而此变量的值会在循环体不断地被修正。
	进入条件:
		CONDITION 为true
	退出条件:
		CONDITION 为false
	特殊用法
		遍历文件的每一行
		while read line(任意); do
			循环体
		done < /PATH/FROM/SOMEFILE
		or
		命令、文件或其他(标准输出) |while read line; do
			循环体
		done 
		依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line

until语句

	until CONDITION; do
		循环体
	done
	CONDITION:
		循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断。
		条件为"false" ,则执行一次循环,直到条件测试状态为"true" 终止循环。
		CONDTION 一般应该有循环控制变量,而此变量的值会在循环体不断地被修正。
	进入条件: 
		CONDITION  为false
	退出条件: 
		CONDITION  为true

控制语句

	continue
		用于循环体中,直接继续下个循环。
		continue [N],提前结束第N层的本轮循环,而直接进入下一轮判断,最内层为第1层。
	break
		用于循环体中,退出整个循环。
		break [N],提前结束第N层循环,最内层为第1层。
	shift
		用于将参量列表list左移指定次数,缺省为左移一次。
		shift [n],移动N个位置,参量列表list 一旦被移动,最左端的那个参数就从列表中删除。
		while 到循环遍历位置参量列表时,常用到 shift。
			$1=a,  $2=b,  $c=d
			shift
			$1=b,  $2=d
			shift
			$1=d
	wait
		用于等待命令执行结束,并exit 退出

select语句

	select 变量名 in LIST ; do
		循环体命令
	done
	select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入。
	用户输入菜单列表中的某个数字,执行相应的命令。
	用户输入被保存在内置变量 REPLY中。
		PS3="INPUT:"
		select menu in bai hei hong lv;do
			echo $menu
		done
	select与case的对比
		select 是个无限循环,因此要记住用 break令退出循环,或用 exit命令终止脚本,也可以按 ctrl+c退出循环。
		select 经常和 case 联合使用
		与for循环类似,可以省略in LIST,此时使用位置参量。

trap信号捕捉

	trap ' 触发指令'  信号
		自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作。
	trap ' '  信号
		忽略信号的操作
	trap '-'  信号
		恢复原信号的操作
	trap -p
		列出自定义信号操作
	trap 示例
		#!/bin/bash
		trap 'echo “signal:SIGINT"' int
		trap -p
		for((i=0;i<=10;i++))
		do
				sleep 1
				echo $i
		done
		trap '' int
		trap -p
		for((i=11;i<=20;i++))
		do
				sleep 1
				echo $i
		done
		trap '-' int
		trap -p
		for((i=21;i<=30;i++))
		do
				sleep 1
				echo $i
		done
posted @ 2018-02-07 00:15  shenxm  阅读(2946)  评论(0编辑  收藏  举报