shell 编写脚本的一些细节心得:流程控制

流程控制用得最多的,无非也就是老三样,if、for、while。

if

其中 if 作为判断的函数使用,其中也是有很多小细节的。

例如你要判断两个值是否相等的时候,有两种方式,代码如下:

test=2

if ((${test}==2))
then 
echo "yes"
fi

if [ ${test} -eq 2 ]
then 
echo "yes"
fi

其实两段代码的效果是一样的,唯一不一样的是,书写规范不一样。


在括号的使用上遵循一下几个规则:

单括号:

  1. 单个 "[]" 中括号,那么里面是规定(posix)好的运算符与表达式的格式。括号中需要使用关系运算符、字符串运算符、逻辑运算符等,要求结果必须为 true 或者 false。
  2. 单个 "()" 圆括号里面内容的格式要求跟你正常使用 shell 命令是一样的,不能有多余的空格。括号中的内容会执行,要求返回 true 或者 false。意味着支持更多的表达式类型。

双括号:

如果是双括号,那么则是对单方括号的扩展,支持的运算符更多,但不同的 shell 之间可能产生兼容性的问题。如果需要跨发行版 / 平台使用,不建议使用这个方法。
方括号与圆括号的区别,目前仅发现格式要求不一样,圆括号不能有空格,二方括号有更严谨的空格要求。

for

而 for 的使用则跟大多数编程语言一样,只不过细节上有点差异罢了。

例如轮询出本文件夹下的所有内容的代码如下:


for file in `ls -a`
do 
echo $file
done

这个代码相信大家接触过一些编程的应该都可以看懂。

当for循环没有条件的时候就会变成无限循环。

for (( ; ; )) ; echo yes

while

while 最适合用来处理需要一直执行下去的代码。

# while 不写条件的时候 默认为 while true
while :
do 
echo 1
sleep 1
done
posted @ 2023-04-18 11:14  NagaResst  阅读(42)  评论(0)    收藏  举报