2.1.1 Shell脚本常用语句

条件判断

if 语句

    if 语句通过判断条件的返回值真假来执行不同的分支中的命令。

    语法

if 判断条件1 ;then
	判断条件1为真执行的COMMAND
elif 判断条件2 ;then         #可以有任意个,没有或者多个
	判断条件2为真执行的COMMAND
else                        #只能且必须存在一个
	当以上判断条件皆为假时执行的COMMAND
fi

    当 if 语句判断到一个条件为真时,那么将执行其中的命令,并且不再继续判断后续的语句。

case 语句

    case 语句通过匹配判断条件的模式来执行不同分支中的命令。

    语法

case 变量引用 in
模式1)
	匹配模式1时执行的COMMAND
	;;
模式2)
	匹配模式1时执行的COMMAND
	;;
	...     #可以有任意个匹配模式
*)              #可有可无,但是为了保证判断语句的强壮性,建议添加
	当变量没有匹配到以上的模式时执行的COMMAND
	;;
esac

    case 语句的匹配模式使用 glob 风格的通配符

循环控制

for 语句

    语法

    for 语句会将列表中的元素依次赋给语句中的变量,每一次赋值执行一次循环体,直到列表中元素耗尽。

#shell风格
for 变量 in 列表 ;do
	循环体
done

    for 语句中控制变量初始值在整个循环中只会执行一次,而控制变量修正则会每次循环都执行一次,当循环控制条件为时,循环停止。

#C语言风格
for ((控制变量初始值;循环控制条件;控制变量修正)) ;do
	循环体
done

    范例:打印等腰三角形

#!/bin/bash
read -p "line number is: " line
for ((l=1;l<=line;l++)) ;do
	space=$(printf "%-$[$line-$l]s")
	echo -e  "${space}\c" 
	star=$(printf "%-$[$l*2-1]s" "*")
	echo "${star// /*}"
done

while 语句

    while 语句会在循环控制条件为真时进入循环。每次循环开始时判断循环条件,在循环条件为假时退出循环

    语法

while 循环控制条件 ;do
	循环体    #一般在循环体中会对循环控制变量进行修正
done

    当然,如果循环判断条件永远为真,那么将会陷入死循环

while true ;do	
	循环体
done

    while 语句可以配合 read 语句进行逐行处理

    语法

#对命令的标准输出进行逐行处理
命令 | while read ;do
	循环体
done

#对文件中的内容进行逐行处理
while read ;do
	循环体
done < 文件

until 语句

    until 语句会在循环控制条件为假时进入循环。每次循环开始时判断循环条件,在循环条件为真时退出循环

    语法

while 循环控制条件 ;do
	循环体    #一般在循环体中会对循环控制变量进行修正
done
    当然,如果循环判断条件永远为假,那么将会陷入死循环
until false ;do	
	循环体
done

    

    范例1:打印九九乘法表
#!/bin/sh  
for i in $(seq 9) ;do
	for j in $(seq $i) ; do  
		let over=$[i*j]
		echo -ne "${j}x${i}=$over\t"
	done
	echo
done
    范例2:计算100以内所有奇数的和
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ] ;do
	let sum+=i
	let i+=2
done
echo $sum


break 语句

    当循环执行到 break 语句时,会退出指定循环。

    语法:break [N]

    N 为循环嵌套层次,当前循环为第1层,缺省为退出当前循环。

    范例:打印200以内的斐波那契数列

#!/bin/bash
read num

for ((stp=0;stp>=0;stp++)) ;do
	if [ $stp -eq 0 ] ;then
		res2=$stp
		echo $res2
	elif [ $stp -eq 1 ] ;then
		res1=$stp
		echo $res1
	else
		res=$[$res1+$res2]
		if [ $res -le $num ] ;then
			echo "$res"
			res2=$res1
			res1=$res
		else
			break
		fi
	fi
done

continue 语句

    当循环执行到 continue 语句时,会跳出指定循环,开始下轮循环

    语法:continue [N]

    N 为循环嵌套层次,当前循环为第1层,缺省为跳出当前循环。

shift 语句

    shift 语句用于将参数列表中的参数移动指定次数。

    当参数移动时,处于最左端的参数将被移除

    范例:打印数字等腰三角形

#!/bin/bash
while [ $# -gt 0 ] ;do
	echo $*
	shift
done

功能语句

    select 语句

    select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准输出上,并显示 PS3 提示符,等待用户输入。

    语法

select 变量 in 列表 ;do
	循环体   #一般为条件判断语句
done

    输入对应的数字,会将列表中对应的数据赋值给变量,也可以使用位置变量,而输入的数字则会保存在 REPLY 变量中。另外,select 语句为无限循环语句,在使用 select 语句时最好设置 break 或 exit 等退出循环的方法。

    范例:

#!/bin/bash
list="C语言 Python PHP Java PowerShell 退出"

select language in $list ;do
	case $language in
		C语言)
			echo "万物始于C语言"
			;;
		Python)
			echo "简而美"
			;;
		PHP)
			echo "PHP是天下最好的语言??"
			;;
		Java)
			echo "啥都做"
			;;
		PowerShell)
			echo "这才是最好的语言!!"
			;;
		退出)
			exit
			;;
	esac
done

    trap 语句用于捕捉信号后执行触发行为,而不执行系统原有操作。信号可以是全称,简写,也可以是数字。

    语法:trap '触发后行为' 信号

    触发后行为:

CMD:执行制定的命令

NULL:忽略信号操作

-:恢复系统原有操作






猜你喜欢

转载自blog.csdn.net/m30_miriam/article/details/80066536
今日推荐