日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell条件测试操作 if分支 for循环 while 循环

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell条件测试操作 if分支 for循环 while 循环 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

條件測試操作

條件測試的基本用法:

字符串條件測試:

邏輯組合

數字的條件測試:

編寫一個腳本:

對文件進行測試:

if判斷語句

單分支

雙分支

多分支

編寫一個腳本:

編寫一個腳本:

for循環

while循環:可以無限循環


條件測試操作

條件測試的基本用法:

  • "test ? 表達式"或者[ ?表達式 ? ?]都可以,表達式兩邊至少要留出一個空格
[root@server0 opt]# test a == a #判斷字符串a是否等于a [root@server0 opt]# echo $? #查看結果,0為判斷成功,非0為失敗 0 [root@server0 opt]# test a == b [root@server0 opt]# echo $? 1 [root@server0 opt]# [ a == a ] #另一種格式,效果同上,字符串兩邊要有空格!!! [root@server0 opt]# echo $? 0 [root@server0 opt]# [ a == b ] [root@server0 opt]# echo $? 1 [root@server0 opt]# [ $USER == root ] #判斷當前登錄用戶是否為root [root@server0 opt]# echo $? 0

字符串條件測試:

  • == 比較兩個字符串是否相同 ?
  • != 比較兩個字符串是否不相同
  • -z ?檢查變量的值是否為空值
  • ! ?-z檢查變量的值是否為非空值
  • -n ??檢查變量的值是否為非空值(等同于! ?-z)
  • [root@server0 opt]# [ a != b ] #判斷a是否不能于b [root@server0 opt]# echo $?[root@server0 opt]# [ -z $a ] #判斷變量a是否為空值 [root@server0 opt]# echo $? #如果為空值則輸出為0 1 [root@server0 opt]# [ $a == b ] #判斷變量a是否等于b,如果變量a為空會報錯 [root@server0 opt]# [ "$a" == b ]#解決上上述問題 [root@server0 opt]# echo $? 1 [root@server0 opt]# [ ! -z $a ] #判斷變量a是否非空 [root@server0 opt]# echo $? 0

    -eq與==都有判斷是否相等的意思,區別是"=="主要用于 判斷字符串兩邊是否相等,而-eq主要用于判斷數字

    [root@server0 opt]# [ 0123 == 123 ] [root@server0 opt]# echo $? 1 [root@server0 opt]# [ 0123 -eq 123 ] [root@server0 opt]# echo $? 0

    ?

    邏輯組合

    邏輯與: ?&&?之前命令成功才會執行之后的命令

    邏輯或: ? ||?之前命令失敗才會執行之后的命令

    && ? 前后任務都成功才算成功

    || ? ? ?前后有一個任務成功就算成功

    [root@server0 opt]# vim test01.sh #!/bin/bash read -p "請輸入一個用戶名" a [ -z $a ] && echo "給我名字!" && exit #如果沒有輸入用戶名輸出"給我名字!"然后直接退出 useradd $a stty -echo read -p "請輸入密碼" p stty echo echo $p | passwd --stdin $a [root@server0 opt]# bash test01.sh 請輸入一個用戶名 給我名字! [root@server0 opt]# ls && ls && ls #三次都執行成功 rh test01.sh rh test01.sh rh test01.sh [root@server0 opt]# ls || ls || ls #只有第一個條件成功 rh test01.sh [root@server0 opt]# ls || ls && ls #第一個條件和第三個條件執行成功 rh test01.sh rh test01.sh [root@server0 opt]# ls && ls || ls #第一個條件和第二個條件執行成功 rh test01.sh rh test01.sh

    數字的條件測試:

    -eq等于
    -ne不等于
    -gt大于
    -ge大于等于
    -lt小于
    -le小于等于
    [root@server0 opt]# [ 10 -gt 10 ] || echo "ok"&& echo "no" ok no #兩次執行均成功,顯示OK和no [root@server0 opt]# [ 10 -gt 10 ] && echo "ok"|| echo "no" no #前次執行不成功

    編寫一個腳本:

    每隔兩分鐘檢查主機的登錄賬戶數量,如果超過3人,則發郵件給管理員報警

    [root@server0 opt]# vim test02.sh #!/bin/bash a=$(who | wc -l) #統計有幾個人登錄該賬戶 [ $a -gt 3 ] && echo "有人入侵!!!" | mail -s test root [root@server0 opt]# bash test02.sh可以多開幾個終端試一下[root@server0 opt]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 root Fri Jan 3 11:39 18/595 "test" & 1 Status: R有人入侵!!!Held 1 message in /var/spool/mail/root [root@server0 opt]# crontab -e */2 * * * * /opt/test02.sh #每隔兩分鐘執行該腳本 [root@server0 opt]# chmod +x test02.sh #一定要給腳本加權限!!!!![root@server0 opt]# rm -rf /var/spool/mail/root #可以先刪除所有郵件,該路徑為專門存放root用戶郵件 [root@server0 opt]# mail #查看郵件

    對文件進行測試:

    -e判斷對象是否存在(不管是文件還是目錄),存在則結果為真
    -d判斷對象是否為目錄,是則為真
    -f判斷對象是否為一般文件,是則為真
    -r判斷當前用戶對文件是否有讀權限
    -w判斷當前用戶對文件是否有寫權限
    -x判斷當前用戶對文件是否有執行權限
    [root@server0 opt]# [ -e /opt/123 ] #測試123是否存在,不關心文件類型 [root@server0 opt]# echo $? 1 [root@server0 opt]# [ -f /opt/123 ] #測試123文件是否存在,必須是普通文件 [root@server0 opt]# echo $? 1 [root@server0 opt]# mkdir abc [root@server0 opt]# [ -f /opt/abc ] #測試abc是否存在,必須是普通文件 [root@server0 opt]# echo $? 1 [root@server0 opt]# [ -d /opt/abc ] #測試abc是否存在,必須是目錄 [root@server0 opt]# echo $? 0 [root@server0 opt]# [ -r /opt/abc ] #當前用戶對abc是否能讀 [root@server0 opt]# echo $? 0 [root@server0 opt]# [ -w /opt/abc ] #當前用戶對abc是否能寫 [root@server0 opt]# echo $? 0 [root@server0 opt]# [ -x /opt/abc ] #當前用戶對abc是否能執行 [root@server0 opt]# echo $? 0#建議寫絕對路徑!

    即使文件沒有任何權限,用管理員身份測試rwx權限,rw依舊為0,x為非0


    if判斷語句

    單分支

    if ? 條件測試;then

    ? ? ?執行指令1

    ? ? ?執行指令2

    ? ? ? .......

    fi?

    雙分支

    if ? 條件測試;then

    ? ? ?執行指令1

    else

    ? ? 執行指令2? ?

    fi

    多分支

    if ? 條件測試1;then

    ?? ? ?執行指令1

    elif ? ?條件測試2;then

    ?? ? ?執行指令2

    else

    ?? ? 執行指令n

    fi

    if雙分支:?

    [root@server0 opt]# vim test03.sh #!/bin/bash if [ $USER == root ];thenecho "ok" elseecho "no" fi[root@server0 opt]# bash test03.sh ok [root@server0 opt]# su - student[student@server0 ~]$ cd /opt[student@server0 opt]$ bash test03.sh no

    if多分支:?

    [root@server0 opt]# vim test04.sh #!/bin/bash read -p "請輸入數字" n if [ $n -gt 90 ];thenecho "優秀" elif [ $n -gt 70 ];thenecho "良好" elif [ $n -gt 60 ];thenecho "及格" elseecho "回爐" fi [root@server0 opt]# bash test04.sh 請輸入數字

    ?

    編寫一個腳本:

    對某一個IP進行ping操作,可以使用變量(read ? 或 ? ?位置變量$1),方便多次使用腳本

    ping命令: ?ping ?-c ?數字 ???指定ping的次數

    ?????????????? ? ping ??-i ???數字 ??指定ping的間隔時間,默認ping的間隔時間為1秒鐘

    ?????????????????ping ??-W ?數字 ??指定ping的時候不通反饋時間(秒),提高效率

    [root@server0 opt]# vim test05.sh #!/bin/bash ping -c 3 -i 0.2 -W 1 172.25.0.12 &> /dev/null if [ $? -eq 0 ];thenecho "通了" elseecho "不通" fi [root@server0 opt]# bash test05.sh 不通

    編寫一個腳本:

    猜數游戲,計算機出一個隨機的數字,你出一個數字,比計算機大則輸出猜大了,比計算機小則輸出猜小了,一樣則輸出恭喜你猜中了!

    [root@server0 opt]# vim test06.sh #!/bin/bash for i in {1..20} do x=$[$RANDOM%10] read -p "請輸入一個數字(0-9)" n if [ $x -eq $n ];thenecho "恭喜,猜對了!"&& exit elif [ $n -lt $x ];thenecho "猜小了,想知道正確答案嗎,求我呀!" elseecho "猜大了,垃圾!" fi done

    for循環

    for ? 變量名稱 ? in ?值1 ?值2 ?值 3....

    do ?

    ? ? ? ? 指令

    done

    [root@server0 opt]# vim test07.sh #!/bin/bash a=0 b=0 for i in `seq 15` #也可以寫成{1..15} doping -c 3 -i 0.1 -W 1 172.25.0.$i &> /dev/null if [ $? -eq 0 ];thenecho "172.25.0.$i通了"let a++ elseecho "172.25.0.$i不通"let b++ fi done [root@server0 opt]# bash test07.sh 172.25.0.1不通 172.25.0.2不通 172.25.0.3不通 172.25.0.4不通 172.25.0.5不通 172.25.0.6不通 172.25.0.7不通 172.25.0.8不通 172.25.0.9不通 172.25.0.10通了 172.25.0.11通了 172.25.0.12不通 172.25.0.13不通 172.25.0.14不通 172.25.0.15不通 2臺通了,13臺不通

    while循環:可以無限循環

    while ? 條件測試

    do ?

    ? ? ? ? ? 執行指令

    done

    [root@server0 opt]# vim test08.sh #!/bin/bash while : #冒號代表無限循環 doecho 123sleep 0.1 done

    ?

    ?

    總結

    以上是生活随笔為你收集整理的shell条件测试操作 if分支 for循环 while 循环的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。