当你在你准备的脚本中找到了完美的逻辑时,再做一件事。为您编写和测试的逻辑获取一个可重用快照,并将其保存在模板中,以便下次需要做类似的事情时使用。您将节省自己的开发和调试时间。
不要从零开始
找出你在脚本中可能经常做的各种事情的语法——尤其是
你做的任何事情都可能相当复杂。在目录中设置示例,并使用它们来开始编写代码。下面是一些例子:
测试参数
检查第一个参数是否为数字:
如果!["$1" -eq "$1" 2> /dev/null] then echo "ERROR: $1 is not numeric" exit 1 fi
请注意我们是如何将标准错误放入位桶的。我们真正想知道的是测试是否有问题。如果实参不是数字,则括号内的测试失败,而用于反转条件的!则成功。因此,我们执行then子句中的命令并以错误退出。
检查是否提供了三个参数:
If[$# != 3]; / /使用实例然后返回"ERROR: 3 arguments expected
这个很简单。我们只是检查$#(参数的数量),看看它是否是脚本所需要的。这并不需要检查参数的类型是否正确,或者它们是否以正确的顺序提供。
建设情况报表
case $ans in [Yy][Ee][Ss])[Nn][Oo]) mv err.log err$$.log;;*) echo "Please response with yes or no" exit 3;;esac
有许多可能的case语句。这一个检查是否提供了任何形式的“是”或“否”。如果你也想允许单字母回复,你可以这样做,但你将接受任何以“n”或“y”开头的回复,无论大小写。
#!/bin/bash
所以是是还是不是?>”
阅读答
案例ans美元
* | Y *)回声是的;;
N * | *)回声没有;;
请回答是或不是
退出1;;
esac
每次循环一个文件行(不是每次一个单词)
时不时地,我必须做一个循环,从文件中取出每一行,并将其作为一个完整的行处理。因为我很少这样做,所以我总是不得不停下来问自己:“现在,我要怎么再做一次?”不像我每天的“for word in ' cat file '”逻辑,将每一行分成单独的单词,并在每个单词上循环,这些while语句一次读取和处理一行。
while read line do name=$line echo "Text read from file - $name" done < $1
While read line do if ["$list" == ""];然后list=$line else list="$list, $line" fi done < /tmp/u$$
使用函数
我可能不经常使用的功能,但是它们非常有用,因为它们允许您使用相同的代码一次又一次地在一个复杂的脚本没有高层多次呈现相同的行,但因为在分离的逻辑脚本的你在做什么,它们通常会使整个脚本更容易阅读。在这里,我们将整型测试放入一个函数中,这样我们就可以反复调用它。
is_integer() {["$1" -eq "$1" > /dev/null 2>&1]返回$?}
制作select语句
选择语句是我很少使用的另一个东西,所以当我需要时,手边有一个示例是很好的。在下面的例子中,我们要求运行脚本的人从一组以。dmp结尾的文件中选择一个文件。每个选择都将在列表中列出
在ls *中选择FILE。dmp ' do if ["$FILE" == ""];然后echo "Bad selection" exit 2 fi echo将从$FILE break done导入数据库
相互作用看起来像这样:
1) mon.dmp 2) tue.dmp 3) wed.dmp #?2准备从tue.dmp导入数据库
您可以将脚本放到模板目录中,也可以使用git或RCS之类的存储库来存储它们。保存您计算出的逻辑示例将使将来的脚本准备速度更快,而且不会那么令人沮丧。
感谢Karl Vogel分享了他在准备脚本时使用模板的想法。