Linux Shell運算符

来源:http://www.cnblogs.com/chenmh/archive/2016/04/27/5377756.html
-Advertisement-
Play Games

介紹 本篇文章主要是列舉在shell命令中常出現的一些用來做比較的運算符,這些運算符是編寫shell腳本的基礎; 數值運算符 註意:數值運算符只是針對數值的比較,如果用來比較的是字元或者字元串則會返回報錯“ integer expression expected” -eq 等於則為真,如果是對整數進 ...


介紹

本篇文章主要是列舉在shell命令中常出現的一些用來做比較的運算符,這些運算符是編寫shell腳本的基礎;

 

數值運算符

註意:數值運算符只是針對數值的比較,如果用來比較的是字元或者字元串則會返回報錯“ integer expression expected”

  -eq 等於則為真,如果是對整數進行比較相當於“=”

  -ne 不等於則為真,如果是對整數進行比較相當於“!=”

  -gt 大於則為真,如果是對整數進行比較相當於“>”

  -ge 大於等於則為真,如果是對整數進行比較相當於“>=”

  -lt 小於則為真,如果是對整數進行比較相當於“<”

  -le 小於等於則為真,如果是對整數進行比較相當於“<=”

 

字元串比較符

=:字元串包含的文本是否一樣

== 兩個字元串是否相等

>:比較字母的大小,比如var1 > var2,如果var1字母大於var2則返回真

<:和大於相反

!= 兩個字元串不相等

-z 空字元串

-n 非空字元串

註意:字元串的比較有時候有可能需要用雙中括弧“[[   ]]”,比如調用了命令進行比較,如果這個時候還是使用單中括弧會報錯,如下:

#!/bin/bash
var1="a";
var2="a"
if [[ `cat $var1` = `cat $var2` ]]
then
echo "eq"
else
echo "neq"
fi

cat命令應用的必須是個文件,不能直接引號內容。

文件運算符

[ -a FILE ] :如果 FILE 存在則為真。

[ -b FILE ] :如果 FILE 存在且是一個塊特殊文件則為真。

[ -c FILE ] :如果 FILE 存在且是一個字特殊文件則為真。

[ -d FILE ] :如果 FILE 存在且是一個目錄則為真。

[ -e FILE ] :如果 FILE 存在則為真。

[ -f FILE ] :如果 FILE 存在且是一個普通文件則為真。

[ -g FILE ] :如果 FILE 存在且已經設置了SGID則為真。

[ -h FILE ] :如果 FILE 存在且是一個符號連接則為真。

[ -k FILE ] :如果 FILE 存在且已經設置了粘制位則為真。

[ -p FILE ] :如果 FILE 存在且是一個名字管道(F如果O)則為真。

[ -r FILE ] :如果 FILE 存在且是可讀的則為真。

[ -o OPTIONNAME ] :如果 shell選項 “OPTIONNAME” 開啟則為真。

[ -s FILE ] :如果 FILE 存在且大小不為o則為真。

[ -t FD ] :如果文件描述符 FD 打開且指向一個終端則為真。

[ -u FILE ] :如果 FILE 存在且設置了SUID (set user ID)則為真。

[ -w FILE ] :如果 FILE 如果 FILE 存在且是可寫的則為真。

[ -x FILE ] :如果 FILE 存在且是可執行的則為真。

[ -z STRING ]: “STRING” 的長度為零則為真。

[ -O FILE ]:如果 FILE 存在且屬有效用戶ID則為真。

[ -G FILE ]:如果 FILE 存在且屬有效用戶組則為真。

[ -L FILE ] :如果 FILE 存在且是一個符號連接則為真。

[ -n string ]:判斷內容是否為空

[ -N FILE ]: 如果 FILE 存在 and has been mod如果ied since it was last read則為真。

[ -S FILE ] :如果 FILE 存在且是一個套接字則為真。

[ FILE1 -nt FILE2 ] :如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not則為真。

[ FILE1 -ot FILE2 ] :如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則為真。

[ FILE1 -ef FILE2 ] :如果 FILE1 和 FILE2 指向相同的設備和節點號則為真。

建議也使用雙中括弧

 

可以用test命令檢查某個條件是否成立,它可以進行數值、字元串和文件3個方面的測試,如果使用了test那麼就不要使用[]將命令括起來,否則會返回報告如“too many arguments” 。

#!/bin/bash
var1="a"
var2="b"
var3="/data/test"
if test  $var1 == $var2
 then
 echo "$var1=$var2"
else
 echo "$var1!=$var2"
fi
 echo "$var1,$var2"

if test -x "$var3"
then
echo "可執行文件"
fi

 

邏輯判斷符

-a:與操作,可以用&&代替

-0:或操作,可以用||代替 

!:非操作

算術運算符 

+

-

*

/


+=:例如var+=1等同於var=var+1

-=

*=

/= 

 

位操作符

 

 註意:所有的這些運算符前後都要有空格否則就不是比較而是賦值操作。

總結

 

 

 

 

 

備註:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須註明文章來源,且在文章開頭明顯處給明鏈接。

《歡迎交流討論》

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近上班時候,經常要做資料庫還原,時常遇到數據被占用的情況, 執行一句sql語句就可以解決, ALTER DATABASE dbname SET OFFLINE WITH ROLLBACK IMMEDIATE 記錄一下,以防下次要用的時候,忘記了。 ...
  • 一年前,我寫了在索引的導航結構里,SQL Server如何存儲VARCHAR列。我們都知道,在SQL Server里索引(聚集索引,非聚集索引)的鍵列有最大900byte的大小限制。 假設現在你想捉弄下SQL Server,在VARCHAR(8000)的列上創建一個索引,併在索引鍵列上插入超900b ...
  • 一、資料庫基礎知識 1.概念 資料庫全稱資料庫管理系統,簡稱DBMS,是一種在電腦中,針對數據進行管理、存儲、共用的一種技術。 2.分類 資料庫的發展過程中,按邏輯模型可分為以下幾種: 3.關係型資料庫 PS: 1.候選鍵、主鍵、外鍵都是需要用戶來定義的,一般來說,這些鍵的定義都會和業務、真實數據 ...
  • 由於原圖片較大插入會失敗,提供原圖片下載鏈接:http://pan.baidu.com/s/1eStxvSe 轉載請註明:http://www.cnblogs.com/zpfbuaa 拍攝水平有限。。。O(∩_∩)O~ ...
  • 第一範式 1. 在任何一個關係型的資料庫中,必須滿足第一範式,否則不能稱為關係型資料庫。 數據表每一列都是一個不可分割的數據項,同一列中不能有多個值,實體中不能有一個或者多個重覆值。數據表的所有欄位的值都是不可分割的原子值。 第二範式 1. 第二範式必須在第一範式的基礎上建立。他要求數據表的每個實例 ...
  • Linux tree命令用於以樹狀圖列出目錄的內容。 執行tree指令,它會列出指定目錄下的所有文件,包括子目錄里的文件。 語法 參數說明: 實例 以樹狀圖列出當前目錄結構。可直接使用如下命令: 常見的用法: tree -a 顯示所有 tree -d 僅顯示目錄 tree -L n n代表數字..表 ...
  • vmstat的官方定義是:vmstat - Report virtual memory statistics,即虛擬記憶體的統計。 先來追根溯源: 什麼是虛擬記憶體? 答:虛擬記憶體就是磁碟上虛擬出來可以當記憶體使用的一個文件 為什麼要有虛擬記憶體? 答:程式需要經由記憶體來運行,如果程式執行時占用記憶體過多,內 ...
  • 系統裝更新補丁出現“正在此電腦上搜索更新”,有時等待N長時間也沒有反應 管理員身份運行 net stop wuauserv net stop CryptSvc ren %windir%\system32\catroot2 catroot2.old ren %windir%\SoftwareDist ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...