当前位置: 首页 > 科技观察

改进脚本的五种方法

时间:2023-03-17 10:37:09 科技观察

明智地使用Bash脚本可以帮助您完成许多具有挑战性的任务。系统管理员经常编写脚本来完成某些任务,或长或短。您是否看过软件发行商提供的安装脚本程序?为了适应不同的用户系统配置,顺利完成安装,这些脚本程序往往包含很多功能和逻辑分支。这些年来,我积累了一些改进脚本程序的技巧。这里分享几个,希望对朋友有用。这是一组简短的脚本示例,向您展示如何制作脚本示例。初步尝试当我尝试编写脚本程序时,原来的程序往往是一组命令行,通常调用标准命令来完成更新网页内容等任务,这样可以节省时间。其中一项工作是将文件解压缩到ApacheWeb服务器的主目录中,我的初始脚本如下所示:cpjanuary_schedule.tar.gz/usr/apache/home/calendar/cd/usr/apache/home/calendar/tarzvxfjanuary_schedule.tar.gz这节省了我的时间和输入多个命令。随着时间的推移,我获得了额外的技能来使用Bash脚本来完成更困难的任务,例如创建软件安装包、安装软件、备份文件系统等等。1.条件分支结构与许多其他编程语言一样,脚本程序的条件分支结构也是一个强大的常用技能。条件分支结构赋予了计算机程序逻辑能力,我的很多例子都是基于条件逻辑分支的。基本的条件分支结构是if条件分支结构。通过判断是否满足特定条件,可以控制程序选择并执行相应的脚本命令段。比如要判断系统是否安装了Java,可以判断系统是否有Java库目录;如果找到这个目录,将这个目录路径添加到可执行程序路径中,就可以调用Java库应用了。如果[-d"$JAVA_HOME/bin"];thenPATH="$JAVA_HOME/bin:$PATH"2.限制执行权限您可能希望只允许特定用户执行某个脚本。除了Linux的权限管理,比如为用户和用户组设置权限,通过SELinux设置这样的保护权限,还可以在脚本中设置逻辑判断来设置执行权限。类似的情况可能是你需要保证只有网站程序的拥有者才能执行相应的网站初始化动作脚本。你甚至可以限制只有root用户才能执行某个脚本。这可以通过在脚本程序中设置逻辑判断来实现,Linux提供的几个环境变量可以提供帮助。其中一个是保存用户名的变量$USER,另一个是保存用户ID的变量$UID。在脚本程序中,执行用户的UID值存储在$UID变量中。用户名验证在第一个示例中,我指定只有用户jboss1可以在具有多个应用程序服务器实例的多用户环境中执行脚本。条件if语句主要是判断“请求执行这个脚本程序的用户是不是jboss1?”当这个条件为真时,会调用第一条echo语句,然后是exit1,即退出脚本程序。if["$USER"!='jboss1'];thenecho"抱歉,这个脚本必须运行为JBOSS1!"exit1fiecho"continuescript"根用户标识下一个例子是要求只有根用户才能执行脚本。root用户的用户标识码(UID)为0,设置条件判断使用大于运算符(-gt),禁止所有UID值大于0的用户执行脚本程序。if["$UID"-gt0];thenecho"Sorry,thisscriptmustberunasROOT!"exit1fiecho"continuescript"3.带参数执行程序可执行程序可以有参数作为执行选项,命令行脚本程序也是如此,举几个例子如下所示。在此之前,我想告诉大家,写一个好的程序,不仅仅是写出我们想让它做什么,程序也不需要做我们不想让它做的事情。如果程序在没有参数的情况下运行程序时缺少足够的信息,我希望脚本不会做任何破坏性的事情。因此,程序的第一步是确认命令行是否提供了参数。判断条件是参数$#的个数是否为0,如果是(即没有提供参数),则直接终止脚本程序,退出运行。if[$#-eq0];thenecho"Noargumentsprovided"exit1fiecho"argumentsfound:$#"多个运行参数可以传递给多参数的脚本程序。脚本使用内部变量引用这些参数,内部变量名以非负整数增量标识,即$1、$2、$3等。我只是扩展了之前的程序,并在下面的输出中显示了用户提供的前三个参数。显然,要让每个参数都有对应的响应,需要更多的逻辑判断,这里的例子只是简单的展示了参数的使用。echo$1$2$3我们在讨论这些参数变量名,你可能会有一个疑问,“为什么参数变量名会跳过$0,(直接从$1开始)?”是的,是的,这是有原因的。$0这个变量名是存在的,而且很有用,它存放的是正在执行的脚本程序的名字。echo$0程序有一个变量名,它在程序执行期间引用程序名。一个很重要的原因是程序名可以包含在生成的日志文件名中。最简单的方法应该是调用echo语句。echotest>>$0.log当然,你可能需要添加一些代码来确保日志文件存储在你想要的路径中,并且日志名称包含你认为有用的信息。4.交互式输入脚本程序的另一个有用的特性是它可以在执行过程中接受输入。最简单的情况是让用户输入一些信息。echo"enterawordplease:"readwordecho$word这也允许用户在程序执行期间做出选择。read-p"InstallSoftware??[Y/n]:"answif["$answ"=='n'];thenexit1fiecho"Installationstarting..."在您的计算机上安装最新版本的Java开发工具包(JDK).这个脚本解压JDK文件到指定目录,创建和更新一些符号链接,然后做一些设置告诉系统使用最新版本。如果解压过程中出现错误,后续的操作将导致整个系统上的Java无法使用。因此,在这种情况下需要终止程序。如果解压过程不成功,则不应继续进行后续更新。下面的语句可以完成这个功能。tarkxzmfjdk-8u221-linux-x64.tar.gz-C/jdk--checkpoint=.500;ec=$?if[$ec-ne0];thenecho“安装失败退出。”exit1fi下面的单行语句可以给你一个快速演示变量$?的用法。lsT;ec=$?;echo$ec先用touchT命令创建一个名为T的文件,然后执行这个单行命令,变量ec的值就会为0,然后用rmT命令删除文件,然后执行单行命令,变量ec的值将为2,因为文件T不存在,命令ls找不到指定的文件,报错。在逻辑条件中使用这个错误标志,参考我上面使用的条件判断,可以让脚本文件根据需要完成设置操作。结论要完成复杂的功能,也许我们认为应该使用Python、C或Java等高级编程语言,但不一定,脚本编程语言也很强大,可以完成类似的任务。要充分利用脚本编写,需要学习很多东西,希望这里的几个示例能让您了解脚本编写的强大之处。