
需要定义一个名为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 ] 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 # 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 ![]() # 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 ] 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 --- $(<${log}) --- log:end -- -- Yours faithfully, $0" fi [ -f "${log}" ] && rm -f "${log}" 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 <<< "$0 /usr/bin/rsnapshot ran successfully\"$1\" $alogs" fi $ help test $ help if |