bash中的算術運算及條件測試

bash的算術運算

+, -, *, /, %取模(取余), **(乘方)

實現算術運算:

  • (1) let var=算術表達式
  • (2) var=$[算術表達式]
  • (3) var=$((算術表達式))
  • (4) var=$(expr arg1 arg2 arg3 …)
  • (5) declare –i var = 數值
  • (6) echo ‘算術表達式’ | bc

注意:乘法符號有些場景中需要轉義,如*

bash有內建的隨機數生成器:$RANDOM(0-32767)

echo $[$RANDOM%50] :0-49之間隨機數

[989][root@centos6: /root]# num1=10
[990][root@centos6: /root]# num2=20
[993][root@centos6: /root]# let sum=${num1}+${num2}
[993][root@centos6: /root]# echo ${sum}
30
[994][root@centos6: /root]# echo $[${num1}+${num2}]
30
[995][root@centos6: /root]# echo $((${num1}+${num2}))
30
[996][root@centos6: /root]#  nu12=$(expr ${num1} \* ${num2})
[998][root@centos6: /root]# echo ${nu12}
200

增強型賦值:

+=, -=, *=, /=, %=

let varOPERvalue

例如:let count+=3 自加3后自賦值

自增,自減:

let var+=1 或 let var++

let var-=1 或 let var–


bash條件測試

判斷某需求是否滿足,需要由測試機制來實現

專用的測試表達式需要由測試命令輔助完成


測試命令

  • test EXPRESSION
  • [ EXPRESSION ]
  • [[ EXPRESSION ]]

注意:EXPRESSION前后必須有空白字符


測試表達式的類別

  • 數值比較
  • 字符串測試
  • 文件測試

數值比較測試

  • -gt: 是否大于
  • -ge: 是否大于等于
  • -eq: 是否等于
  • -ne: 是否不等于
  • -lt: 是否小于
  • -le: 是否小于等于
[999][root@centos6: /root]# test 1 -gt 3
[1000][root@centos6: /root]# echo $?
1
[1001][root@centos6: /root]# test 1 -lt 3
[1002][root@centos6: /root]# echo $?
0
[1003][root@centos6: /root]# [ 1 -gt 3  ]
[1004][root@centos6: /root]# echo $?
1
[1005][root@centos6: /root]# [ 1 -lt 3  ]
[1006][root@centos6: /root]# echo $?
0

字符串測試:

  • ==:是否等于;
  • >: ascii碼是否大于ascii碼
  • <: 是否小于
  • !=: 是否不等于
  • =~: 左側字符串是否能夠被右側的PATTERN所匹配

注意: 此表達式一般用于[[ ]]中;擴展的正則表達式

  • -z “STRING”:字符串是否為空,空為真,不空為假
  • -n “STRING”:字符串是否不空,不空為真,空為假

注意:用于字符串比較時的用到的操作數都應該使用引號

[1007][root@centos6: /root]# name=xiangge
[1009][root@centos6: /root]# [ -z "${name}"  ]
[1010][root@centos6: /root]# echo $?
1
[1011][root@centos6: /root]# [ -z "${myname}"  ]
[1012][root@centos6: /root]# echo $?
0
[root@centos6: /root]# [  "${myname}" == "${name}"  ]
[1019][root@centos6: /root]# echo $?

注意以下例子:左則字串要能包含下右側字符串,反之就不行。

[1007][root@centos6: /root]# name=xiangge
[1022][root@centos6: /root]# [[ ${name} =~ "xiang" ]]
[1023][root@centos6: /root]# echo $?
[1026][root@centos6: /root]# [[ "xiang" =~ "${name}" ]]
[1026][root@centos6: /root]# echo $?
1

文件測試

存在性測試

  • -a FILE:同-e
  • -e FILE: 文件存在性測試,存在為真,否則為假

存在性及類別測試

  • -b FILE:是否存在且為塊設備文件
  • -c FILE:是否存在且為字符設備文件
  • -d FILE:是否存在且為目錄文件
  • -f FILE:是否存在且為普通文件
  • -h FILE 或 -L FILE:存在且為符號鏈接文件
  • -p FILE:是否存在且為命名管道文件
  • -S FILE:是否存在且為套接字文件

寫一個判斷文件類型的腳本

1  #!/bin/bash 
2  #
3  # 用戶鍵入路徑,用腳本來判斷文件類型
4  read -p "Enter a file path: " filename
5  if [ -z "$filename" ];then
6    echo "usage: Enter a file path."
7    exit 1
8  fi
9  if [ ! -e $filename ];then
10    echo "NO such file."
11    exit 2
12 fi
13 if [ -f $filename ];then
14    echo "A common file."
15 elif [ -d $filename ];then
16    echo "A common directory."                                
17 elif [ -L $filename ];then
18    echo "A symbolic file."
19 else
20    echo "other type."
21 fi

文件權限測試:(當前用戶)

  • -r FILE:是否存在且可讀
  • -w FILE: 是否存在且可寫
  • -x FILE: 是否存在且可執行

文件特殊權限測試:

  • -u FILE:是否存在且擁有suid權限
  • -g FILE:是否存在且擁有sgid權限
  • -k FILE:是否存在且擁有sticky權限

文件大小測試:

  • -s FILE: 是否存在且非空

文件是否打開:

  • -t fd: fd表示文件描述符是否已經打開且與某終端相關
  • -N FILE:文件自動上一次被讀取之后是否被修改過
  • -O FILE:當前有效用戶是否為文件屬主
  • -G FILE:當前有效用戶是否為文件屬組

組合測試條件

第一種方式:

COMMAND1 && COMMAND2 并且 COMMAND1 || COMMAND2 或者 ! COMMAND 非

如:[[ -r FILE ]] && [[ -w FILE ]]

第二種方式: EXPRESSION1 -a EXPRESSION2 并且 EXPRESSION1 -o EXPRESSION2 或者 ! EXPRESSION 必須使用測試命令進行;

[990][root@centos6: /root]# [ -z "$hostName" ] || [ "$hostName" == "centos6.8E" ]
[991][root@centos6: /root]# echo $?
0

原創文章,作者:祥健,如若轉載,請注明出處:http://www.www58058.com/73626

(0)
祥健祥健
上一篇 2017-04-17 22:21
下一篇 2017-04-17 23:08

相關推薦

  • Linux程序包管理(一)RPM使用

    Linux程序包管理 在早期我們使用源代碼的方式安裝軟件時,都需要先把源程序代碼編譯成可執行的二進制應用程序,然后進行安裝。意味著每次安裝軟件都需要經過 預處理 –> 編譯 –> 匯編–> 鏈接, 這個復雜的過程。為簡化安裝步驟,程序提供商就在特定的系統上面編譯好相關程序的安裝文件并進行打包,提…

    Linux干貨 2016-06-01
  • 正則表達式和grep用法,及文本查看、處理工具

    概念 正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),是計算機科學的一個概念。正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些匹配某個模式的文本。(維基百科) 通俗…

    2017-10-21
  • 第1周-1:計算機的組成及其功能以及部分常見Linux發行版簡介

    一、計算機的組成及其功能: 計算機主要由硬件部分和軟件部分組成。 1、硬件部分 (1)中央處理器 由控制器和運算器兩大部分組成,是計算機的大腦,硬件部分里最關鍵的部分。決定著整個計算機系統的性能。 控制器負責協調計算機硬件的其他部分同步工作,對其他的硬件進行發號施令。是計算機系統的司令。控制器從存儲器中讀取指令,分析指令的含義,要完成什么操作,需要什么數據,…

    Linux干貨 2016-11-01
  • HA專題: corosync+pacemaker實現nginx高可用

    HA專題: corosync+pacemaker實現nginx高可用 前言 實驗介紹 實驗拓撲 實驗環境 實驗步驟 準備工作 安裝HA集群組件 安裝nginx和配置nfs 使用crmsh配置集群資源 測試 總結 前言 這幾天都會學習高可用集群, 也會將其中的一些實驗寫出來分享給大家, 這個專題估計會寫5篇左右, p.s: 寫博客很累的 實驗介紹 這次的實驗比…

    Linux干貨 2016-04-11
  • n28 第二周作業

    n28 第二周作業

    Linux干貨 2017-12-09
  • 用戶 組 和權限 以及權限的 分類

    關于文件的安全我們要從3A驗證 說起     1  Authentication:認證      2  Authorization:授權      3  Accouting|Audition:審計 由于系統文件的用戶太多為了便于管理 我們便把系統的用…

    系統運維 2016-08-04

評論列表(1條)

  • renjin
    renjin 2017-04-21 11:25

    主要介紹了bash編程的測試及算術運算,內容總結的很詳細,排版也很不錯,繼續努力!

欧美性久久久久