shell指令碼高階

2022-07-10 02:24:08 字數 2964 閱讀 8912

接著上篇部落格,今天整理一下關於條件測試和條件語句方面的知識。

在編寫shell指令碼時,經常需要對一些條件進行判斷,可以使用測試命令test輔助完成測試過程。test命令測試特定的表示式是否成立,當條件成立時,命令執行後的返回值為0,否則為其他數值。

條件測試的基本格式有:

格式1

test expression

格式2[ expression ]

注意:使用方括號時,條件兩邊必須加上空格。

常見的測試型別有

檔案存在性及類別測試

-a file:同-e

-e file: 檔案存在性測試,存在為真,否則為假

-b file:是否存在且為塊裝置檔案

-c file:是否存在且為字元裝置檔案

-d file:是否存在且為目錄檔案

-f 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表示檔案描述符是否已經開啟且與某終端相關

-o file:當前有效使用者是否為檔案屬主

-g file:當前有效使用者是否為檔案屬組

file1 -ef file2: file1與file2是否指向同乙個裝置上的相同inode

file1 -nt file2: file1是否新於file2(mtime)

file1 -ot file2: file1是否舊於file2

-gt 是否大於

-ge 是否大於等於

-eq 是否等於

-ne 是否不等於

-lt 是否小於

-le 是否小於等於

== 是否等於

> 是否大於 (ascii 碼)

< 是否小於

!= 是否不等於

=~ 是否能夠被右側的 pattern 所匹配(一般用於[[ ]]中)

-z 檢驗字串是否為空,空為真,非空為假

-o 與-z 相反

第一種方式:

command1 && command2 並且

command1 || command2 或者

! command 非

第二種方式:

expression1 -a expression2 並且

expression1 -o expression2 或者

! expression 非

shell有一套自己的流程控制語句,其中包括條件語句、迴圈語句等。

單分支:

if 判斷條件;then

條件為真的分支**

fi

示例:

#!/bin/bash

use=`df -ht | grep "/boot" | awk '' | cut -d "%" -f1`

if [ $use -gt 80 ];then

echo "warning!! /boot disk is full"

fi

雙分支:
if 判斷條件; then

條件為真的分支**

else

條件為假的分支**

f

示例:

if ping -c1 -w2 station1 &> /dev/null; then 

echo 'station1 is up'

else

echo 'station1 is unexpectedly down!'

exit 1

fi

多分支:
if 判斷條件1; then

條件為真的分支**

elif 判斷條件2; then

條件為真的分支**

elif 判斷條件3; then

條件為真的分支**

else

以上條件都為假的分支**

fi

示例:

#!/bin/sh

scores=40

if [[ $scores -gt 90 ]]; then

echo "very good!"

elif [[ $scores -gt 80 ]]; then

echo "good!"

elif [[ $scores -gt 60 ]]; then

echo "pass!"

else

echo "no pass!"

fi

case 變數引用 in

pat1)

分支1;;

pat2)

分支2;;

...*)

預設分支

;;esac

示例:

#!/bin/sh 

case $1 in

start | begin)

echo "start something"

;;stop | end)

echo "stop something"

;;*) echo "ignorant"

;;esac

今天的部落格就到這裡,下次繼續整理shell指令碼的知識。

shell指令碼高階

流程控制 程式設計中的邏輯處理 順序執行 選擇執行 迴圈執行 迴圈 迴圈執行 將某 段重複執行多次 重複執行多少次 迴圈次數事先已知 迴圈次數事先未知 有進入條件和退出條件 for,while,until for迴圈 for 變數名 in 列表 do 迴圈體done 執行機制 依次將列表中的元素賦值...

shell指令碼程式設計高階(一)

可以巢狀 分支if 判斷條件 then 條件為真的分支 fiif 判斷條件 then 條件為真的分支 else 條件為假的分支 fiif 判斷條件1 then 條件1為真的分支 elif 判斷條件2 then 條件2為真的分支 elif 判斷條件3 then 條件3為真的分支 else 以上條件都為...

Shell指令碼 程式設計高階03

1 每隔 3 秒鐘到系統上獲取已經登入的使用者的資訊 如果發現使用者 hacker 登入,則將登入時間和主機記錄於日誌 var log login.log 中,並退出指令碼 bin bash while do echo date f t no information if who grep hack...