shell 腳本比較字符串相等_shell腳本--邏輯判斷與字符串比較

涉及到比較和判斷的時候,要注意

整數比較使用-lt,-gt,ge等比較運算符,詳情參考:整數比較

文件測試使用 -d, -f, -x等運算發,詳情參考:文件測試

邏輯判斷使用? ??&&(且)、||(或)、!(取反)

字符串比較實用

字符串的比較使用以下三個比較運算符:= 或者(==)、!= 、> 、

-n表示判斷后面的值是否為空,不為空則返回true,為空則返回false。

下面的一個例子:

#!/bin/bash

#文件名:test.sh

read -p 'please input name:' name

read -p 'please input password:' pwd

if [ -z $name ] || [ -z $pwd ]

then

echo "hacker"

else

if [ $name == 'root' ] && [ $pwd == 'admin' ]

then

echo "welcome"

else

echo "hacker"

fi

fi

運行測試:

ubuntu@ubuntu:~$ ./test.sh

please input name:root

please input password:admin

welcome

ubuntu@ubuntu:~$ ./test.sh

please input name:root

please input password:

hacker

ubuntu@ubuntu:~$ ./test.sh

please input name:root

please input password:beyond

hacker

ubuntu@ubuntu:~$

注意:

比較運算符的兩邊都有空格分隔,同時要注意比較運算符兩邊的變量是否可能為空,比如下面這個例子:

#!/bin/bash

#文件名:test.sh

if [ $1 == 'hello' ];then

echo "yes"

elif [ $1 == 'no' ];then

echo "no"

fi

運行:

ubuntu@ubuntu:~$ ./test.sh

./test.sh: line 4: [: ==: unary operator expected

./test.sh: line 7: [: ==: unary operator expected

ubuntu@ubuntu:~$ ./test.sh hello

yes

ubuntu@ubuntu:~$ ./test.sh no

no

ubuntu@ubuntu:~$ ./test.sh test

ubuntu@ubuntu:~$

可以看到,在代碼中想要判斷shell命令的第二個參數是否為hello或者no,但是在測試的時候,如果沒有第二個參數,那么就變成了 if [ == 'hello' ],這個命令肯定是錯誤的了,所以會報錯,比較好的做法是在判斷之前加一個判斷變量是否為空? 或者使用雙引號將其括起來,注意,必須使用雙引號,因為變量在雙引號中才會被解析。

#!/bin/bash

#文件名:test.sh

if [ "$1" == 'yes' ]; then

echo "yes"

elif [ "$1" == 'no' ]; then

echo "no"

else

echo "nothing"

fi

運行:

ubuntu@ubuntu:~$ ./test.sh

nothing

ubuntu@ubuntu:~$ ./test.sh yes

yes

ubuntu@ubuntu:~$ ./test.sh no

no

ubuntu@ubuntu:~$ ./test.sh demo

nothing

這樣的話,就不會報錯了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455077.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455077.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

單例模式之惡漢模式(詳解)

一.設計模式 概念:設計模式是一套被反復使用、多人知曉的、經過分類編目的、代碼設計經驗的總結。 目的:是用設計模式可以重用代碼,讓代碼更容易被他人理解,保證代碼的可靠性。 二.為什么要使用單例模式? 如果創造出多…

JSP中的:request.getScheme()+://+request.getServerName()+:+request.getServer

String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/"; <base href" <%basePath%>"> 這個語句是用來拼裝當前網頁的相對…

迷宮回溯問題分析和實現

原文鏈接:傳送門 迷宮問題 說明: 小球得到的路徑&#xff0c;和程序員設置的找路策略有關即&#xff1a;找路的上下左右的順序相關再得到小球路徑時&#xff0c;可以先使用(下右上左)&#xff0c;再改成(上右下左)&#xff0c;看看路徑是不是有變化測試回溯現象思考: 如何求出…

canvas clear 指定屬性的元素_好程序員web前端分享CSS屬性組成及作用

好程序員web前端分享CSS屬性組成及作用學習目標1、css屬性和屬性值的定義2、css文本屬性3、css列表屬性4、css背景屬性5、css邊框屬性6、css浮動屬性一、css屬性和屬性值的定義屬性&#xff1a;屬性是指定選擇符所具有的屬性&#xff0c;它是css的核心&#xff0c;css2共有150多…

mybatis大于小于等于

大于&#xff1a;<![CDATA[>]]> 小于&#xff1a;<![CDATA[<]]> 等于&#xff1a;<![CDATA[]]> 大于等于&#xff1a;<![CDATA[>]]> 小于等于&#xff1a;<![CDATA[<]]>轉載于:https://www.cnblogs.com/YuanFan123/p/7234530.html

2017年秋招-廣聯達面試及思考

面試官提問&#xff1a; 自我介紹&#xff08;沒有做充分的準備&#xff0c;總感覺說的不好&#xff09;為什么選擇做前端&#xff1f;在前端方向&#xff0c;你認為自身有哪些優點&#xff1f;前端需要掌握哪些技術知識點&#xff1f;看過哪些比較好的網站&#xff1f;會不會使…

排序算法介紹和分類

原文鏈接:傳送門 排序算法的介紹 排序也成排序算法 排序也稱排序算法(Sort Algorithm)&#xff0c;排序是將一組數據&#xff0c;依指定的順序進行排列的過程。 排序的分類&#xff1a; 1) 內部排序: 指將需要處理的所有數據都加載到**內部存儲器(內存)**中進行排序。 2) 外…

認識高清視頻編碼(MPEG、H.264、WMV-HD、RMVB)

文章出處&#xff1a;www.net1980.com 原創 最近兩年&#xff0c;“高清”這個詞語非常火熱&#xff0c;已經成為家電和IT行業的最新潮流了。高清視頻和普通視頻有什么區別呢&#xff1f;主要是分辨率上的區別&#xff0c;720P視頻的分辨率為1280X720&#xff0c;1080P視頻的分…

解讀SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC

SPP與SPPF 一、SPP的應用的背景 在卷積神經網絡中我們經常看到固定輸入的設計&#xff0c;但是如果我們輸入的不能是固定尺寸的該怎么辦呢&#xff1f; 通常來說&#xff0c;我們有以下幾種方法&#xff1a; &#xff08;1&#xff09;對輸入進行resize操作&#xff0c;讓他們…

go mongodb排序查詢_《MongoDB》day two

Mongodb的更新方式有&#xff1f;db.集合名.update() 函數:用于更新已存在的文檔。語法格式&#xff1a;db.COLLECTION_NAME.update({查詢條件},{更新內容},{更新參數(可選)}) 注&#xff1a;這種方式會覆蓋原有的文檔。使用更新操作符 使用 save()函數更新文檔 Mongodb的updat…

【轉】 JMeter學習(二十四)linux啟動jmeter,執行./jmeter.sh報錯解決方法

1.l-bash: ./jmeter.sh: Permission denied解決辦法&#xff1a;jmeter.sh的執行權限改改&#xff0c;是權限不夠chmod 777 jmeter.sh2.An error occurred:No X11 DISPLAY variable was set, but this program performed an operation which requires it.步驟一&#xff1a;Lin…

哈希表思路圖解和代碼實現

原文鏈接傳送門 哈希表(散列)-Google上機題 看一個實際需求&#xff0c;google公司的一個上機題: 有一個公司,當有新的員工來報道時,要求將該員工的信息加入(id,性別,年齡,住址…),當輸入該員工的id時,要求查找到該員工的 所有信息. 要求: 不使用數據庫,盡量節省內存,速度越…

android開發學習——Mina框架

Apache Mina Server 是一個網絡通信應用框架&#xff0c;對socket進行了封裝。 http://www.cnblogs.com/moonandstar08/p/5475766.html http://blog.csdn.net/u010739551/article/details/47361365 http://www.cnblogs.com/yanghuiping/p/4108063.html &#xff08;mina 自定…

glibc交叉編譯_TSN之linuxptp交叉編譯

0 開發環境1 linuxptp是什么2 為什么要交叉編譯linuxptp3 修改makefile4 修改源碼5 交叉編譯0 開發環境筆記本&#xff1a;ubuntu18.04.5&#xff0c;內核版本為5.3 開發板&#xff1a;imx8mp-evk內核版本&#xff1a;Linux5.4.24交叉編譯工具鏈&#xff1a;fsl-imx-xwayland-g…

230. Kth Smallest Element in a BST

題目&#xff1a; Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Note: You may assume k is always valid, 1 ≤ k ≤ BSTs total elements. Follow up:What if the BST is modified (insert/delete operations) often …

聲音編碼

1.脈沖編碼調制PCM文件格式簡介 將音頻數字化&#xff0c;其實就是將聲音數字化。最常見的方式是透過脈沖編碼調制PCM(Pulse Code Modulation) 。運作原理如下。首先我們考慮聲音經過麥克風&#xff0c;轉換成一連串電壓變化的信號&#xff0c;如圖一所示。這張圖的橫座標為秒&…

Elastic Stack簡介

Elastic Stack簡介 如果你沒有聽說過Elastic Stack&#xff0c;那你一定聽說過ELK&#xff0c;實際上ELK是三款軟件的簡稱&#xff0c;分別是Elasticsearch、 Logstash、Kibana組成&#xff0c;在發展的過程中&#xff0c;又有新成員Beats的加入&#xff0c;所以就形成了Elast…

webpack v3 結合 react-router v4 做 dynamic import — 按需加載(懶加載)

為什么要做dynamic import&#xff1f; dynamic import不知道為什么有很多叫法&#xff0c;什么按需加載&#xff0c;懶加載&#xff0c;Code Splitting&#xff0c;代碼分頁等。總之&#xff0c;就是在SPA&#xff0c;把JS代碼分成N個頁面份數的文件&#xff0c;不在用戶剛進來…

go kegg_工具篇丨GO和KEGG富集不到通路?快試試這個超贊的功能分析工具吧

GO和KEGG富集分析是我們在篩選出差異表達基因之后&#xff0c;都會去做的套路性分析。然鵝……我相信&#xff0c;總有那么一些“倒霉孩子”會遇到跟我一樣的窘境吧&#xff0c;好不容易篩選出來的差異基因&#xff0c;嘗試了DAVID(https://david.ncifcrf.gov/)、Metascape(htt…

大齡程序員的未來在何方

來源&#xff1a;http://www.gad.qq.com//article/detail/30358?sessionUserTypeBFT.PARAMS.229862.TASKID&ADUIN114328649&ADSESSION1501026740&ADTAGCLIENT.QQ.5533_.0&ADPUBNO26719 作者&#xff1a;foruok 大家都對大齡技術人員的未來非常關心&#xff0c…