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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...