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

article/2025/8/27 6:24:35

需要定义一个名为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 -eq 1 ]
thenecho "Job failed"
elseecho "Job done"
fi

就这样。

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

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

#!/bin/bash
# Declare it as string 
failed="false" if [ "$failed" == "true" ]
thenecho "Job failed"
elseecho "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 ] 
thenecho 'Data logged and email sent too.'
elseecho '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脚本示例中的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
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>"${log}" 2>&1# Backup all web servers
for 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=1
done# See if rsync failed in loop 
if [ $failed -eq 1 ]
thenecho "$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-tldpush_to_mobile "$0" "Dear sysadmin,Backup failed at $HOSTNAME at $(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 -ne 0 ] ||  [ "$alogs" != "" ]; thensub="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\"$alogsSee email for detailed log."elsesub="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


http://chatgpt.dhexx.cn/article/rRZQl6Oo.shtml

相关文章

单片机 bdata是布尔变量的存储方式

bdata是布尔变量的存储方式 uchar是unsigned char类型 位变量flag被定义为bdata存储类型&#xff0c;编译时编译器将把该变量定位在51单片机片内数据存储区&#xff08;RAM&#xff09;中的位寻址区 uchar bdata rfLED[2] {0x00,0x00}; //用于存放遥控指示灯用。 long int time…

javascript 布尔_Javascript布尔变量类型

javascript 布尔 While making decisions we generally need some logic values. Logic values are generally true and false . In Javascript these values are called as Boolean type. Boolean type variables holds logic values true and false. This type is simpler ag…

Java基础入门笔记-布尔类型变量

代码如下所示&#xff1a; package my;public class HelloWorld {public static void main(String[] args){boolean bool_1true;boolean bool_2false;System.out.println("bool_1 is "bool_1);System.out.println("bool_2 is "bool_2);}} 运行结果如下所示…

【Python】布尔类型 ( 布尔类型变量 | 比较运算符 )

文章目录 一、布尔类型变量二、比较运算符三、代码示例 一、布尔类型变量 Python 中的 布尔类型 ( bool ) 用于 逻辑判断 , 布尔类型 是 数字类型 ( Number ) 的一种 , 其有两种 字面量 取值 : 真 : True , 其本质是数字 1 ;假 : False , 其本质是数字 0 ; 代码示例 : # 布尔…

跳板机相关

跳板机 跳板机什么是跳板机 堡垒机什么是堡垒机 JumpServer 跳板机 什么是跳板机 跳板机&#xff1a;开发人员需要先登录跳板机才可进入连接到开发机中&#xff08;机房&#xff09;。 缺点&#xff1a;缺少人员的控制及审计&#xff0c;无法追责 堡垒机 什么是堡垒机 堡…

xshell7 登录脚本 设置跳板机

xshell7 登录脚本 设置跳板机 在实际开发或生产环境&#xff0c;经常会出现跳板机&#xff0c;手动执行比较麻烦&#xff0c;故进行如下两步设置即可&#xff1a; 第一步 在会话管理器中将跳板机的 IP 填入到连接中&#xff0c;我实验的跳板机是 192.168.190.xxx&#xff0c;需…

Xshell 配置跳板机服务器登录目标服务器

文章目录 1. 配置跳板机服务器1.1. 配置连接1.2. 配置用户身份验证1.3. 配置 SSH 隧道 2. 配置目标服务器2.1. 配置连接2.2. 配置用户身份验证2.3. 配置代理 3. 连接成功 有时候一些服务器在内网中&#xff0c;外部网络无法直接访问&#xff0c;这时我们就需要使用跳板机服务器…

网络安全设备堡垒机跳板机VPN

文章目录 一、堡垒机&#xff08;Bastion Host&#xff09;1.1 定义1.2 作用 二、跳板机&#xff08;Jump Server&#xff09;2.1 定义2.2 作用 三、VPN&#xff08;Virtual Private Network&#xff09;3.1 定义3.2 作用 四、三者的区别 一、堡垒机&#xff08;Bastion Host&a…

ansible通过跳板机管理内网机器

一、场景&#xff1a; 1、服务器都是内网机器 2、跳板机是公网IP 3、想要使用Ansible管理内网主机 4、逻辑&#xff1a;ansible > 跳板机 > 内网机器 二、解决办法 2.1 测试机器&#xff1a; ansible&#xff1a; 192.168.199.201 jumper&#xff1a; 14.215.177.…

堡垒机 防止合法维护单位合法维护一台服务器的同时以这台服务器为跳板,跳板机与堡垒机最大的不同之处在哪?...

跳板机是什么?跳板机是开发人员登陆到网站分派给应用服务器的唯一途径。开发人员务必最先登陆跳板机&#xff0c;再根据跳板机登陆到应用服务器。再此&#xff0c;就不得不提堡垒机了&#xff0c;堡垒机的定义是一种安全管理工具&#xff0c;具有强大的防御作用和安全审计作用…

vscode 经过跳板机,连接到内网服务器

1、背景&#xff1a;为啥要用跳板机&#xff1f; 一般实验室等环境的服务器是设置在内网环境中的&#xff0c;无法直接使用笔记本在公共环境下直接连接。但是由于种种原因&#xff0c;会出现在这样的场景下需要连接服务器的需求&#xff0c;而通过跳板机是一种常见的办法。 一…

前置机 网闸 摆渡机 跳板机 堡垒机

前言 前置机、网闸和摆渡机都是为了内网安全&#xff0c;尤其是银行、券商、电信运营商等的内网核心后台系统的安全&#xff0c;而使用的技术手段。跳板机和堡垒机则是为了运维人员远程访问控制系统而搭建的机器。 一、前置机 1. 作用 前置机&#xff0c;指代的是设置在后台…

堡垒机介绍和跳板机的简单实现

堡垒机&#xff1a; 在一个特定的网络环境下&#xff08;公司&#xff09;&#xff0c;如果用户可以直接远程登录操控后端的服务器是十分危险的&#xff0c;为了保障网络和数据不受外部和内部用户的入侵和破坏&#xff0c;运用各种手段监控和记录运维人员对网络内的服务器、网络…

跳板机逐渐被堡垒机替代的最主要原因是这个!

早在2000年左右&#xff0c;一些大中型企业为了集中运维人员的远程登录管理&#xff0c;会在机房部署一台跳板服务器&#xff0c;所有运维人员需要先远程登录本设备&#xff0c;再从跳转服务器登录其他服务器进行运维操作。 但跳转服务器并未实现对运维人员操作行为的管控和审…

网络安全:堡垒机、跳板机、Virtual Private Network知识介绍

目录 堡垒机、跳板机和VPN的概念、用途和区别 1、堡垒机&#xff08;Bastion Host&#xff09; 1.1 定义 1.2 作用 2、跳板机&#xff08;Jump Server&#xff09; 2.1 定义 2.2 作用 3、Virtual Private Network 3.1 定义 3.2 作用 4、三者之间的关系 对于企业来说…

linux中跳板机的部署

很多人可能看见跳板机一头雾水&#xff0c;不知道是啥&#xff0c;那么我们来了解一下。 跳板机是开发者登录到网站分配给应用服务器的唯一途径。开发者必须首先登录跳板机&#xff0c;再通过跳板机登录到应用服务器。为了保护业务机器的安全&#xff0c;将原有的使用固定密码登…

如何使用跳板机一键登录目标机器

今天主要给大家分享一下ssh客户端怎么配置通过跳板机直接跳转目标机器。 大家知道&#xff0c;在日常的开发中&#xff0c;有可能我们的本机不能够直接连线上的服务器&#xff0c;但是我们本机能有连上跳板机&#xff0c;而跳板机是可以连接线上的服务器的。因此我们只能通过输…

计算机信息单位中1GB等于,1gb等于多少mb 1gb换算多少mb

1GB等于1024MB。数据单位MB与Mb(注意B字母的大小写)常被误认为是一个意思&#xff0c;其实MByte含义是“兆字节”&#xff0c;Mbit的含义是“兆比特”&#xff0c;同时MB和Mb都是数据量单位。计算机存储信息的大小&#xff0c;最基本的单位是字节&#xff0c;一个汉字由两个字节…

在计算机中1 KB等于多少字节,字节、kb、MB、GB 等单位怎么换算的?1M等于多少kb,1g等于多少kb?...

字节、kb、MB、GB 等单位怎么换算的?1M等于多少kb,1g等于多少kb? 我们查看文件属性时可以看到很多文件和大小是以kb来显示的&#xff0c;很多朋友都知道电脑中文件大小、容量等采用的是字节、kb、MB、GB 等单位&#xff0c;那么你知道它们之间怎么换算的吗&#xff0c;如1M等…

位运算符之---按位与运算符(简单易懂)

前言: 位运算符是用来对二进制位进行操作的 c语言中有6种位运算符: & 按位与 [链接]: https://blog.csdn.net/weixin_42837024/article/details/98736834 | 按位或 [链接]:https://blog.csdn.net/weixin_42837024/article/details/98745019 ^ 按位异或 [链接]:https:/…