shell流程控制

if else

包括三种形式:

if condition
then
    command1 
    command2
    ...
    commandN 
fi
# condition 可以用test也可以用[ ]

if condition
then
    command1
    ...
else
    command
    ...
fi
if condition 
then
    command1
elif condition
    command2
else
    comand3
    ...
fi

while 循环

while 用于不断执行一系列命令,也可以用于从输入文件读取数据,其语法格式为:

while condition
do
    command
    ...
done

这里用到了 bash 的 let 命令,它用于执行一个或多个表达式,变量计算过程中不需要加上 $ 来表示变量;下面简单讲一下它与 expr 的区别:

由于shell程序中的操作默认都是字符串操作,在进行数学运算时可能会得到意想不到的结果,如下:

从上面这里例子可以看出,shell中的字符串连接只需要将字符串放在一起就可以了,因此为了执行上面的数学表达式,就需要使用 let 或者 expr:

从上面的语法来看,对于 let ,其后面的操作符与操作数之间不能存在空格,如第29行的 = 和 + 之间;而对于 expr 来说, 除了要加上反引号外,其操作符和左右两边操作数之间一定要存在空格!!此外,expr 中的括号() 、乘法符号* 都需要用 \ 转义,并且用空格隔开,如下:

s = `expr \( 2 + 6 \) \* 3`
echo $s

while 还可以通过 read 函数来从键盘读取数据

这里将键盘的输入赋给变量 FILM,而且这是一个无限循环,没有循环的终止条件;

下面利用while来按行读取文件,格式如下:

while read line
do
    command...
done <$file
# $file为文件名
# 上面的操作将文件中读取到的每一行赋给变量 line

也可以通过 cat 命令,然后使用管道符号,如下:

for 循环

一般格式为:

for var in item1 item2...itemN
do
    command1
    ...
done

当变量在列表里时,for循环就执行命令,命令可以是任何有效的shell命令或者语句,如下:

for还有一种常用的形式,格式如下:

for (( assignment; condition; next ))
do
    command1
    ...
done
#这里for 后面的条件需要加双括号

下面用 for 循环来循环读取文件中的每一行:

 

 结果如下:

 

until 循环

until 循环执行一系列命令直至条件为 true 时停止,语法格式如下:

until condition
do
    command1
    ...
done

case 语句

case...esac语法格式如下:

case var in
模式1)
    command1
    command2
    ...
    ;;
模式2)
    command
    ...
    ;;
*)
    default command
    ...
    ;;
esac

#模式可以使用方括号来表示一个范围,如[0-9],还可以使用 | 来表示或

case 的每个分支的模式都要在最右边加一个右括号,在每个分支的命令后用 ;; 隔开表示break,即分支执行结束,esac作为case 语句的结束标志

最后用 * 来表示 default 的情况,当所有分支都没有匹配上时会执行 * 分支的命令;

跳出循环

break 和 continue

前者是终止这层循环,后者是跳出本次循环转而进入下一次循环,例子如下:

将上面的break 改为 continue,然后再在 continue 后面加上一条语句:

运行代码时发现第10行的语句永远不会执行,这就是continue的作用;

exit 和 return

exit 是 shell 的内建命令,用于退出当前的 shell 进程,使用格式如下:

exit [<n>]

可以指定退出状态n,取值范围为0-255,一般情况下 0 表示正常退出,非0表示异常退出;状态码 n 可以不指定,默认是上一条命令的状态退出码;

return 一般用于函数的方法体中,用来返回函数的返回值,格式如下:

funcname()
{
    ...
    return [int]
}

可以看到,当函数返回值为5时,将函数作为 if 的条件,此时条件是 false,这是因为在shell 语言中 0 代表true,非0代表false

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值