shell 條件語句 if case

目錄

測試

?test測試文件的表達式 是否成立

格式

選項

比較整數數值

格式

選項

字符串比較

常用的測試操作符

格式

邏輯測試

格式

且 (全真才為真)

或 (一真即為真)

常見條件

雙中括號

[[ expression ]] 用法

( ){ }? 可以將多個命令組合在一起,批量執行

if語句的結構

分支結構

單分支

雙分支

多分支

舉例

單分支

判斷是否為超級管理員

?編輯

判斷主機連通性

多分支

考試成績

case

格式

字符

例子

考試成績

石頭剪刀布

echo

date

seq?


測試

?test測試文件的表達式 是否成立

格式

1.test? 條件表達式

2. [ 條件表達式?]? (注意[ ]空格,否則會失敗)

3.[ 操作符 文件或目錄 ]

選項

-d:測試是否為目錄(Directory)

[root@localhost ~]# test -d /etc/
[root@localhost ~]# echo $?
0

-e:測試目錄或文件是否存在(Exist)

[root@localhost ~]# test -e /etc
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e /fwf
[root@localhost ~]# echo $?
1

-a:測試目錄或文件是否存在(Exist)?

[root@localhost ~]# test -a /etc
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -a /fwf
[root@localhost ~]# echo $?
1

?a和e的區別在于a不可以取非

[root@localhost ~]#[ ! -e /etc/shadow ]
[root@localhost ~]#echo $?
1
[root@localhost ~]#[ ! -a /etc/shadow ]
[root@localhost ~]#echo $?
0

-f:測試是否為文件(File)

[root@localhost ~]# test -f /etc/init.d
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -f /etc/yum.conf
[root@localhost ~]# echo $?
0

-r:測試當前用戶是否有權限讀取(Read)

-w:測試當前用戶是否有權限寫入(Write)

-x:測試當前用戶是否有權限執行(eXcute)

root執行權限別人沒有root也沒有,別人有root也有

[root@localhost 123]# ll /etc/shadow
----------. 1 root root 1266 11月  8 13:21 /etc/shadow
[root@localhost 123]# [ -r /etc/shadow ]
[root@localhost 123]# echo $?
0
#實際效果,不是表面顯示,注意root權限
[root@localhost 123]# [ -x /etc/shadow ]
[root@localhost 123]# echo $?
1
#root執行權限別人沒有root也沒有,別人有root也有
[root@localhost 123]# 

-L: 測試是否為軟連接文件

[root@localhost /]# test -L /etc/localtime
[root@localhost /]# echo $?
0
[root@localhost /]# test -L /etc/yum.conf
[root@localhost /]# echo $?
1
[root@localhost /]# 

測試是否成功使用 $? 返回值(0為正確,非0不正確)

比較整數數值

格式

[ 整數1 -操作符 整數2 ] 公式

選項

-eq:第一個數等于(Equal)第二個數

-ne:第一個數不等于(Not Equal)第二個數

-gt:第一個數大于(Greater Than)第二個數

-lt:第一個數小于(Lesser Than)第二個數

-le:第一個數小于或等于(Lesser or Equal)第二個數

-ge:第一個數大于或等于(Greater or Equal)第二個數

[root@localhost /]# a=6
[root@localhost /]# b=9
[root@localhost /]# [ $a -eq $b ]
[root@localhost /]# echo $?
1
[root@localhost /]# [ $a -le $b ]
[root@localhost /]# echo $?
0
[root@localhost /]#

字符串比較

常用的測試操作符

=:字符串內容相同

!=:字符串內容不同,! 號表示相反的意思

-z:字符串內容為空

-n: 字符是否存在

格式

[ 字符串1 = 字符串2 ] 是否相同

[root@localhost /]# qwe=xuyucheng
[root@localhost /]# rty=taishuail
[root@localhost /]# [ $qwe = $rty ]
[root@localhost /]# echo $?
1
[root@localhost /]# rty=xuyucheng  
[root@localhost /]# [ $qwe = $rty ]
[root@localhost /]# echo $?
0
[root@localhost /]# 

[ 字符串1 != 字符串2 ] 是否不相同

[root@localhost /]# qwe=xuyucheng
[root@localhost /]# rty=taishuail
[root@localhost /]# [ $qwe != $rty ]
[root@localhost /]# echo $?
0

[ -z 字符串 ] 是否為空

[root@localhost /]# rty=taishuail
[root@localhost /]# [ -z $rty ]
[root@localhost /]# echo $?
1
[root@localhost /]# rty=" "
[root@localhost /]# [ -z $rty ]
[root@localhost /]# echo $?
0
[root@localhost /]# 

[ -n 字符串 ] 字符是否存在

邏輯測試

格式

1.? [ 表達式1 ] 操作符 [ 表達式2 ] ...

2.? ?命令1 操作符 命令2 ...

且 (全真才為真)

第一個要真 第二 個也要真 才能是真

如果第一個為假 ,整個 就為假 不用執行下個操作

cmd1 && cmd2

或 (一真即為真)

如果第一個 為真 那么 不用執行第二個

第一個為假 ,才需要執行第二個

cmd1 || cmd2

常見條件

-a或&&:邏輯與,“而且”的意思全真才為真

-o或||:邏輯或,“或者”的意思一真即為真

!:邏輯否

雙中括號

[[ expression ]] 用法

== 左側字符串是否和右側的PATTERN相同

?注意:此表達式用于[[ ]]中,PATTERN(元字符)為通配符

=~ 左側字符串是否能夠被右側的正則表達式的PATTERN所匹配

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

[root@localhost ~]# xuc=tre.log
[root@localhost ~]# [[ "$xuc" == *.log ]]  //是否有.log結尾的
[root@localhost ~]# echo $?
0
[root@localhost ~]# xuc=tre.text       //將字符串重新定義
[root@localhost ~]# [[ "$xuc" == *.log ]]    //是否有.log結尾的
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ "$xuc" != *.log ]]    //!取反 是否沒有.log結尾的
[root@localhost ~]# echo $?
0
[root@localhost ~]# 

( ){ }? 可以將多個命令組合在一起,批量執行

[root@localhost ~]# (cd /opt;ls)
999       nginx-1.18.0           qqq.sh  test2
aa        nginx-1.18.0.tar.gz    rh
a.tar.gz  nginx-1.18.0.tar.gz.0  test
etc       qqq                    test1

( )會開啟子shell

{ }? 不會開啟子進程

if語句的結構

if語句? 單分支? ?判斷條件? 成功執行??

? ? ? ? ? ? ? ? ? ? ? ? ?不成功? ? ? ?不執行

分支結構

單分支

if 判斷條件;

then ? 條件為真的分支代碼

fi

雙分支

if 判斷條件;then

條件為假的分支代碼

fi

多分支

if 判斷條件1
then
?條件1為真的分支代碼

elif 判斷條件2
then
?條件2為真的分支代碼

elif 判斷條件3;then
?條件3為真的分支代碼

...
else
?以上條件都為假的分支代碼 ?托底

fi

舉例

單分支

判斷是否為超級管理員
#!/bin/bashif [ "$USER" != "root" ]
then
echo "非用戶管理員"
else
echo "是管理員用戶"
fi

判斷主機連通性
#!/bin/bash
ping -c 3 192.168.17.2
if 
[ $? = 0 ]
then 
echo "與真機網絡通暢"
exit 1
fi
echo "與真機不通"

多分支

考試成績
#!/bin/bash
read -p "請輸入你的成績:" cjif [ $cj -ge 85 ]&&[ $cj -le 100 ]
then
echo "你的成績為$cj"
echo "你的成績為優秀"elif [ $cj -ge 70 ]&&[ $cj -le 84 ]
then
echo "你的成績為$cj"
echo "你的成績為良好"elif [ $cj -ge 60 ]&&[ $cj -le 69 ]
then
echo "你的成績為$cj"
echo "你的成績為合格"
else
echo "你的成績為$cj"
echo "你的成績不合格"
fi

case

格式

case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac

read -p

case $num??in

條件判斷1)

命令序列)
?;;
條件判斷2)
?命令序列2)
?;;

esac

字符

* 任意長度任意字符

? 任意單個字符

[0-9] 指定范圍內的任意單個字符

| ??或者,如: a|b

例子

考試成績
[root@localhost qqq]# bash 4.sh
請輸入你的分數4
4 不及格
[root@localhost qqq]# cat 4.sh
#!/bin/bashread -p "請輸入你的分數" cjcase $cj in
100)
echo "$cj 你好棒!"
;;
[89][0-9])
echo "$cj 一般般吧,仍需努力"
;;
[67][0-9])
echo "$cj 及格"
;;
[0-9]|[1-5][0-9])
echo "$cj 不及格"
;;*)
echo "輸入有誤"
esac

石頭剪刀布
#!/bin/bash
m=`echo $[RANDOM%3+1]`
read -p "請輸入 1.石頭2.剪刀3.布:" hif [ $m -eq $h ]
then
echo  "打成平局"
bash $0
elif [ $h -eq 1 -a  $m -eq 2 -o $h -eq 2 -a $m -eq 3 -o $h -eq 3  -a $m -eq 1 ]
then
echo "人類勝利"
else
echo  機器勝利
fi#!/bin/bash
key=`echo $[RANDOM%3+1]`
read -p "請輸入1包子 2剪子 3 錘子:" numcase $num in
1)num="包子"
;;
2)num="剪子"
;;
3)num="錘子"
;;
*)echo "你輸錯了!"exit
;;
esaccase $key in
1)key="包子"
;;
2)key="剪子"
;;
3)key="錘子"
;;
esacif [ $num = "包子" -a $key = "錘子"  -o $num = "剪子" -a $key = "包子" -o $num = "錘子" -a $key = "剪子" ]
thenecho 機器出的是$key
echo 你出的是$num echo "人類勝利"
elif [ $num = $key ]
then
echo 機器出的是$key
echo 你出的是$num echo "打成平局再來一次"
elseecho 機器出的是$key
echo 你出的是$num 
echo "機器勝利"
fi

echo

echo -n ? 表示不換行輸出

echo -e ? 表示輸出轉義符

常用的轉義符

不換行顯示

\c ?使用在數字中間會把后面內容刪除


date

date查看當前系統時間

-d 你描述的日期,顯示指定字符串所描述的時間,而非當前時間

%F 完整日期格式,等價于 %Y-%m-%d

% T 時間(24小時制)(hh:mm:ss

cal? 2023

seq?

從1 開始 步長為2 ?到10 為止

從 20開始? 步長為 -1 到1 為止

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

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

相關文章

美國服務器在大陸連不上怎么回事?

?  在租用任何美國服務器之前,都需要先搞清楚一些使用問題,畢竟服務器能夠不間斷地訪問也是站在們所期望的。但有時,美國服務器網站或許也會突然出現在大陸打不開的情況,在面臨這種情況時,我們應該怎么做? 查看連不…

【史上最細教程】服務器MySQL數據庫完成主從復制

文章目錄 MySQL完成主從復制教程準備:原理:步驟: 推薦文章 MySQL完成主從復制教程 主從復制(也稱 AB 復制)就是將一個服務器(主服務器)的數據復制到一個或多個MySQL數據庫服務器(從…

Java飛翔的鳥

創建三個包,存放代碼。把圖片放進文件中 APP包(運行) GameApp類 package APP; import mian.GameFrame;public class GameApp {public static void main(String[] args) {new GameFrame();} } mian包(主內容) Barri…

python獲取json所有節點和子節點

使用python獲取json的所有父結點和子節點 并使用父節點加下劃線命名子節點 先展示一段json代碼 {"level1": {"level2": {"level3": [{"level4": "4value"},{"level4_2": "4_2value"}]},"level2_…

電力行業的智能調度:數字孿生技術

隨著科技的發展,數字孿生技術正逐漸滲透到各個行業領域,其中包括電力行業。數字孿生技術為電力行業帶來了前所未有的機遇,使得電力系統的運行更加高效、安全和可持續。本文借用山海鯨可視化軟件幾個電力行業數字孿生案例探討數字孿生技術在電…

介紹幾種Go語言開發的IDE

文章目錄 1.前言2.幾種ide2.1 Goland2.2 VsCode示例 2.3 LiteIDE2.4 Eclipse插件GoClipse2.5 Atom2.6 Vim2.7 Sublime Text 3.總結寫在最后 1.前言 Go語言作為一種新興的編程語言,近年來受到了越來越多的關注。 它以其簡潔、高效和并發性能而聞名,被廣…

Jmeter 壓測保姆級入門教程

1、Jmeter本地安裝 1.1、下載安裝 軟件下載地址: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 選擇一個壓縮包下載即可 然后解壓縮后進入bin目錄直接執行命令jmeter即可啟動 1.2 修改語言 默認是英文的,修改中文,點擊…

關于解決C# WinForm中Chart控件增刪數據時報錯的解決方法

1.報錯代碼 System.InvalidOperationExceptionHResult=0x80131509Message=集合已修改;可能無法執行枚舉操作。具體報錯表現為,在Application.Run(Form1())中斷。 2.解決方法 這個錯誤通常是由于在枚舉集合時對集合進行了修改而引起的。在修改完chart控件中的內容后,可能會…

Linux---常用命令匯總

文章目錄 關于目錄操作的命令ls/llcdpwdmkdir 關于文件操作的命令touchechocatrmmvcpvim 關于查詢操作的命令greppsnetstat 關于目錄操作的命令 ls/ll ls : 列出當前目錄下的目錄和文件(以行的展示形式) ll : 列出當前目錄下的目錄和文件&…

Django之Cookie與Session,CBV加裝飾器

前言 會話跟蹤技術 在一個會話的多個請求中共享數據,這就是會話跟蹤技術。例如在一個會話中的請求如下: ? 請求銀行主頁; 請求登錄(請求參數是用戶名和密碼);請求轉賬(請求參數與轉賬相關的數…

Thread類常用成員方法

點擊鏈接返回標題-> Java線程的學習-CSDN博客 目錄 前言 有關線程名字的成員方法: String getName() void setName(String name) Thread(String name) 獲取線程對象的成員方法: static Thread currentThread() 讓線程睡眠的成員方法&#xff1…

時間序列分析算法的概念、模型檢驗及應用

時間序列分析是一種用于研究隨時間變化的數據模式和趨勢的統計方法。這類數據通常按照時間順序排列,例如股票價格、氣溫、銷售額等。時間序列分析的目標是從過去的觀測中提取信息,以便預測未來的趨勢。 以下是關于時間序列分析的一些重要概念、模型檢驗…

python 數據類型之集合

常見的數據類型: int,整數類型(整形)bool,布爾類型str,字符串類型list,列表類型tuple,元組類型dict,字典類型,一個容器且元素必須是鍵值對。set,…

I Doc View在線文檔預覽系統RCE漏洞(QVD-2023-45061)

0x01 產品簡介 iDocView是一個在線文檔解析應用,旨在提供便捷的文件查看和編輯服務。 0x02 漏洞概述 漏洞成因 本次漏洞出現在在線文檔解析應用中的遠程頁面緩存功能。具體問題在于該應用未能對用戶輸入的URL進行充分的安全驗證,從而導致存在安全隱患…

前端實現菜單快速檢索的功能

前端CSS <style type"text/css">.btn-box {color: #fff;width: auto;border-radius: 25px;min-width: 40px;height: 40px;margin: 9px;line-height: 40px;display: inline-block;position: relative;overflow: hidden;background-image: linear-gradient(315de…

紅隊攻防實戰之內網穿透隱秘隧道搭建

別低頭&#xff0c;皇冠會掉&#xff1b;別流淚&#xff0c;賤人會笑。 本文首發于先知社區&#xff0c;原創作者即是本人 0x00 前言 構建內網隱蔽通道&#xff0c;從而突破各種安全策略限制&#xff0c;實現對目標服務器的完美控制。 當我們從外網成功獲得攻擊點的時候&…

SAP BAPI For LU01/LU04 記賬更改

場景&#xff1a;采購收貨質檢放行的時候&#xff0c;發現存在有些做QA11的時候&#xff0c;進入到TR-ZONE中&#xff0c;沒有進入到指定的倉位 解決方案&#xff1a;前端通過LU04進入&#xff0c;可以查看到一些未清的記賬更改通知單&#xff0c;點擊工具欄上的創建轉儲單&am…

Docker Swarm總結+service創建和部署、overlay網絡以及Raft算法(2/3)

博主介紹&#xff1a;Java領域優質創作者,博客之星城市賽道TOP20、專注于前端流行技術框架、Java后端技術領域、項目實戰運維以及GIS地理信息領域。 &#x1f345;文末獲取源碼下載地址&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&#x1f3fb;…

新的預測模型的局部評價指標-pAUROCc

新的預測模型的局部評價指標-pAUROCc Background 局部評價主要是用在不平衡數據上&#xff0c;其合理性&#xff1a;1.局部評價比全局評價敏感&#xff0c;更容易區分模型的優劣&#xff1b;2.臨床決策曲線&#xff08;DCA&#xff09;可知&#xff0c;模型使用過程中&#x…

什么是JSX

在React組件中&#xff0c;JSX&#xff08;JavaScript XML&#xff09;是一種語法擴展&#xff0c;用于描述組件的結構和外觀。JSX允許我們在JavaScript中編寫類似HTML的標記語言&#xff0c;以創建React元素。 在React組件中&#xff0c;render方法是用于定義并返回組件的結構…