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

bash if條件判斷的使用

 更新時(shí)間:2023年02月16日 10:58:05   作者:小青頭  
本文主要介紹了bash if條件判斷的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在bash中,if是可以對語句做選擇執(zhí)行,做if條件測試有整數(shù)測試,字符測試,文件測試三種形式。

if格式

單分支語法

if 條件; then
    語句1
    語句2
    ... 
fi

雙分支語法

if 條件;then
    語句1
    語句2
else
    語句2
fi

多分支語法

if 條件1; then
    語句1
    語句2
elif 條件2; then
    語句1
    語句2
else
    語句1
    語句2
fi

條件測試

if的判斷條件具體可以有以下幾種形式

  • [ express ]
  • [[ express ]]
  • test express
  • bash命令(命令執(zhí)行成功則執(zhí)行語句)

[],[[]],test作用類似,基本上在編寫bash腳本時(shí)可以互換
注意:[],[[]]空格位置;
[1個(gè)空格+表達(dá)式+1個(gè)空格]
[[1個(gè)空格+表達(dá)式+1個(gè)空格]]

示例:bash命令做if條件

示例1:查看系統(tǒng)是否有hadoop用戶,如果有返回uid和shell,沒有返回no

[root@node1 bash_test]# cat 17.sh?
#!/bin/bash

if id -u hadoop &> /dev/null;then
? ? grep "^hadoop" /etc/passwd | cut -d: -f1,7
else
? ? echo no
fi
[root@node1 bash_test]# ./17.sh?
hadoop:/bin/bash

注意:

  • id -u hadoop &> /dev/null指令的作用是執(zhí)行id -u hadoop將其回執(zhí)丟掉(不在終端顯示)
  • bash命令做if條件時(shí),當(dāng)命令狀態(tài)返回值為真即值為0時(shí),條件滿足:命令狀態(tài)返回值1-255即條件不滿足

命令狀態(tài)返回值

我們可以使用$?查看上一條命令的命令狀態(tài)返回值,命令成功執(zhí)行返回0,失敗執(zhí)行返回1

[root@node1 bash_test]# id hadoop
uid=4024(hadoop) gid=4024(hadoop) 組=4024(hadoop),4026(mygrp)
[root@node1 bash_test]# echo $?
0
[root@node1 bash_test]# id hadoop111
id: hadoop111: no such user
[root@node1 bash_test]# echo $?

當(dāng)然在bash腳本中,我們可以使用exit退出程序時(shí),后面接的數(shù)字則代表命令執(zhí)行情況。例如:exit 0代表執(zhí)行成功,exit 1代表執(zhí)行失敗

整數(shù)測試

if條件測試是為了比較整數(shù)時(shí),具體規(guī)則如下
expression: 數(shù)值1 比較符號 數(shù)值2
比較符號:
大于 -gt
大于或等于 -ge
等于 -eq
不等于 -ne
小于 -gt
小于或等于 -ge

示例1:讀取一個(gè)參數(shù),如果他小于10返回Yes,大于10返回No

[root@node1 bash_test]# cat 18.sh?
#!/bin/bash

if [ $1 -lt 10 ];then
? echo Yes
else
? echo No
fi
[root@node1 bash_test]# ./18.sh 5
Yes
[root@node1 bash_test]# ./18.sh 11
No

注意:$1代表終端傳入的第一個(gè)參數(shù)
bash中位置變量有:
$1,$2,$3…
$@ $* 顯示所有位置變量
$@ 五個(gè)字符串當(dāng)成一個(gè)字符串顯示
$* 五個(gè)字符串各自顯示
$# 顯示位置變量個(gè)數(shù)
$? 保存剛剛執(zhí)行命令的狀態(tài)返回值
shift 實(shí)現(xiàn)位置參數(shù)輪替
結(jié)合shfit可以使用一個(gè)$1可以得到所有的變量
shfit 2 指定輪替2個(gè)

例如:執(zhí)行命令./18.sh 5
$0為./18.sh
$1為5
@ 和 @和@和* 均為"./18.sh 5"
$#為1

示例2:寫一個(gè)腳本隨機(jī)生成兩個(gè)數(shù),比較其大小

[root@node1 bash_test]# cat 19.sh?
#!/bin/bash

A=$RANDOM
B=$RANDOM
result=""
if [ $A -lt $B ];then
? result="A is greater than B"
elif [ $A -gt $B ];then
? result="A is less then B"
else
? result="A equals B"
fi
echo "A = $A, B = $B, $result"

[root@node1 bash_test]# ./19.sh?
A = 6646, B = 3889, A is less then B

$RANDOM 生成隨機(jī)數(shù) 0-32767之間的數(shù)

字符測試

if條件為字符比較大小時(shí),默認(rèn)以ASCII碼表做大小比較
除了使用符號-lt,-gt,-le,-ge,-eq,-ne做判斷,我們也可以使用下述符號做判斷

 > : 大于
 < : 小于
 == :等于
 != :不等于
單目測試
 -z $STRING 字符串的長度,為空則為真,非空為假
 -n $STRING 為空則為假,不空則真
 =~ 判斷左邊的字符串是否能夠被右邊的模式所匹配,通常用于雙[[  ]]中
     一般用行首,行尾錨定$,不能用詞首詞尾錨定\< \> 
    不能用引號

一般我們用==比較多,用來判斷兩個(gè)字符串是否相等

示例1:寫一個(gè)腳本,可以接受一個(gè)參數(shù),其使用形式如下所示:
script.sh {start|stop|restart|status}
其中:
如果參數(shù)為start,則創(chuàng)建空文件/var/lock/subsys/script,并顯示“starting script successfully.”
如果參數(shù)為stop,則刪除文件/var/lock/subsys/script,并顯示“Stop script successfully.”
如果參數(shù)為restart,則刪除文件/var/locksubsys/script并重新創(chuàng)建,而后顯示“Restarting script successfully.”
如果參數(shù)為status,那么:如果文件/var/lock/subsys/script存在,則顯示“Script is running…”,否則,則顯示“Script is stopped.”
其他任何參數(shù);則顯示“script.sh {start|stop|restart|status}”

#!/bin/bash
# echo $1
if [ $1 == "start" ];then
    if [ -e /var/lock/subsys/script ];then
        echo  "script is already running."
    else
        mkdir /var/lock/subsys/script
        echo  "Starting script successfully."
    fi
elif [ $1 == "stop" ];then
    if [ -e /var/lock/subsys/script ];then
        rm -rf /var/lock/subsys/script
        echo "Stop script finished."
    else
        echo "script is stopped yet."
    fi
elif [ $1 == "restart" ];then
    rm -rf /var/lock/subsys/script
    mkdir /var/lock/subsys/script
    echo  "Restarting script successfully."
elif [ $1 == "status" ];then
    if [ -e /var/lock/subsys/script ];then
        echo "script is running."
    else
        echo "script is stopped."
    fi
else
    echo "script.sh {start|stop|restart|status}"
fi

文件測試

對文件進(jìn)行操作,主要有以下幾種

單目測試
 -f 測試其是否為普通文件,即ls -l 時(shí)文件類型為-的文件  
 -d 測試其是否為目錄文件,即ls -l 時(shí)文件類型為-的目錄  
 -e 測試文件是否存在,存在為真  
 -r,-w,-x這三個(gè)都是判斷文件權(quán)限,是否有讀,寫,執(zhí)行權(quán)限  
 -s 測試文件大小是否不空,不空則真,空為假
 -l -b -c這三個(gè)判斷文件是否為相應(yīng)類型

示例:如果/tmp/test10不存在,則創(chuàng)建它

[root@node1 bash_test]# cat 21.sh?
#!/bin/bash

if [ ! -e /tmp/test10 ];then
? ? mkdir /tmp/test10
fi
[root@node1 bash_test]# ls -ld /tmp/test10
ls: 無法訪問/tmp/test10: 沒有那個(gè)文件或目錄
[root@node1 bash_test]# ./21.sh?
[root@node1 bash_test]# ls -ld /tmp/test10
drwxr-xr-x 2 root root 6 8月 ? 1 21:21 /tmp/test10

組合條件測試

當(dāng)有多個(gè)判斷需要做時(shí),可以使用如下進(jìn)行連接

符號符號意義示例解釋
-a與,符號左右兩邊都需要滿足;[ $A > 300 -a $A < 500 ]A變量值大于300,而且要小于500滿足條件
-o或,符號左右兩邊只要滿足一個(gè);[ $B < 10 -o $A > 100 ]B變量小于10或者A變量小于100
!非,將結(jié)果取反;[ ! id hadoop &> /dev/null ]如果沒有hadoop用戶則滿足條件

如果使用獨(dú)立命令做組合條件時(shí),使用與&&,||或,!非

示例1:寫一個(gè)腳本,給定用戶,如果不存在退出腳本

[root@node1 bash_test]# cat 20.sh 
#!/bin/bash

if ! id $1 > /dev/null;then
    echo "no find this user"
    exit 6
else
    id $1
fi
[root@node1 bash_test]# ./20.sh hadoop
uid=4024(hadoop) gid=4024(hadoop) 組=4024(hadoop),4026(mygrp)
[root@node1 bash_test]# ./20.sh hadoop1
id: hadoop1: no such user
no find this user

示例2:通過參數(shù)傳-一個(gè)字符串給腳本,如果傳遞的字符串為“memory"或"Memory",就以MB為單位顯示當(dāng)前主機(jī)的內(nèi)存信息:否則,就顯示/proc/uptime文件的內(nèi)容。

#!/bin/bash

if [[ $1 == "memory" || $1 == "Memory" ]]; then
   free -tm
else
   cat /proc/uptime
fi

注意:
|| 短路操作,前面為真,不會運(yùn)行后面
&& 前面為假,無需運(yùn)算后面

如果我們需要前面為假,運(yùn)行后面程序,使用||
如果我們需要前面為真,運(yùn)行后面程序,使用&&

示例1:如果/tmp/test10不存在,則創(chuàng)建它

[ -e /tmp/test10 ] || mkdir /tmp/test10

示例2:如果/tmp/test10文件夾存在,則在該文件夾下創(chuàng)建hello文件

[ -d /tmp/test10 ] && touch /tmp/test10/hello

示例3:如果/tmp/test10/hello文件存在,則顯示’exist’;不存在則顯示’not exist’

[ -f /tmp/test10/hello ] && echo "exist" || echo "not exist"

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

您可能感興趣的文章:

相關(guān)文章

  • linux命令詳解之掛載光驅(qū)的方法

    linux命令詳解之掛載光驅(qū)的方法

    linux的硬件設(shè)備在/dev目錄下,光驅(qū)也是其中,掛載光驅(qū)的方法如下,大家參考使用吧
    2014-01-01
  • linux模糊查找一個(gè)文件的方法

    linux模糊查找一個(gè)文件的方法

    這篇文章主要介紹了linux模糊查找一個(gè)文件的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • awk中讓人郁悶的system()函數(shù)

    awk中讓人郁悶的system()函數(shù)

    system()的結(jié)果是直接返回給shell顯示了,然后再由awk繼續(xù)執(zhí)行后面的程序,這種情況下,if()里留下的其實(shí)是system()的執(zhí)行狀態(tài)【即0或1】”0”~/^[2 3]/,當(dāng)然就一直執(zhí)行else了
    2013-03-03
  • linux文件搜索及其它基礎(chǔ)命令介紹(3)

    linux文件搜索及其它基礎(chǔ)命令介紹(3)

    這篇文章主要為大家詳細(xì)介紹了linux文件搜索及其它基礎(chǔ)命令,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 淺談Linux磁盤修復(fù)e2fsck命令

    淺談Linux磁盤修復(fù)e2fsck命令

    下面小編就為大家?guī)硪黄獪\談Linux磁盤修復(fù)e2fsck命令。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • linux 中的gzip命令

    linux 中的gzip命令

    gzip是在Linux系統(tǒng)中經(jīng)常使用的一個(gè)對文件進(jìn)行壓縮和解壓縮的命令,既方便又好用。接下來通過本文給大家分享linux 中的gzip命令,感興趣的朋友一起看看吧
    2017-09-09
  • 基礎(chǔ)的Linux Shell技巧小結(jié)

    基礎(chǔ)的Linux Shell技巧小結(jié)

    這篇文章主要介紹了基礎(chǔ)的Linux Shell技巧小結(jié),是Linux入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-07-07
  • 使用pwgen命令在Linux中創(chuàng)建隨機(jī)密碼的方法

    使用pwgen命令在Linux中創(chuàng)建隨機(jī)密碼的方法

    在Linux系統(tǒng)中,pwgen是一個(gè)十分便捷的命令行工具,用于生成隨機(jī)密碼,pwgen能夠以簡單易用的方式生成滿足特定需求的密碼,包括長度、字符類型等,接下來我們將深入了解這個(gè)工具的功能和使用方法,需要的朋友可以參考下
    2024-05-05
  • ubuntu使用root用戶登錄/切換root權(quán)限的實(shí)現(xiàn)

    ubuntu使用root用戶登錄/切換root權(quán)限的實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄猽buntu使用root用戶登錄/切換root權(quán)限的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • Linux Bash 提示符的一些騷操作(自定義 Bash 提示符)

    Linux Bash 提示符的一些騷操作(自定義 Bash 提示符)

    這篇文章主要介紹了Linux Bash 提示符的一些騷操作,一些能讓你自定義 Bash 提示符的黑科技,需要的朋友可以參考下
    2017-07-07

最新評論

旬邑县| 治县。| 仁怀市| 紫云| 泸溪县| 张家川| 靖宇县| 松溪县| 丹巴县| 商河县| 乌拉特中旗| 内丘县| 聊城市| 沈阳市| 昌图县| 江川县| 玉门市| 开阳县| 英山县| 姚安县| 玛曲县| 云安县| 莲花县| 博湖县| 巴中市| 四平市| 南郑县| 奉贤区| 都江堰市| 漳州市| 仪陇县| 博湖县| 甘泉县| 晋州市| 九台市| 宁波市| 台北市| 迭部县| 平原县| 阿图什市| 赤城县|