需要定义一个名为failed的bash变量并将值设置为False。当从cron作业调用我们的脚本时,特定任务可能会失败,然后我需要将失败转换为True。基于$failed,我需要发送一封电子邮件警告我的cron作业失败。那么,如何在Linux服务器上运行的shell脚本中声明和使用布尔变量呢?Bash中没有布尔值。但是,我们可以根据需要将shell变量的值定义为0(“False”)或1(“True”)。但是,Bash也支持布尔表达式条件。让我们看看如何在Bash中结合这两个概念来声明布尔变量,并在Linux、macOS、FreeBSD或类unix系统上运行的shell脚本中使用它们。bash中声明boolean变量的语法如下,定义如下failed=0#Falsejobdone=1#True\##更具可读性的语法##failed=falsejobdone=true现在,当$failed是一个数字(比如0或者1),我们可以这样检查:if[$failed-eq1]thenecho"Jobfailed"elseecho"Jobdone"fi就这样。如何在shell脚本中声明和使用布尔变量(如“true”和“false”)当然,我们可以将它们定义为字符串,使我们的代码更具可读性:#!/bin/bash#Declareitasstringfailed="false"if["$failed"=="true"]thenecho"Jobfailed"elseecho"Jobdone"fior#setittotrueemail_sent=true#...做你的事情并将email_sent翻转为'false'如果需要...if["$email_sent"=true]thenecho'Dataloggedandemailtoosent.'elseecho'ALERT:Operationfailed.'记录器“警报:操作失败。”bash中的fi另一种定义布尔变量的语法如下:#让我们声明两个布尔变量#将这个设置为truejobstatus=true#检查它if["$jobstatus"=true];thencho'Okay:)'elseecho'Noop:('fi#双括号格式语法来测试bashbool=falseif[["$bool"=true]]中的布尔变量;然后cho'Done.'elsecho'Failed.'fi让我们测试一下:BashBooleanvariablesinshellscriptexample下面是一个示例脚本:#!/bin/bash#目的:从/data/apps备份内容#测试于:AWSEC2withEFSandUbuntu20.04Proservers#------------------------------------------------------所以urce"/apps/.keychain/$HOSTNAME-sh"source"/apps/scripts/cli_app.sh"#设置失败为'False'failed=0D="/nfsefs/ec2mum/prodwwwroot"log="/tmp/server.log.$$.txt"#将所有内容记录到我们的文件中exec3>&14>&2trap'exec2>&41>&3'0123exec1>"${log}"2>&1#备份所有web服务器s在www-0{1..8}do/usr/bin/rsync-az--deletebackupt@${s}:/data/apps/${D}/${s}/#设置为'true'当rsync失败并继续循环[$?-ne0]&&failed=1done#查看rsync是否循环失败if[$failed-eq1]thenecho"$0scripterror:rsyncbackupfailed.Seeattachedlogfile."|mail-A${log}-s"$HOSTNAME-LXDbackupfailed"-rsysuser@my-corp-tldalert@somewhere-tldpush_to_mobile"$0""亲爱的系统管理员,$HOSTNAME备份失败,时间为$(date)。----log:start---$(<${log})---log:end----您忠实的$0"fi[-f"${log}"]&&rm-f"${log}"Bashbooleantest首先,定义一个日志文件:log="/tmp/rsnapshot.$$.txt"让我们运行rsnapshot命令:/usr/bin/rsnapshot"$1"2>&1|$HOME/bin/error-scanner.pl>"${log}"在$status中获取bash命令的退出状态,如下:status=$?接下来在我们的$log文件中搜索ERROR:alogs="$(egrep-w'^ERROR:|ERROR'$log)"如果$status不为零(命令失败)或$alogs不为空(由$HOME/报告)bin/error-scanner.pl错误),然后通过电子邮件/短信通知系统管理员或开发人员:if[$status-ne0]||["$alogs"!=""];然后sub="Backupjobfailedat$HOSTNAME"mail-A"$log"-s"$sub"-rsys@somewhere-tldsysadmin@gmail-tld<<<"$0脚本在我们运行/usr时以错误结束/bin/rsnapshot\"$1\"$alogs"push_to_mobile"$0""$sub$0脚本在我们运行/usr/bin/rsnapshot\"$1\"$alogs时以错误结束,详细日志请参阅电子邮件。"elsesub="在$HOSTNAME备份成功"#push_to_mobile"$0""$sub。查看电子邮件了解详细的备份日志。">/dev/null#mail-A"$log"-s"$sub"-rsys@somewhere-tldsysadmin@gmail-tld<<<"$0/usr/bin/rsnapshotrunsuccessfully\"$1\"$alogs"fi最后删除$log文件:[-f"$log"]&&rm-f"$log"to总结这篇文章我们解释了如何在Linux或类Unix系统的shell脚本/bash中声明和使用布尔变量。使用man命令查看以下手册页:$manbash$helptest$helpif在shell脚本中声明和使用布尔变量的示例。以上就是良序教程网为各位小伙伴们分享的Linux相关知识。
