shell 編程(三)

條件測試命令????????

? ? ? ? 條件測試:判斷某需求是否滿足,需要有測試機制來實現 專用的測試表達式需要由測試命令輔助完成測試過程,評估布爾生命,以便用在條件性執行中

????????若真,則狀態碼變量$? 返回0? ? ?//??echo $? 打印0

? ? ? ? 反之返回1

? ? ? ? test EXPRESSIOIN

? ? ? ? [ EXPRESSION ]

? ? ? ? [[ EXPRESSION ]]

? ? ? ? 注:EXPRESSION前后必須有空白字符

help test 查看test命令具體用法

變量測試

-v VAR? ? ?變量VAR 是否設置

示例: 判斷NAME變量是否定義

[ -v NAME ] // 注意括號? [] 和test 是等價

test -v NAME?

echo $? 0 定義? 1未定義

數值測試

-gt 是否大于

-ge 是否大于等于

-eq 是否等于

-ne 是否不等于

-lt 是否小于

-le 是否小于等于

?示例: 如果使用變量必須要加$

qgy@qgy-VMware-Virtual-Platform:~$?test 10 -gt 8?
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test 10 -eq 8?
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$ test 10 -ne 10?
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$ test 10 -eq 10?
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0

qgy@qgy-VMware-Virtual-Platform:~$ [ 8 -eq 9 ]
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
?

? ? ? ?

字符串測試

-z "STRING" 字符串是否為空,空為真,不空為假

-n "STRING" 字符串是否不空,不空為真

=? 是否等于

> ASCII 碼是否大于ASCII碼

< 是否小于

!= 是否不等于

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

? ? ? ?注意:此表達式用于[[ ]]中,pattern 為通配符

=~ 左側字符串是否能夠被右側的pattern所匹配

? ? ? ?注意:此表達式用于[[ ]] 中,pattern 為拓展的表達式

qgy@qgy-VMware-Virtual-Platform:~$ unset NAME?
qgy@qgy-VMware-Virtual-Platform:~$ NAME="qgy"
qgy@qgy-VMware-Virtual-Platform:~$ test -n $NAME
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test -z $NAME
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME = "YGQ"
qgy@qgy-VMware-Virtual-Platform:~$ echo $??
1
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME = "qgy"
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME > "dd"
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "dd"
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ echo $NAME
qgy
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "DD"
bash: DD: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "dd"
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "DD"
bash: DD: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < "DH"
bash: DH: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ NICKNAME="DH"
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < $NICKNAME
bash: DH: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ ^C
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME \< $NICKNAME
qgy@qgy-VMware-Virtual-Platform:~$ LS
LS: command not found
qgy@qgy-VMware-Virtual-Platform:~$ ls
dd ?Desktop ?Documents ?Downloads ?Music ?myFile ?Pictures ?Public ?snap ?Templates ?Videos ?windowsFile
qgy@qgy-VMware-Virtual-Platform:~$ cd dd
bash: cd: dd: Not a directory
qgy@qgy-VMware-Virtual-Platform:~$ cat dd
qgy@qgy-VMware-Virtual-Platform:~$ file dd
dd: empty
qgy@qgy-VMware-Virtual-Platform:~$ ls -l dd
-rw-rw-r-- 1 qgy qgy 0 Dec 24 16:33 dd
qgy@qgy-VMware-Virtual-Platform:~$ rm dd
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME -lt $"dd"
bash: test: qgy: integer expression expected
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME -lt "dd"
bash: test: qgy: integer expression expected
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME < ?"dd"
bash: dd: No such file or directory
qgy@qgy-VMware-Virtual-Platform:~$ test $NAME \< ?"dd"? // 需要使用轉義否則被視為重定向

qgy@qgy-VMware-Virtual-Platform:~$ [[ $NAME == [a-z]* ]]
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
0
qgy@qgy-VMware-Virtual-Platform:~$ [[ $NAME == [A-Z]* ]]
qgy@qgy-VMware-Virtual-Platform:~$ echo $?
1
qgy@qgy-VMware-Virtual-Platform:~$

關于== 和=~

root@qgy-VMware-Virtual-Platform:~# [[ $FILE == *.log ]]? ?// 使用通配符
root@qgy-VMware-Virtual-Platform:~# echo $?
0
root@qgy-VMware-Virtual-Platform:~# [[ $FILE =~ log$ ]]? ?// 使用正則表達式
root@qgy-VMware-Virtual-Platform:~# echo $?
0

文件測試(使用[] 或者test)

?存在性測試

-a? ? ? ? FILE: 同 -e

-e? ? ? ? FILE: 文件存在測試,存在為真

-b? ? ? ? FILE: 是否存在且為塊設備文件

-c? ? ? ? FILE: 是否存在且為字符設備文件

-d? ? ? ? FILE: 是否存在且為目錄文件

-f? ? ? ? ?FILE: 是否存在且為普通文件

-h? ? ? ? FILE: 或 -L FILE: 存在且為符號鏈接文件

-p? ? ? ? FILE: 是否存在且為命令管道文件

-s? ? ? ? FILE: 是否存在且為套接字文件

文件權限測試

-r? ? ? ? FILE: 是否存在且可讀

-w? ? ? ?FILE: 是否存在且可寫

-x? ? ? ? FILE: 是否存在且可執行

-u? ? ? ? FILE: 是否存在且擁有suid權限

-g? ? ? ? FILE: 是否存在且擁有sgid權限

-k? ? ? ? FILE: 是否存在且擁有sticky權限

文件屬性測試

-s? ? ? ? FILE: 是否存在且非空

-t? ? ? ? fd:? fd文件描述符是否在某終端已打開

-N? ? ? ? FILE: 文件自從上一次被讀取之后是否被修改

-O? ? ? ? FILE: 當前有效用戶是否為文件屬主

-G? ? ? ? FILE: 當前有效用戶是否為文件屬組

FILE? ? ? ? -ef? ? ? ? FILE2: FILE 是否是FILE2的硬鏈接

FILE? ? ? ? -nt? ? ? ? FILE2: FILE 是否新于FILE2

FILE? ? ? ? -et? ? ? ? FILE2: FILE 是否舊于FILE2?

組合測試條件

? ? ? ?第一種方法

[ expression1 -a expression2 ] 并且

[ e1 -o e2 ] 或者

[ ! e1 ] 取反

說明: -a 和 -o 需要使用test 測試命令進行 [[? ]] 不支持?

示例:

root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# File=first.txt
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File -a -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
1
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# ll
total 8
drwxr-xr-x ?2 root root 4096 Dec 24 20:25 ./
drwxr-xr-x 14 root root 4096 Dec 24 20:23 ../
-rw-r--r-- ?2 root root ? ?0 Dec 24 20:23 first.txt
-rw-r--r-- ?2 root root ? ?0 Dec 24 20:23 HFirst.txt
lrwxrwxrwx ?1 root root ? ?9 Dec 24 20:24 sFirst.txt -> first.txt
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File -a ! -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
0
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test#?
?

? ? ? ?第二種方法?

command1 && command2? 與操作? command1和command2都為真 為真

command1 ||?command2? 與操作? command1和command2都為假?為假

! command1 取反

示例:


root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File ] && [ ! -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
0
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# [ -f $File ] || ?[ ! -x $File ]
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# echo $?
0
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test#??id wang &> /dev/null || useradd wang // 如果不存在用戶wang則建立用戶wang

lucky boy

? ? ? ? [ $[RANDOM%6 ] -eq 0 ] && rm -rf? /* ?|| echo "lucky boy"?

grep -q no_such_user /etc/passwd? ? ? ||? ?echo? ?"no such user"? // -q 不管找不找的到不在界面上顯示結果?

示例:

#!/bin/bash

IP=127,0,0,1

ping -c10 -w1 $IP &> /dev/null? && echo "$IP is up"? || { echo "$IP is unreachable";echo $BASHPID;sleep 1000; exit 1} #{} 表示命令在本bash進程中執行 如果換成括號表示在新創建的bash 子進程中執行? ?exit 表示退出命令執行的bash進程? ; 表示順序執行

echo "Scirpt is finished"

關于子shell 中繼承父shell ,然后修改的問題

執行()中的shell 命令會創建子shell ,然后命令在子shell 中執行

root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# NAME=mage;(echo $NAME;NAME=wang;echo $NAME);echo $NAME
mage
wang
mage
root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test#

{} 中的shell 命令仍然在本shell 中運行

root@qgy-VMware-Virtual-Platform:/home/qgy/myFile/Test# NAME=mage;{ echo $NAME;NAME=wang;echo $NAME; };echo $NAME
mage
wang
wang
?

搜索shell 中()和{ }的用法?

man bash?

/\(list\) 查看bash 中() 的用法

umask 的使用?

umask 命令的使用:

umask 是 Linux/Unix 系統中用于設置文件和目錄默認權限的命令。

1. 基礎概念:

umask 設置的是權限掩碼,決定新創建文件或目錄的默認權限。

  • 文件默認權限:666(可讀寫,無執行權限)
  • 目錄默認權限:777(可讀、可寫、可執行)

注意:

  • 新建文件默認沒有執行權限,執行權限需要手動賦予。

文件權限 = 666 - umask值

目錄權限 = 777 - umask值

?

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

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

相關文章

八股(One Day one)

最近老是看到一些面試的視頻&#xff0c;對于視頻內部面試所提到的八股文&#xff0c;感覺是知道是什么&#xff0c;但是要說的話&#xff0c;卻又不知道該怎么說&#xff08;要不咋稱之為八股文呢&#xff09;&#xff0c;所以就想到寫一篇八股文總結的博客&#xff0c;以便進…

Rust 在前端基建中的使用

摘要 隨著前端技術的不斷發展&#xff0c;前端基礎設施&#xff08;前端基建&#xff09;的建設已成為提升開發效率、保障產品質量的關鍵環節。然而&#xff0c;在應對復雜業務場景與高性能需求時&#xff0c;傳統的前端技術棧逐漸暴露出諸多不足。近年來&#xff0c;Rust語言…

豆包MarsCode:a替換函數

問題描述 思路分析 在這個問題中&#xff0c;我們的目標是將字符串中的所有小寫字母 a 替換為 "%100"。為了實現這一點&#xff0c;我們需要分析問題的核心需求和合理的解決方案。以下是分析和思路的詳細步驟&#xff1a; 1. 理解問題 給定一個字符串 s&#xff0…

人臉生成3d模型 Era3D

從單視圖圖像進行3D重建是計算機視覺和圖形學中的一項基本任務&#xff0c;因為它在游戲設計、虛擬現實和機器人技術中具有潛在的應用價值。早期的研究主要依賴于直接在體素上進行3D回歸&#xff0c;這往往會導致過于平滑的結果&#xff0c;并且由于3D訓練數據的限制&#xff0…

【點估計】之Python實現

點估計是一種統計推斷方法,它利用樣本數據來估計總體的未知參數。在概率論和數理統計的框架下,點估計將總體的未知參數視為一個確定的值或一個具體的點,并試圖通過樣本數據來找到這個值的最佳估計。以下是對點估計的詳細解釋: 一、定義與原理 定義:點估計是根據樣本數據估…

rust與python互通

互通三件套 rust側與python互通的三個庫&#xff1a; pyo3 pythonize serde pyo3 pyo3跟用Python C API寫python擴展有點類似&#xff0c;核心是&#xff1a; #[pymodule] #[pyfunction]兩個注解。前者對應Py_InitModule&#xff0c;后者對應PyMethodDef。 下面是其它博…

Ubuntu系統下 npm install -g tauri 報錯問題處理

處理在安裝 Tauri 時遇到的問題&#xff0c;可以按照以下步驟進行操作 npm install -g taurinpm warn deprecated inflight1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async …

信貸域——互聯網金融理論基礎

摘要 互聯網金融這種新興的金融業態近幾年飛速發展&#xff0c;規模不斷擴大&#xff0c;互聯網金融在對我國金融體系和經濟發展影響中所占的分量越來越重&#xff0c;一定程度上也推動了互聯網金融理論的發展。 互聯網金融與傳統金融都是金融&#xff0c;有著相近的理論基礎。…

C++軟件設計模式之享元模式(FlyWeight)

享元&#xff08;Flyweight&#xff09;模式的動機與意圖 動機 享元模式的主要動機是通過共享對象來減少內存使用&#xff0c;從而提高系統的性能。在某些情況下&#xff0c;系統中可能有大量細粒度的對象&#xff0c;這些對象具有共同的部分狀態&#xff0c;而這些狀態可以共…

LightGBM分類算法在醫療數據挖掘中的深度探索與應用創新(上)

一、引言 1.1 醫療數據挖掘的重要性與挑戰 在當今數字化醫療時代,醫療數據呈爆炸式增長,這些數據蘊含著豐富的信息,對醫療決策具有極為重要的意義。通過對醫療數據的深入挖掘,可以發現潛在的疾病模式、治療效果關聯以及患者的健康風險因素,從而為精準醫療、個性化治療方…

|-牛式-|

題目描述 下面是一個乘法豎式&#xff0c;如果用我們給定的那幾個數字來取代 * &#xff0c;可以使式子成立的話&#xff0c;我們就叫這個式子牛式。 * * * x * * ------- * * * * * * ------- * * * * 數字只能取代 * &#xff0c;當然第一位不能為 0 。 寫一個程序找…

es 3期 第18節-分頁查詢使用避坑的一些事

#### 1.Elasticsearch是數據庫&#xff0c;不是普通的Java應用程序&#xff0c;傳統數據庫需要的硬件資源同樣需要&#xff0c;提升性能最有效的就是升級硬件。 #### 2.Elasticsearch是文檔型數據庫&#xff0c;不是關系型數據庫&#xff0c;不具備嚴格的ACID事務特性&#xff…

STM32串口第一次接收數據時第一個字節丟失的問題

解決方法&#xff1a;開啟中斷之前&#xff0c;先清除標志位【1】。 串口清除標志位&#xff1a; __HAL_UART_CLEAR_PEFLAG(&huart1); HAL_UART_Receive_IT(&huart1,&RxUart, 1); 定時器清除標志位&#xff1a; __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);…

深度學習中的殘差網絡、加權殘差連接(WRC)與跨階段部分連接(CSP)詳解

隨著深度學習技術的不斷發展&#xff0c;神經網絡架構變得越來越復雜&#xff0c;而這些復雜網絡在訓練時常常遇到梯度消失、梯度爆炸以及計算效率低等問題。為了克服這些問題&#xff0c;研究者們提出了多種網絡架構&#xff0c;包括 殘差網絡&#xff08;ResNet&#xff09;、…

Pytorch | 從零構建EfficientNet對CIFAR10進行分類

Pytorch | 從零構建EfficientNet對CIFAR10進行分類 CIFAR10數據集EfficientNet設計理念網絡結構性能特點應用領域發展和改進 EfficientNet結構代碼詳解結構代碼代碼詳解MBConv 類初始化方法前向傳播 forward 方法 EfficientNet 類初始化方法前向傳播 forward 方法 訓練過程和測…

Vue 2 中實現雙擊事件的幾種方法

在 Vue 2 中處理用戶交互&#xff0c;特別是雙擊事件&#xff0c;是一個常見的需求。Vue 提供了一種簡潔的方式來綁定事件&#xff0c;包括雙擊事件。本文將介紹幾種在 Vue 2 中實現雙擊事件的方法。 1. 使用 dblclick 指令 Vue 允許你直接在模板中使用 dblclick 指令來監聽雙…

音視頻入門基礎:MPEG2-TS專題(20)——ES流簡介

《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27頁對ES進行了定義。ES流是PES packets&#xff08;PES包&#xff09;中編碼的視頻、編碼的音頻或其他編碼的比特流。一個ES流&#xff08;elementary stream&#xff09;在具有且只有一個stream_id的PES packets序列中攜帶&#xff1…

天水月亮圈圈:舌尖上的歷史與傳承

在天水甘谷縣&#xff0c;有一種美食如同夜空中的明月&#xff0c;散發著獨特的魅力&#xff0c;它就是有著百年歷史的月亮圈圈。月亮圈圈原名甘谷酥圈圈&#xff0c;據傳&#xff0c;由大像山鎮蔣家莊一姓李的廚師創制而成&#xff0c;后經王明玖等廚師的光大傳承&#xff0c;…

YOLOv11融合[CVPR2023]FFTformer中的FSAS模塊

YOLOv11v10v8使用教程&#xff1a; YOLOv11入門到入土使用教程 YOLOv11改進匯總貼&#xff1a;YOLOv11及自研模型更新匯總 《Efficient Frequency Domain-based Transformers for High-Quality Image Deblurring》 一、 模塊介紹 論文鏈接&#xff1a;https://arxiv.org/abs…

java如何使用poi-tl在word模板里渲染多張圖片

1、poi-tl官網地址 http://deepoove.com/poi-tl/ 2、引入poi-tl的依賴 <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version></dependency>3、定義word模板 釋義&#xf…