<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux教程 - 在Shell腳本中聲明和使用布爾變量示例

          共 2451字,需瀏覽 5分鐘

           ·

          2021-01-04 20:00


          作者:Linux迷

          鏈接:https://www.linuxmi.com/shell-boolean-variables.html

          需要定義一個名為failed的bash變量,并將值設(shè)置為False。當從cron作業(yè)調(diào)用我們的腳本時,特定的任務(wù)可能會失敗,然后我需要將failed轉(zhuǎn)換為True。基于$failed,我需要發(fā)送一封電子郵件警告我的cron作業(yè)失敗了。那么,如何在Linux服務(wù)器上運行的shell腳本中聲明和使用布爾變量呢?
          Bash中沒有布爾值。但是,我們可以根據(jù)需要將shell變量的值定義為0(“False”)或1(“True”)。不過,Bash也支持布爾表達式條件。讓我們看看如何在Bash中組合這兩個概念來聲明布爾變量,并在運行在Linux、macOS、FreeBSD或類unix系統(tǒng)上的shell腳本中使用它們。
          在bash中聲明布爾變量
          語法如下,定義如下內(nèi)容
          failed=0 # False
          jobdone=1 # True
          ## 更具可讀性的語法 ##
          failed=false
          jobdone=true
          現(xiàn)在,當$failed是數(shù)字(例如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 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腳本示例中的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 ]
          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}"


          Bash布爾測試
          首先,定義一個日志文件:
          log="/tmp/rsnapshot.$$.txt"
          讓我們運行rsnapshot命令:
          /usr/bin/rsnapshot "$1" 2>&1 | $HOME/bin/error-scanner.pl > "${log}"
          在$status中獲取bash命令的退出狀態(tài),如下所示:
          status=$?
          接下來在我們的$log文件中搜索ERROR:
          alogs="$(egrep -w '^ERROR:|ERROR' $log)"
          如果$status不為零(命令失敗)或$alogs不為空(由$HOME/bin/error-scanner.pl報告錯誤),那么通過電子郵件/文本消息通知系統(tǒng)管理員或開發(fā)人員:


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


          最后,刪除$log文件:
          [ -f "$log" ] && rm -f "$log"
          總結(jié)
          本文我們講解了如何在Linux或類Unix系統(tǒng)的shell腳本/bash中聲明和使用布爾變量。使用man命令查看以下手冊頁:
          $ man bash
          $ help test
          $ help if


          良許個人微信


          添加良許個人微信即送3套程序員必讀資料


          → 精選技術(shù)資料共享

          → 高手如云交流社群





          本公眾號全部博文已整理成一個目錄,請在公眾號里回復(fù)「m」獲取!

          推薦閱讀:

          微信可以設(shè)置雪花昵稱了,真漂亮!!!

          年輕人不講武德,居然在簡歷中藏木馬

          記住看小電影前一定要檢查一下域名是不是 ?HTTPS 的,不然……


          5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費獲取!!


          瀏覽 100
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本三级三级欧美三级 | 先锋影音男人资源 | 国产刺激高潮 | 黄在线观看网站 | 日韩产的人妻AV在线网 |