1. 程式人生 > >shell中的比較(if運算)

shell中的比較(if運算)

比較兩個字串是否相等的辦法是:

    if [ "$test"x = "test"x ]; then

    這裡的關鍵有幾點:

    1 使用單個等號

    2 注意到等號兩邊各有一個空格:這是unix shell的要求

    3 注意到"$test"x最後的x,這是特意安排的,因為當$test為空的時候,上面的表示式就變成了x = testx,顯然是不相等的。而如果沒有這個x,表示式就會報錯:[: =: unary operator expected

    二元比較操作符,比較變數或者比較數字.注意數字與字串的區別.

    整數比較

    -eq 等於,如:if [ "$a" -eq "$b" ]

    -ne 不等於,如:if [ "$a" -ne "$b" ]

    -gt 大於,如:if [ "$a" -gt "$b" ]

    -ge 大於等於,如:if [ "$a" -ge "$b" ]

    -lt 小於,如:if [ "$a" -lt "$b" ]

    -le 小於等於,如:if [ "$a" -le "$b" ]

     大於(需要雙括號),如:(("$a" > "$b"))

    >= 大於等於(需要雙括號),如:(("$a" >= "$b"))

    小資料比較可使用AWK

    字串比較

    = 等於,如:if [ "$a" = "$b" ]

    == 等於,如:if [ "$a" == "$b" ],與=等價

     注意:==的功能在[[]]和[]中的行為是不同的,如下:

     1 [[ $a == z* ]] # 如果$a以"z"開頭(模式匹配)那麼將為true

     2 [[ $a == "z*" ]] # 如果$a等於z*(字元匹配),那麼結果為true

     3

     4 [ $a == z* ] # File globbing 和word splitting將會發生

     5 [ "$a" == "z*" ] # 如果$a等於z*(字元匹配),那麼結果為true

     一點解釋,關於File globbing是一種關於檔案的速記法,比如"*.c"就是,再如~也是.

     但是file globbing並不是嚴格的正則表示式,雖然絕大多數情況下結構比較像.

    != 不等於,如:if [ "$a" != "$b" ]

     這個操作符將在[[]]結構中使用模式匹配.

     大於,在ASCII字母順序下.如:

     if [[ "$a" > "$b" ]]

     if [ "$a" \> "$b" ]

     注意:在[]結構中">"需要被轉義.

     具體參考Example 26-11來檢視這個操作符應用的例子.

    -z 字串為"null".就是長度為0.

    -n 字串不為"null"

     注意:

     使用-n在[]結構中測試必須要用""把變數引起來.使用一個未被""的字串來使用! -z

     或者就是未用""引用的字串本身,放到[]結構中。雖然一般情況下可

     以工作,但這是不安全的.習慣於使用""來測試字串是一種好習慣.

if判斷式
if [ 條件判斷一 ] && (||) [ 條件判斷二 ]; then
elif [ 條件判斷三 ] && (||) [ 條件判斷四 ]; then
else
   執行第三段內容程式
fi

例如:

[email protected]:~# a=0
[email protected]:~# b=0
[email protected]:~# c=5         
[email protected]:~# if [ $a = 0 -a $b = 0 ]&&[ $c != 0 ]; then
> echo success
> fi
success

if 使用的表示式

Primary 意義
[ -a 檔案 ] 如果檔案存在為真。
[ -b 檔案 ] 如果 檔案 存在 而且 是一個 塊-特殊 檔案為真。
[ -c 檔案 ] 為真 如果 檔案 存在 而且 是一個 字-特殊 檔案。 [ -d 檔案 ] 為真 如果 檔案 存在 而且 是一個 目錄。
[ -e 檔案 ] 為真 如果 檔案 存在。
[ -f 檔案 ] 為真 如果 檔案 存在 而且 是一個 普通 檔案。
[ -g 檔案 ] 為真 如果 檔案 存在 而且 已經設定了他的 SGID 位。
[ -h 檔案 ] 為真 如果 檔案 存在 而且 是一個 符號連線。
[ -k 檔案 ] 為真 如果 檔案 存在 而且 他的粘住位已經設定。
[ -p 檔案 ] 為真 如果 檔案 存在 而且 是一個 已經命名的管道 (F 如果O)。
[ -r 檔案 ] 為真 如果 檔案 存在 而且 是可讀的。
[ -s 檔案 ] 為真 如果 檔案 存在 而且 比零位元組大。
[ -t FD ] 為真 如果 檔案 檔案描述符已經開啟 而且 指向一個終端。
[ -u 檔案 ] 為真 如果 檔案 存在 而且 已經設定了他的 SUID (set user ID)位。
[ -w 檔案 ] 為真 如果 檔案 為真 如果 檔案 存在 而且 是可寫的。
[ -x 檔案 ] 為真 如果 檔案 存在 而且 是可執行的。
[ -O 檔案 ] 為真 如果 檔案 存在 而且 屬於有效使用者ID。
[ -G 檔案 ] 為真 如果 檔案 存在 而且 屬於有效組ID。
[ -L 檔案 ] 為真 如果 檔案 存在 而且 是一個 符號連線。
[ -N 檔案 ] 為真 如果 檔案 存在 而且 has been mod 如果ied since it was last read。
[ -S 檔案 ] 為真 如果 檔案 存在 而且 是一個 socket。
[ 檔案1 -nt 檔案2 ] 為真 如果 檔案1 has been changed more recently than 檔案2, or 如果
檔案1 存在 而且
檔案2 does not。
[ 檔案1 -ot 檔案2 ] 為真 如果 檔案1 比 檔案2 舊, 或者 檔案2 存在而且 檔案1 不存在。
[ 檔案1 -ef 檔案2 ] 為真 如果 檔案1 而且 檔案2 refer to the same device 而且 inode
numbers。
[ -o 選項名 ] 為真 如果 shell 選項 "選項名" 開啟。
[ -z STRING ] 為真 如果 "STRING"的長度是零。
[ -n STRING ] 或者 [ STRING ] 為真 "STRING"的長度是非零值。
[ STRING1 == STRING2 ] 如果兩個字串相等為真。 "=" may be used instead of "==" for
strict POSIX compliance。
[ STRING1 != STRING2 ] 為真 如果 兩兩個字串不相等。
[ STRING1 < STRING2 ] 為真 如果 "STRING1" sorts before "STRING2" lexicographically in the
current locale。
[ STRING1 > STRING2 ] 為真 如果 "STRING1" sorts after "STRING2" lexicographically in the
current locale。
[ ARG1 OP ARG2 ]
"OP" 是 -eq, -ne, -lt, -le, -gt or -ge 其中一個。 These arithmetic binary operators
return 為真 如果 "ARG1" is equal to, not equal to, less than, less than or equal to, greater
than, or greater than or equal to "ARG2", respectively。 "ARG1" 而且 "ARG2" are
integers。
表示式可以藉以下操作符組合起來, listed in decreasing order of precedence:
操作符效果
[ ! EXPR ] 如果EXPR 為假則為真。
[ ( EXPR ) ] 返回EXPR 的值。 這樣可以用來忽略正常的操作符優先順序。 [ 表示式1 -a 表示式2 ] 如果表示式1 而且表示式2 同時為真則為真 。
[ 表示式1 -o 表示式2 ] 如果表示式1 或者表示式2 其中之一為真則為真。

相關推薦

shell比較if運算

比較兩個字串是否相等的辦法是:     if [ "$test"x = "test"x ]; then     這裡的關鍵有幾點:     1 使用單個等號     2 注意到等號兩邊各有一個空格:這是unix shell的要求     3 注意到"$test"x最後的x,

常見位操作及運算應用舉例:1,C語言位運算子異或“∧”的作用2,異或運算的作用3,&運算、|運算、^異或運算

  1 C語言中位運算子異或“∧”的作用: 異或運算子∧也稱XOR運算子。它的規則是若參加運算的兩個二進位同號,則結果為0(假);異號則為1(真)。即0∧0=0,0∧1=1,1∧1=0。如: 即071∧052,結果為023(八進位制數)。 “異或”的意思是判斷兩個相應的位值是否為“

計算一個二進位制數數字“1”的個數運算

int numberOfOne( unsigned value ) { int count; for( count = 0; value != 0; value >>= 1 ) if( ( value & 1 ) != 0 )//如果最低位是1,就增加計數器的

python的布林型別布林運算與空值

程式清單: #val_bool.py print('bool test') print(True) print(False) print(1>0) print(1<0) print("\nand:") print(True and False) print(2

根據影象名字把一個大資料夾影象分類matlabfor迴圈巢狀if語句

clear; close all; clc; inpath = 'G:\code\xianzhu\Z_CODE\SalBenchmark-master\Data\DataSet1\Saliency\*.png'; %%需要分類的資料夾路徑 %%分類後圖像儲存路徑%% CA_p

Freemarker使用之比較if

比較運算子 表示式中支援的比較運算子有如下幾個: 1. =或者==:判斷兩個值是否相等. 2. !=:判斷兩個值是否不等. 3. >或者gt:判斷左邊值是否大於右邊值 4. >=或者gte:判斷左邊值是否大於等於右邊值 5. <或者lt:判斷左邊值是否

sql兩種情況判斷if函式、多種情況判斷case .. when...)

原地址:https://segmentfault.com/a/1190000009676728 sum(if(actual_num>0, share_post,0)) 其中SUM的意思淺顯易懂,求和嘛。IF也十分清晰:判斷嘛。而且if的第一個引數很明顯就是條件,

在ibatis做等值判斷if-else

如果ziduan2的zhide值是abc <isEqual property="ziduan2" compareValue="abc"> update t_wf_dcasemsg set ziduan1=#ziduan1#

資料庫刪除語句Drop、Delete、Truncate的相同點和不同點的比較舉例說明

資料庫中刪除語句Drop、Delete、Truncate的相同點和不同點的比較(舉例說明) 資料庫刪除語句的分別介紹: Delete:用於刪除表中的行(注:可以刪除某一行;也可以在不刪除表的情況下(即意味著表的結構、屬性、索引完整)刪除所有行)        

MATLAB:圖像二值化、互補圖運算im2bw,imcomplement函數

idt 部分 轉換成 灰度 技術 ice 工作 圖像 light 圖像二值化、反運算過程涉及到im2bw,imcomplement函數,反運算可以這麽理解:原本黑的區域變為白的區域,白的區域變為黑的區域。 實現過程如下: close all; %關閉當前

流程判斷if...else

流程判斷(if...else)當用戶輸入密碼時候,如果輸入正確會輸出welcom user login,如果輸入錯誤會輸出invalid username or password #!/usr/bin/env python # -*- coding:utf-8 -*- import getpass _us

遍歷所有子物體renderer渲染器的material材質並改變其alpha值實現若隱若現的效果

sys [] object c engine orm 器) gpo gin nts using UnityEngine;using System.Collections;using UnityEngine.UI; public class CubeControl : Mo

51Nod 1069 Nim遊戲 運算

過程 cstring nco 表示 比賽 pac 如果 tdi ace 題目鏈接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1069 有N堆石子。A B兩個人輪流拿,A先拿。每次只

38PHP,獲取數據庫數據並在html顯示晉級5

lis java語言 分享 比賽 meta 用戶名 gen fun etc 首先是我的文件關系: 我的主php文件是index.php,我的配置文件php是BBB.php 我的數據庫操作文件是 b.php 我的html文件是login.html 我的index.

[LeetCode] 137. Single Number II 運算

清零 一次 .com blog 適用於 soft hat ever rip 傳送門 Description Given an array of integers, every element appears three times except for one, w

Shell編程轉—總結

bsp shel sed 正則表達式 grep 字符處理 進行 總結 正則 一、基礎正則表達式 1、正則表達式與通配符 正則表達式:用來在文件中匹配符合條件的字符串,正則是包含匹配,grep、awk、sed等命令支持正則表達式

如何加到可選Kerneljupyter notebook

style python pytho alt 安裝 2.7 分享 log info step1: 打開命令窗口後,輸入 conda create -n env_name python=2.7 即給anaconda安裝了python2.7 step2: 繼續輸入

後端list集合的數據傳遞到前臺HTML顯示表格形式

UNC 姓名 char 響應 防止 數據 前端 格式 ble 關鍵字:web項目中前後臺數據傳遞問題 在學習web項目的過程中,我們肯定會遇到前後臺數據交換問題。這個問題我也思考了很久,今天借此總結一下。由於博主水平有限,如有不當之處,還請大家多多指正,,廢話

Javascript知識匯總------面向對象繼承未完成

clas 繼承性 封裝 class 原型繼承 行為 特征 body 多態性 面向對象的特征就是封裝性,繼承性和多態性   | 封裝:就是將復雜包裹,隱藏起來,讓簡單的東西預留在外面   | 繼承:拿來主義,自己沒用,把別人的拿過來,讓其成為自己的東西

基於 MySQL 的數據庫實踐更名運算

AI 方法 希望 log Go 最低工資 HERE 笛卡爾 clas 考慮下面的查詢查詢。 select name, course_id from instructor, teaches where instructor.ID = teaches.ID; 它的結果是一個具有