最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本中if條件判斷的寫(xiě)法實(shí)例

 更新時(shí)間:2022年01月26日 10:19:31   作者:漫漫Coding路  
在寫(xiě)shell腳本的過(guò)程中,用到了if else的寫(xiě)法,突然有多個(gè)參數(shù)需要判斷,那么就想到了if else if的用法,這篇文章主要給大家介紹了關(guān)于Shell腳本中if條件判斷寫(xiě)法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

if…else… 可以說(shuō)是我們?cè)诰幊讨凶畛R?jiàn)的條件判斷語(yǔ)句了,那么在 Shell 中如何使用呢?如何判斷兩個(gè)數(shù)值相等?如何判斷一個(gè)文件是否存在?跟隨這篇文章,一起來(lái)學(xué)習(xí)吧!

條件判斷格式

在 Shell 中有兩種判斷格式,分別如下:

# 1. 第一種
test ?條件判斷式

# 2. 第二種,注意括號(hào)兩端必須有空格
[ ?條件判斷式 ] ? ?

第二種方式相當(dāng)于第一種的簡(jiǎn)化。那么我們?nèi)绾沃酪粋€(gè)條件判斷語(yǔ)句是否為真呢?其實(shí)在 Bash中的變量類型,還有這兩種! 的預(yù)定義變量部分 ,我們學(xué)習(xí)過(guò)如何判斷一個(gè)命令是否執(zhí)行成功,即 $? 是否等于 0,0表示執(zhí)行成功,否則表示上個(gè)命令失敗,條件判斷也是使用這種方式。

# 查看文件列表
[root@VM-0-5-centos ~]# ls
if.sh ?student.txt ?test.sh

# -e 文件名,用于判斷文件是否存在
[root@VM-0-5-centos ~]# test -e if.sh
[root@VM-0-5-centos ~]# echo $?
0

[root@VM-0-5-centos ~]# test -e if.ssss
[root@VM-0-5-centos ~]# echo $?
1

# 換個(gè)姿勢(shì),再來(lái)測(cè)試一遍
[root@VM-0-5-centos ~]# [ -e if.sh ]
[root@VM-0-5-centos ~]# echo $?
0
[root@VM-0-5-centos ~]# [ -e if.ssss ]
[root@VM-0-5-centos ~]# echo $?
1

if 語(yǔ)句

  • if 開(kāi)頭,fi 結(jié)尾
  • [ 條件判斷 ] 就是使用 test 命令判斷,兩端必須有空格
  • if 如果 和 then 在一行,需要加 ;

單分支

if [  條件判斷式 ];then
    命令
fi

或者 

if [  條件判斷式 ]
    then
        命令
fi

雙分支

if [  條件判斷式 ]
    then
        命令
else
        命令
fi

多分支

if [ 條件判斷式1 ]
    then
        命令
elif [ 條件判斷式2 ]
    then 
        命令
...

else
    命令
fi

條件判斷類型

按照文件類型進(jìn)行判斷

測(cè)試選項(xiàng)作用
-b 文件判斷該文件是否存在,并且是否為塊設(shè)備文件
-c 文件判斷該文件是否存在,并且是否為字符設(shè)備文件
-d 文件判斷該文件是否存在,并且是否為目錄文件
-e 文件判斷該文件是否存在
-f 文件判斷該文件是否存在,并且是否為普通文件
-L 文件判斷該文件是否存在,并且是否為符號(hào)鏈接文件
-p 文件判斷該文件是否存在,并且是否為管道文件
-s 文件判斷該文件是否存在,并且是否為空
-S 文件判斷該文件是否存在,并且是否為套接字文件
# 1. 新建一個(gè)腳本文件
[root@VM-0-5-centos ~]# vim file_test.sh

#!/bin/bash

read -p "please input filename: " filename

if [ -e $filename ]
? then
? ? ? ? echo "yes"
else
? ? ? ? echo "no"
fi

# 2. 添加可執(zhí)行權(quán)限
[root@VM-0-5-centos ~]# chmod 755 file_test.sh

# 3. 測(cè)試執(zhí)行
[root@VM-0-5-centos ~]# ./file_test.sh
please input filename: student.txt
yes
[root@VM-0-5-centos ~]# ./file_test.sh
please input filename: falsfja
no

為了測(cè)試各種判斷類型方便,我們可以直接使用如下方式測(cè)試,避免每次寫(xiě)腳本了。

# 一個(gè)命令正確執(zhí)行,輸出yes,否則輸出no
[root@VM-0-5-centos ~]# [ -e student.txt ] && echo 'yes' || echo 'no'
yes
[root@VM-0-5-centos ~]# [ -e sss ] && echo 'yes' || echo 'no'
no


[root@VM-0-5-centos ~]# [ -d mydir/ ] && echo 'yes' || echo 'no'
yes
[root@VM-0-5-centos ~]# [ -d student.txt ] && echo 'yes' || echo 'no'
no

按照文件權(quán)限進(jìn)行判斷

測(cè)試選項(xiàng)作用
-r 文件判斷該文件是否存在,并且是否擁有讀權(quán)限
-w 文件判斷該文件是否存在,并且是否擁有寫(xiě)權(quán)限
-x 文件判斷該文件是否存在,并且是否擁有執(zhí)行權(quán)限
[root@VM-0-5-centos ~]# [ -x file_test.sh ] && echo 'yes' || echo 'no'
yes

[root@VM-0-5-centos ~]# [ -x student.txt ] && echo 'yes' || echo 'no'
no

文件之間比較

測(cè)試選項(xiàng)作用
文件1 -nt 文件2判斷文件1的修改時(shí)間是否比文件2的新
文件1 -ot 文件2判斷文件1的修改時(shí)間是否比文件2的舊
文件1 -ef 文件2判斷文件1是否和文件2的Inode號(hào)一致,可以理解兩個(gè)文件是否為同一個(gè)文件。這個(gè)判斷用于判斷硬鏈接是個(gè)很好的方法。
# 創(chuàng)建硬鏈接后測(cè)試
[root@VM-0-5-centos ~]# ln student.txt /tmp/student.txt

[root@VM-0-5-centos ~]# [ student.txt -ef /tmp/student.txt ] && echo 'yes' || echo 'no'
yes

[root@VM-0-5-centos ~]# [ student.txt -ef /tmp/stargate.lock ] && echo 'yes' || echo 'no'
no

整數(shù)之間比較

測(cè)試選項(xiàng)作用
整數(shù)1 -eq 整數(shù)2整數(shù)1是否和整數(shù)2相等
整數(shù)1 -ne 整數(shù)2整數(shù)1是否和整數(shù)2不等
整數(shù)1 -gt 整數(shù)2整數(shù)1是否大于整數(shù)2
整數(shù)1 -lt 整數(shù)2整數(shù)1是否小于整數(shù)2
整數(shù)1 -ge 整數(shù)2整數(shù)1是否大于等于整數(shù)2
整數(shù)1 -le 整數(shù)2整數(shù)1是否小于等于整數(shù)2
[root@VM-0-5-centos ~]# [ 10 -eq 10 ] ?&& echo 'yes' || echo 'no'
yes

[root@VM-0-5-centos ~]# [ 10 -gt 5 ] ?&& echo 'yes' || echo 'no'
yes

[root@VM-0-5-centos ~]# [ 10 -lt 5 ] ?&& echo 'yes' || echo 'no'
no

字符串的判斷

測(cè)試選項(xiàng)作用
-z 字符串字符串是否為空
-n 字符串字符串是否非空
字符串1 == 字符串2字符串是否相等
字符串1 != 字符串2字符串是否不等

if 判斷中對(duì)于變量的處理,需要加引號(hào),如果沒(méi)有加雙引號(hào),可能會(huì)在判斷含空格的字符串變量的時(shí)候產(chǎn)生錯(cuò)誤。

[root@VM-0-5-centos ~]# name=""

# 不見(jiàn)引號(hào),判斷出的 name 是非空,其實(shí)是空
[root@VM-0-5-centos ~]# ?[ -n $name ] && echo 'yes' || echo 'no'
yes

# 加上引號(hào)就對(duì)了
[root@VM-0-5-centos ~]# ?[ -n "$name" ] && echo 'yes' || echo 'no'
no


[root@VM-0-5-centos ~]# name1=hello
[root@VM-0-5-centos ~]# name2=world
[root@VM-0-5-centos ~]# [ "$name1" != "$name2" ] && echo 'yes' || echo 'no'
yes
[root@VM-0-5-centos ~]# [ "$name1" == "$name2" ] && echo 'yes' || echo 'no'
no

多重條件判斷

測(cè)試選項(xiàng)作用
判斷1 -a 判斷2邏輯與
判斷1 -o 判斷2邏輯或
!判斷邏輯非
[root@VM-0-5-centos ~]# a=hello

[root@VM-0-5-centos ~]# [ -n "$a" -a "$a" == "hello" ] && echo 'yes' || echo 'no'
yes

[root@VM-0-5-centos ~]# [ -n "$a" -a "$a" == "world" ] && echo 'yes' || echo 'no'
no

附:Shell if 判斷語(yǔ)句參數(shù)

[ -a FILE ] 如果 FILE 存在則為真。

[ -b FILE ] 如果 FILE 存在且是一個(gè)塊特殊文件則為真。

[ -c FILE ] 如果 FILE 存在且是一個(gè)字特殊文件則為真。

[ -d FILE ] 如果 FILE 存在且是一個(gè)目錄則為真。

[ -e FILE ] 如果 FILE 存在則為真。

[ -f FILE ] 如果 FILE 存在且是一個(gè)普通文件則為真。

[ -g FILE ] 如果 FILE 存在且已經(jīng)設(shè)置了SGID則為真。

[ -h FILE ] 如果 FILE 存在且是一個(gè)符號(hào)連接則為真。

[ -k FILE ] 如果 FILE 存在且已經(jīng)設(shè)置了粘制位則為真。

[ -p FILE ] 如果 FILE 存在且是一個(gè)名字管道(F如果O)則為真。

[ -r FILE ] 如果 FILE 存在且是可讀的則為真。

[ -s FILE ] 如果 FILE 存在且大小不為0則為真。

[ -t FD ] 如果文件描述符 FD 打開(kāi)且指向一個(gè)終端則為真。

[ -u FILE ] 如果 FILE 存在且設(shè)置了SUID (set user ID)則為真。

[ -w FILE ] 如果 FILE 如果 FILE 存在且是可寫(xiě)的則為真。

[ -x FILE ] 如果 FILE 存在且是可執(zhí)行的則為真。

[ -O FILE ] 如果 FILE 存在且屬有效用戶ID則為真。

[ -G FILE ] 如果 FILE 存在且屬有效用戶組則為真。

[ -L FILE ] 如果 FILE 存在且是一個(gè)符號(hào)連接則為真。

[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read則為真。

[ -S FILE ] 如果 FILE 存在且是一個(gè)套接字則為真。

[ 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 指向相同的設(shè)備和節(jié)點(diǎn)號(hào)則為真。

[ -o OPTIONNAME ] 如果 shell選項(xiàng) “OPTIONNAME” 開(kāi)啟則為真。

[ -z STRING ] “STRING” 的長(zhǎng)度為零則為真。

[ -n STRING ] or [ STRING ] “STRING” 的長(zhǎng)度為非零 non-zero則為真。

[ STRING1 == STRING2 ] 如果2個(gè)字符串相同。 “=” may be used instead of “==” for strict POSIX compliance則為真。

[ STRING1 != STRING2 ] 如果字符串不相等則為真。

[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale則為真。

[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale則為真。

[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.

總結(jié)

本篇文章首先介紹了條件判斷的格式以及原理,然后介紹了 if 語(yǔ)句的格式,最后介紹了多個(gè)條件判斷類型。內(nèi)容比較多,熟能生巧,快操練起來(lái)吧!

到此這篇關(guān)于Shell腳本中if條件判斷寫(xiě)法的文章就介紹到這了,更多相關(guān)Shell腳本if條件判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Linux與Windows上獲取當(dāng)前堆棧信息的方法

    在Linux與Windows上獲取當(dāng)前堆棧信息的方法

    下面小編就為大家?guī)?lái)一篇在Linux與Windows上獲取當(dāng)前堆棧信息的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 非常簡(jiǎn)單的Shell菜單腳本

    非常簡(jiǎn)單的Shell菜單腳本

    這篇文章主要為大家詳細(xì)介紹了非常簡(jiǎn)單的Shell菜單腳本,傻瓜式的人機(jī)交互,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • shell腳本配置hostname的方法步驟

    shell腳本配置hostname的方法步驟

    本文主要介紹了shell腳本配置hostname的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 如何使用 Shell 腳本執(zhí)行 .NET Core 應(yīng)用

    如何使用 Shell 腳本執(zhí)行 .NET Core 應(yīng)用

    這篇文章主要介紹了如何使用 Shell 腳本執(zhí)行 .NET Core 應(yīng)用,幫助大家更好的理解和使用shell 腳本,感興趣的朋友可以了解下
    2020-09-09
  • linux文本分析awk基礎(chǔ)命令介紹(8)

    linux文本分析awk基礎(chǔ)命令介紹(8)

    這篇文章主要為大家詳細(xì)介紹了linux文本分析awk基礎(chǔ)命令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • linux 下實(shí)現(xiàn)sleep詳解及簡(jiǎn)單實(shí)例

    linux 下實(shí)現(xiàn)sleep詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了linux 下實(shí)現(xiàn)sleep詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Shell腳本實(shí)現(xiàn)MySQL、Oracle、PostgreSQL數(shù)據(jù)庫(kù)備份

    Shell腳本實(shí)現(xiàn)MySQL、Oracle、PostgreSQL數(shù)據(jù)庫(kù)備份

    本文主要介紹了Shell腳本實(shí)現(xiàn)MySQL、Oracle、PostgreSQL數(shù)據(jù)庫(kù)備份,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • Shell函數(shù)的7種用法介紹

    Shell函數(shù)的7種用法介紹

    這篇文章主要介紹了Shell函數(shù)的7種用法介紹,本文講解了在shell文件內(nèi)部定義函數(shù)并引用、返回值、函數(shù)輸出、向函數(shù)傳遞參數(shù)、全局變量與局部變量等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • 詳解shell腳本的編寫(xiě)規(guī)范

    詳解shell腳本的編寫(xiě)規(guī)范

    這篇文章主要介紹了編寫(xiě)shell腳本的規(guī)范,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • shell實(shí)現(xiàn)SSH自動(dòng)登陸的方法示例

    shell實(shí)現(xiàn)SSH自動(dòng)登陸的方法示例

    這篇文章主要介紹了shell實(shí)現(xiàn)SSH自動(dòng)登陸的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論

永城市| 兴安盟| 临清市| 额济纳旗| 泉州市| 腾冲县| 芦山县| 博爱县| 阜新市| 许昌县| 九寨沟县| 岢岚县| 兴国县| 哈巴河县| 罗平县| 奉化市| 深州市| 吴江市| 延川县| 阿瓦提县| 沂源县| 舒城县| 会昌县| 宜兰市| 泾川县| 庆城县| 腾冲县| 砀山县| 隆林| 泰兴市| 九江市| 论坛| 手游| 漠河县| 茌平县| 中阳县| 济阳县| 德庆县| 喀喇| 瓦房店市| 石楼县|