Linux培训
达内IT学院

400-996-5531

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


今天小编要跟大家分享的文章是关于Linux教程之Shell脚本中声明和使用布尔变量示例。需要定义一个名为failed的bash变量,并将值设置为False。当从cron作业调用我们的脚本时,特定的任务可能会失败,然后我需要将failed转换为True。基于$failed,我需要发送一封电子邮件警告我的cron作业失败了。那么,如何在Linux服务器上运行的shell脚本中声明和使用布尔变量呢?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-eq1]
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 true
email_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 true
jobstatus=true
# Check it
if["$jobstatus"=true] ;then
echo'Okay :)'
else
echo'Noop :('
fi
# Double bracket format syntax to test Boolean variables in bash
bool=false
if[["$bool"=true]] ;then
echo'Done.'
else
echo'Failed.'
fi

让我们对其进行测试:

Shell脚本中声明和使用布尔变量示例

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 file
exec3>&14>&2
trap'exec 2>&4 1>&3'0123
exec1>"${log}"2>&1

# Backup all web servers
forsinwww-0{1..8}
do
       /usr/bin/rsync -az --delete backupt@${s}:/data/apps/${D}/${s}/
       # set to 'true' when rsync failed and continue loop 
       [ $? -ne0] && failed=1
done

# See if rsync failed in loop
if[$failed-eq1]
then
       echo"$0script 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$HOSTNAMEat$(date).

       ---- log:start ---

       $(<${log})

       --- log:end --

       --
       Yours faithfully,
       $0"
fi
[ -f"${log}"] && rm -f"${log}"

Bash布尔测试首先,定义一个日志文件: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"!=""];then
       sub="Backup job failed at$HOSTNAME"
       mail -A"$log"-s"$sub"-r sys@somewhere-tld sysadmin@gmail-tld <<<"$0script ended with errors when we ran /usr/bin/rsnapshot \"$1\"$alogs"
       push_to_mobile"$0""$sub

       $0script 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 <<< "$0 /usr/bin/rsnapshot ran successfully\"$1\" $alogs"
fi

最后,删除$log文件:[ -f "$log" ] && rm -f "$log"总结本文我们讲解了如何在Linux或类Unix系统的shell脚本/bash中声明和使用布尔变量。使用man命令查看以下手册页:$ man bash
$ help test
$ help if

以上就是小编今天为大家分享的关于Linux教程之Shell脚本中声明和使用布尔变量示例的文章,希望本篇文章能够对正在从事Linux运维工作的小伙伴们有所帮助,想要了解更多Linux相关知识记得关注达内Linux培训官网,最后祝愿小伙伴们工作顺利,成为一名优秀的Linux运维工程师。

作者:Linux迷

链接:#/shell-boolean-variables.html

【免责声明:本文图片及文字信息均由小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。】

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:2021年Linux运维必备知识点汇总
下一篇:什么是智能运维?运维未来的发展方向是什么?

运维培训班出来好找活吗?

新能源运维工程师是干什么的

云计算就业岗位有哪些?

学物联网工程好就业吗?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省