Linux脚本,部分IV-脚本用于寿命

We’已经学到了很多关于命令,实用程序以及如何创建脚本,但我们需要讨论脚本为寿命的重要性。

什么是脚本的脚步?Â我们有一个倾向于专注于自动化的东西,以自动化我们不想手动执行的东西,但避免我们认为可能会使我们的价值无效。我们可能会尝试确保我们的角色或我们的角色我们创建脚本时的知识。这可以内置于执行进程,调度,参数,预运行或后运行步骤中。这一点’T为我们提供资产,但责任和我所说的责任,“the Code of Conduct” when automating.

问题

您脚本解决方案时要问自己的问题是:

  • 我是自动化用户需要自动的还是我发现乏味的东西?
  • 我是否构建了对它们中的硬编码值的脚本与动态提供,确保了我的持续支持?
  • 我是否需要在5周,6个月,1年内更新此脚本?

I’我要承认,我没有的原因’首先,T拥抱PowerShell是我发现的大多数情况下充满了硬件价值的例子。我发现它令人难以置信的钝,但我开始意识到它来自许多可能没有其他炮弹的脚本历史的来源,(这只是我的理论,没有很多证据证明这一点,所以请记住这一点…)作为PowerShell脚本已经成熟,我’ve注意到有多少开始构建它们,以更大的动态值和提前脚本选项,以及此,我’对PowerShell变得更加舒适。

我认为最好的学习方式是看到真实的例子,所以让’s demonstrate.

环境

将环境变量设置为脚本用户的一部分时’■登录,这可以消除额外的编码。添加到.bashrc或.profile将确保这些值已知脚本已知并可供其使用。而不是将路径输入目录或设置环境,而是一旦用户登录,它就可以成为环境的一部分。.profile-Â在我们的示例中,我们’ll调用文件.profile_sql,正如我们可以创建一个不同的文件,然后在各个脚本中维护那些夫妇而不是大量变量:

export SQL_HOME=/opt/app/mssql
export SQLDB=finance1
export myip=$(curl http://ifconfig.me)
export subscriptionID=$(az account show | grep id |awk  '{print $2}'| tr -d \"\,)

撰写脚本时,您可以使用它来将配置文件从配置文件设置为脚本的一部分,并消除在脚本中将其设置为的需要。它还允许您具有环境配置文件以维护。在上面的示例中, 我们’ve设置以下内容:

  • SQL Server的安装回家
  • 使用SQLCMD登录时将使用的默认数据库的名称
  • 用户的IP地址’s workstation
  • 用户的Azure订阅ID

剧本

在我们的shell脚本中,我们’LL首先设置我们的shell,然后首先执行.profile_sql,设置我们刚刚讨论的所有内容:

#/bin/bash
. ~/.profile_sql

该配置文件可以拥有此脚本所需的一切以及其他脚本所需的任何其他脚本所需的内容,允许回收,即使您只需要少数唯一脚本,此配置文件也可以支持所有内容,或者您​​可以通过数据库或可以将其分解应用程序环境,为每个应用程序创建唯一的个人资料。

在此之后,我们可以为脚本设置任何唯一变量’t be or shouldn’t设置在配置文件级别并开始脚本。请注意,我们可以使用其他变量中的配置文件中的变量:

set -euo pipefail
IFS=$'\n\t'
export DTA_DIR=$SQL_HOME/data/
export startip=$myip
export endip=$myip
export servername=$holname
export vnet=$servername"_vnet"l
export snet=$vnet"_snet"

DTA_DIR值是部分硬编码的,因此如果我们移动数据文件,我们’d需要更新此脚本。介绍我们如何查询数据库以在配置文件中收集这些值(增强)。Â动态地拉动值,这将删除持续支持的需要,允许脚本自动更新为幕后更改。

作为一个例子,我捕获了我的IP地址,然后在将.profile_sql调用作为脚本的一部分后,在我的脚本中设置这个值,预先更新IP地址。您可以设置从其他值构建的值-ÂÂ请注意vnet是使用命名扩展和子网的服务器名称的组合,(SNET)只是vnet名称,其顶部的扩展名。用户需要一个识别名称 - 如果他们创建一个,我们将不是为什么想要重复使用它并将其附加到简单地锁定进入其中?

回收,生成,重用

这也可以通过使用awk / grep / sed等实用程序/命令来完成,以捕获值或查询或命令,以提取将填充值的数据。如果数据来自命令并以某种方式填充到屏幕上’t易于操作,您可以将数据输出到文件中’在通过脚本中的步骤工作时,可以使用或可以使用多种方式捕获

这里 ’s two examples:

az vm image list --offer Oracle --all --publisher Oracle --output table >db.lst

上面的Azure命令将图像列表Oracle产品,Ouptus它在表格中,它在一个名为db.lst的文件中。每次我重新运行它,它会在文件上重写,回收文件并确保仅限最新信息。

然后,我可以使用此数据以不同的方式实现不同的脚本。

对于我的Oracle VM创建,我可以捕获表输出中的第四列并使用awk实用程序打印出选项:

cat db.lst | awk  '{print $4}'

您也可以动态地执行此操作以捕获要返回的值,以便返回客户以供客户选择,因此它们始终拥有最新的可用:

az account list-locations | grep name | awk  '{print $2}'| tr -d \"\, | grep us | grep -v australia

上面的Azure命令列出了所有位置名称,(grep name)在它包含时打印第二个单词“us”,但没有什么时候包含,“Australia”,(也包含“us”.  I’ve还要求它从输出中修剪出特殊字符(tr -d)。

再次注意到,每个命令都被a分隔“|”,允许我连接不同的命令和实用程序。

将这种类型的功能建立在脚本中,创造了硬编码和手动干预的寿命和可持续性’T.始终问问自己:

  • 有没有办法动态生成这个值?
  • 我有什么需要我早点重新审视这个脚本的东西吗?
  • 是否有能力取代我的内容’m试图手动划脚脚本?
  • 我应该在特定脚本中将这种自动化放在特定脚本中,或者有一个包装器脚本或配置文件句柄变量设置?

这些都是你应该在写脚本时问自己的问题,或者如果你’re增强一个。脚本不是单次交易。您应该致力于增强和构建脚本,为您,用户和业务创建更多价值。

 

dbakevlar.

http://about.me/dbakevlar

One thought on “ Linux. 脚本,部分IV-脚本用于寿命

评论被关闭。