良许Linux教程网 Linux教程 Linux教程 – 在Shell脚本中声明和使用布尔变量示例

Linux教程 – 在Shell脚本中声明和使用布尔变量示例

需要定义一个名为failed的bash变量,并将值设置为False。当从cron作业调用我们的脚本时,特定的任务可能会失败,然后我需要将failed转换为True。基于$failed,我需要发送一封电子邮件警告我的cron作业失败了。那么,如何在Linux服务器上运行的shell脚本中声明和使用布尔变量呢?
Linux教程
Bash中没有布尔值。但是,我们可以根据需要将shell变量的值定义为0(“False”)或1(“True”)。不过,Bash也支持布尔表达式条件。让我们看看如何在Bash中组合这两个概念来声明布尔变量,并在运行在Linux、macOS、FreeBSD或类unix系统上的shell脚本中使用它们。

在bash中声明布尔变量

语法如下,定义如下内容

failed=0 # False
jobdone=1 # True
## 更具可读性的语法 ##
failed=false
jobdone=true

现在,当$failed是数字(例如0或1)时,我们可以按以下方式检查它:

if [ $failed -eq 1 ]then    echo "Job failed"else    echo "Job done"fi

就这样。

如何在Shell脚本中声明和使用布尔变量(例如“ true”和“ false”)

当然,我们可以将它们定义为字符串,并使我们的代码更具可读性:

#!/bin/bash# Declare it as string failed="false" if [ "$failed" == "true" ]then    echo "Job failed"else    echo "Job done"fi

或者

# set it to trueemail_sent=true# ...do your stuff and flip email_sent to 'false' if needed ...if [ "$email_sent" = true ] then    echo 'Data logged and email sent too.'else    echo 'ALERT: Operation failed.'    logger 'ALERT: Operation failed.'fi

在bash下定义布尔变量的替代语法如下:

# Let us Declare Two Boolean Variables# Set this one to truejobstatus=true# Check it if [ "$jobstatus" = true ] ; thenecho 'Okay :)'elseecho 'Noop :('fi# Double bracket format syntax to test Boolean variables in bashbool=falseif [[ "$bool" = true ]] ; thenecho 'Done.'elseecho 'Failed.'fi

让我们对其进行测试:

Linux教程
Linux教程

shell脚本示例中的Bash布尔变量

下面是一个示例脚本:

#!/bin/bash# Purpose: Backup stuff from /data/apps# Tested on : AWS EC2 with EFS and Ubuntu 20.04 Pro servers# ---------------------------------------------------------source "/apps/.keychain/$HOSTNAME-sh"source "/apps/scripts/cli_app.sh"# Set failed to 'False' failed=0 D="/nfsefs/ec2mum/prodwwwroot"log="/tmp/server.log.$$.txt"# Log everything to our fileexec 3>&1 4>&2trap 'exec 2>&4 1>&3' 0 1 2 3exec 1>"${log}" 2>&1# Backup all web serversfor s in www-0{1..8}do        /usr/bin/rsync -az --delete backupt@${s}:/data/apps/ ${D}/${s}/        # set to 'true' when rsync failed and continue loop          [ $? -ne 0 ] && failed=1done# See if rsync failed in loop if [ $failed -eq 1 ]then        echo "$0 script error: rsync backup failed. See attached log file." | mail -A ${log} -s "$HOSTNAME - LXD backup failed" -r sysuser@my-corp-tld alert@somewhere-tld        push_to_mobile "$0" "Dear sysadmin,        Backup failed at $HOSTNAME at $(date).         ---- log:start ---        $(

Bash布尔测试

首先,定义一个日志文件:

log="/tmp/rsnapshot.$$.txt"

让我们运行rsnapshot命令:

/usr/bin/rsnapshot "1&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 -ne 0 ] ||  [ "$alogs" != "" ]; then        sub="Backup job failed at $HOSTNAME"        mail -A "$log" -s "$sub" -r sys@somewhere-tld sysadmin@gmail-tld "$0 script ended with errors when we ran /usr/bin/rsnapshot \"$1\" $alogs"        push_to_mobile "$0" "$sub        $0 script ended with errors when we ran /usr/bin/rsnapshot \"$1\"        $alogs        See email for detailed log."else        sub="Backup successful at $HOSTNAME"        #push_to_mobile "$0" "$sub. See email for detailed backup log." >/dev/null        #mail -A "$log" -s "$sub" -r sys@somewhere-tld sysadmin@gmail-tld 

最后,删除$log文件:

[ -f "loglog"

总结

本文我们讲解了如何在Linux或类Unix系统的shell脚本/bash中声明和使用布尔变量。使用man命令查看以下手册页:

 man bash
help test
$ help if

以上就是良许教程网为各位朋友分享的在Shell脚本中声明和使用布尔变量示例。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你!
公众号

本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部