欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本中if條件判斷的寫法實例

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

前言

if…else… 可以說是我們在編程中最常見的條件判斷語句了,那么在 Shell 中如何使用呢?如何判斷兩個數(shù)值相等?如何判斷一個文件是否存在?跟隨這篇文章,一起來學習吧!

條件判斷格式

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

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

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

第二種方式相當于第一種的簡化。那么我們如何知道一個條件判斷語句是否為真呢?其實在 Bash中的變量類型,還有這兩種! 的預定義變量部分 ,我們學習過如何判斷一個命令是否執(zhí)行成功,即 $? 是否等于 0,0表示執(zhí)行成功,否則表示上個命令失敗,條件判斷也是使用這種方式。

# 查看文件列表
[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

# 換個姿勢,再來測試一遍
[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 語句

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

單分支

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

或者 

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

雙分支

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

多分支

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

else
    命令
fi

條件判斷類型

按照文件類型進行判斷

測試選項作用
-b 文件判斷該文件是否存在,并且是否為塊設備文件
-c 文件判斷該文件是否存在,并且是否為字符設備文件
-d 文件判斷該文件是否存在,并且是否為目錄文件
-e 文件判斷該文件是否存在
-f 文件判斷該文件是否存在,并且是否為普通文件
-L 文件判斷該文件是否存在,并且是否為符號鏈接文件
-p 文件判斷該文件是否存在,并且是否為管道文件
-s 文件判斷該文件是否存在,并且是否為空
-S 文件判斷該文件是否存在,并且是否為套接字文件
# 1. 新建一個腳本文件
[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í)行權限
[root@VM-0-5-centos ~]# chmod 755 file_test.sh

# 3. 測試執(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

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

# 一個命令正確執(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

按照文件權限進行判斷

測試選項作用
-r 文件判斷該文件是否存在,并且是否擁有讀權限
-w 文件判斷該文件是否存在,并且是否擁有寫權限
-x 文件判斷該文件是否存在,并且是否擁有執(zhí)行權限
[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

文件之間比較

測試選項作用
文件1 -nt 文件2判斷文件1的修改時間是否比文件2的新
文件1 -ot 文件2判斷文件1的修改時間是否比文件2的舊
文件1 -ef 文件2判斷文件1是否和文件2的Inode號一致,可以理解兩個文件是否為同一個文件。這個判斷用于判斷硬鏈接是個很好的方法。
# 創(chuàng)建硬鏈接后測試
[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ù)之間比較

測試選項作用
整數(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

字符串的判斷

測試選項作用
-z 字符串字符串是否為空
-n 字符串字符串是否非空
字符串1 == 字符串2字符串是否相等
字符串1 != 字符串2字符串是否不等

if 判斷中對于變量的處理,需要加引號,如果沒有加雙引號,可能會在判斷含空格的字符串變量的時候產生錯誤。

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

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

# 加上引號就對了
[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

多重條件判斷

測試選項作用
判斷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 判斷語句參數(shù)

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

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

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

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

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

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

[ -g FILE ] 如果 FILE 存在且已經設置了SGID則為真。

[ -h FILE ] 如果 FILE 存在且是一個符號連接則為真。

[ -k FILE ] 如果 FILE 存在且已經設置了粘制位則為真。

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

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

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

[ -t FD ] 如果文件描述符 FD 打開且指向一個終端則為真。

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

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

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

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

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

[ -L FILE ] 如果 FILE 存在且是一個符號連接則為真。

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

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

[ 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 指向相同的設備和節(jié)點號則為真。

[ -o OPTIONNAME ] 如果 shell選項 “OPTIONNAME” 開啟則為真。

[ -z STRING ] “STRING” 的長度為零則為真。

[ -n STRING ] or [ STRING ] “STRING” 的長度為非零 non-zero則為真。

[ STRING1 == STRING2 ] 如果2個字符串相同。 “=” 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.

總結

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

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

相關文章

  • shell腳本實現(xiàn)實時檢測文件變更

    shell腳本實現(xiàn)實時檢測文件變更

    這篇文章主要介紹了shell腳本實現(xiàn)實時檢測文件變更,本文直接給出實現(xiàn)代碼和使用方法,以及svn下的實現(xiàn)代碼,需要的朋友可以參考下
    2015-05-05
  • Shell腳本實現(xiàn)自動修改IP地址

    Shell腳本實現(xiàn)自動修改IP地址

    這篇文章主要介紹了Shell腳本實現(xiàn)自動修改IP地址,本文直接給出實現(xiàn)代碼,并在代碼中標注大量注釋,需要的朋友可以參考下
    2014-10-10
  • Shell監(jiān)控iptables運行狀態(tài)

    Shell監(jiān)控iptables運行狀態(tài)

    這篇文章主要介紹了Shell監(jiān)控iptables運行狀態(tài),本文腳本會判斷iptables的狀態(tài)并選擇啟動或者重啟動,需要的朋友可以參考下
    2014-12-12
  • 快速入門Shell腳本之條件判斷語句與循環(huán)

    快速入門Shell腳本之條件判斷語句與循環(huán)

    這篇文章主要介紹了快速入門Shell腳本之條件判斷語句與循環(huán),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Linux下Shell編程快捷鍵大全(日常整理)

    Linux下Shell編程快捷鍵大全(日常整理)

    有時候,我們需要在 Bash 中重復執(zhí)行先前的命令。所以學習shell編程快捷鍵對工作非常有幫助,下面由腳本之家小編給大家介紹Linux下Shell編程快捷鍵大全,需要的朋友參考下吧
    2016-03-03
  • Shell中${}的多種用法小結

    Shell中${}的多種用法小結

    ${}是一種變量替換語法,它用于獲取和操作變量的值,本文就來介紹一下${}的多種用法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • shell周期差量備份文件夾的實現(xiàn)代碼

    shell周期差量備份文件夾的實現(xiàn)代碼

    這篇文章主要介紹了shell周期差量備份文件夾的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 分享個簡易版Linux服務器初始化Shell腳本

    分享個簡易版Linux服務器初始化Shell腳本

    該Shell腳本主要用于新安裝Linux服務器系統(tǒng)的初始化工作,包括關閉IPv6模塊,關閉SELinux,讓vim顯示顏色,設置系統(tǒng)語言編碼,優(yōu)化系統(tǒng)服務,內核參數(shù)優(yōu)化等
    2013-07-07
  • linux xz壓縮解壓的方法小結

    linux xz壓縮解壓的方法小結

    這篇文章主要介紹了linux xz壓縮解壓的方法小結 ,文中給大家提到了linux解壓.tar.xz壓縮包 的方法,需要的朋友可以參考下
    2019-07-07
  • Shell腳本中$符號的嵌套使用方法小結

    Shell腳本中$符號的嵌套使用方法小結

    在編寫Shell腳本時,通過嵌套使用$符號,間接獲取變量或表達式的值的具體方法,文中根據(jù)實例編碼詳細介紹的十分詳盡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-05-05

最新評論