shell 條件語句

目錄

測試

?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/161593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161593.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161593.shtml

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

相關文章

springboot啟動過程

1、SpringApplication new一個對象會優先調用initialize方法 public SpringApplication(Object... sources) {initialize(sources); } private void initialize(Object[] sources) {//添加配置類SpringBootApplicationif (sources ! null && sources.length > 0) …

關于一些bug的解決1、el-input的輸入無效2、搜索之后發現數據不對3、el多選框、單選框點擊無用4、

el-input輸入無效 原來的代碼是 var test null 但是我發現不能輸入任何值 反倒修改test的初始值為123是可以的 于是我確定綁定沒問題 就是修改的問題 于是改成 var test ref() v-model綁定的值改成test.value就可以了 因為ref是相應式的 可以通過輸入…

【算法】奇偶游戲(帶權并查集)

題目 小 A 和小 B 在玩一個游戲。 首先,小 A 寫了一個由 0 和 1 組成的序列 S,長度為 N。 然后,小 B 向小 A 提出了 M 個問題。 在每個問題中,小 B 指定兩個數 l 和 r,小 A 回答 S[l~r] 中有奇數個 1 還是偶數個 …

cocos2dx ??Animate3D(三)

一些總結 動作(Actions) move移動:moveto/moveby 從一個位置移動到另外一個位置 從一個位置移動多少數量級rotate旋轉:rotateto/rotateby 從一個角度旋轉到另外一個角度 旋轉多少個數量級scale縮放:scaleto/scaleby …

vue實現瀏覽器禁止鼠標選中文字禁止右鍵禁止F12鍵

1. 禁止鼠標選中文字 document.onselectstart new Function("event.returnValuefalse");2.禁止右鍵 document.oncontextmenu new Function("event.returnValuefalse");3. 禁止F12鍵 document.addEventListener("keydown", function (e) {if…

Go語言多線程爬蟲萬能模板它來了!

對于長期從事爬蟲行業的技術員來說,通過技術手段實現抓取海量數據并且做到可視化處理,我在想如果能寫一個萬能的爬蟲模板,后期遇到類似的工作只要套用模板就能解決大部分的問題,如此提高工作效率何樂而不為? 以下是一個…

有關Vue、微信小程序、UniApp中的CSS中的寬度width單位、自適應

在Vue中,可以使用以下單位來設置寬度(width) 像素(px):最常用的單位,表示一個絕對長度單位。例如,width: 200px; 表示寬度為200像素。百分比(%):…

Mac自帶的看圖如何連續查看多張圖片

一、問題 mac看訪達里的圖片時,雙擊打開一張圖片,然后按上下左右鍵都沒法切換到另外的圖片。而且也沒找到像window一樣單擊縮略圖可以看到預覽圖。其實是自己不懂得怎么使用,哈哈哈😂 二、方法 2.1、圖標方式 可以看到縮略圖&a…

新的centos7.9安裝jenkins(二)

更多ruoyi-nbcio功能請看演示系統 gitee源代碼地址 前后端代碼: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后臺管理系統 接上一節文章。 這個版本默認git也安裝好了,所以全局配置這個不需要了。 maven安裝3.9.3版本…

前綴和——DP35 【模板】二維前綴和

文章目錄 🍎1. 題目🍒2. 算法原理🍅3. 代碼實現 🍎1. 題目 題目鏈接:【模板】二維前綴和_牛客題霸_牛客網 (nowcoder.com) 描述 給你一個 n 行 m 列的矩陣 A ,下標從1開始。 接下來有 q 次查詢&#xff0…

ElasticSearch的日志配置

ElasticSearch默認情況下使用Log4j2來記錄日志,日志配置文件的路徑為$ES_HOME/config/log4j2.properties,配置方法見Log4j2的官方文檔。 參考path-settings,通過指定path.logs,可以指定日志文件的保存路徑。 在日志配置文件$ES_…

【OpenCV實現圖像:使用OpenCV生成拼圖效果】

文章目錄 概要通用配置不考慮間隔代碼實現考慮間隔代碼實現小結 概要 概要: 拼圖效果是一種將圖像切割為相鄰正方形并重新排列的藝術效果。在生成拼圖效果時,可以考慮不同的模式,包括是否考慮間隔和如何處理不能整除的部分。 不考慮間隔&a…

【NLP】GPT 模型如何工作

介紹 2021 年,我使用 GPT 模型編寫了最初的幾行代碼,那時我意識到文本生成已經達到了拐點。我要求 GPT-3 總結一份很長的文檔,并嘗試了幾次提示。我可以看到結果比以前的模型先進得多,這讓我對這項技術感到興奮,并渴望…

HQL刷題 50道

HQL刷題 50道 尚硅谷HQL刷題網站 答案 1.查詢累積銷量排名第二的商品 select sku_id from (select sku_id, dense_rank() over (order by total desc) rnfrom (select sku_id, sum(sku_num) totalfrom order_detailgroup by sku_id) t1) t2 where rn 2;2.查詢至少連續三天下…

php 時區查看和設置

php的時區&#xff0c;關系到相關時間函數的結果 其他相關&#xff1a; linux時區設置&#xff1a;鏈接 pgsql時區設置&#xff1a; 一、查看可以用的時區列表 新建一個php文件&#xff0c;輸入下面程序即可 <?php echo "<pre>"; var_dump(timezone_id…

基于go-zero的rpc服務示例

以下是一個基于 go-zero 框架的簡單 RPC 服務示例&#xff0c;該示例包括一個服務端和一個客戶端通過 gRPC 進行通信。 服務端 1、定義 .proto 文件 在 rpc/add 目錄下創建 adder.proto 文件&#xff0c;定義 RPC 服務&#xff1a; syntax "proto3";package add…

IOS+Appium+Python自動化全實戰教程

由于公司的產品坐落于不同的平臺&#xff0c;如ios、mac、Android、windows、web。因此每次有新需求的時候&#xff0c;開發結束后&#xff0c;留給測試的時間也不多。此外&#xff0c;一些新的功能實現&#xff0c;偶爾會影響其他的模塊功能正常的使用。 網上的ios自動化方面的…

MyBatis-Plus的分頁插件和樂觀鎖插件

MyBatis-Plus: 探索分頁查詢和樂觀鎖插件 在現代的Web應用開發中&#xff0c;高效的數據處理是不可或缺的一部分。MyBatis-Plus&#xff0c;作為MyBatis的增強版&#xff0c;提供了多種插件來簡化和優化數據庫操作。在這篇博客中&#xff0c;我們將重點介紹兩個非常實用的插件…

09_面向對象高級_泛型

泛型 1. 認識泛型 定義類、接口、方法時&#xff0c;同時聲明了一個或多個類型變量&#xff08;如&#xff1a;&#xff09;&#xff0c;稱為泛型類、泛型接口、泛型方法、它們統稱為泛型。 2. 泛型類 public class Test {public static void main(String[] args) {MyArray…

計算機網絡之物理層(數據通信有關)

一、概述 1.1物理層引入的目的 屏蔽掉傳輸介質的多樣性&#xff0c;導致數據傳輸方式的不同&#xff1b;物理層的引入使得高層看到的數據都是統一的0,1構成的比特流 1.2.物理層如何實現屏蔽 物理層靠定義的不同的通信協議&#xff08;一般稱通信規程&#xff09; 這些協議…