shell指令碼程式設計高階及RAID和LVM應用2

2022-06-27 11:12:16 字數 2902 閱讀 6107

檔案測試

存在性測試

-a file 這個選項的效果與-e 相同.但是它已經被棄用了,並且不鼓勵使用

-e file

檔案的存在性測試,存在則為真,否則為假

例:~]# [ -e /etc/rc.d/rc.sysinit ]

~]# echo $?

1存在性及型別測試

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

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

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

-f file:是否存在並且為 普通 檔案

-h file 或 -l file:是否存在並且為 符號連線 檔案

-p file:是否存在並且為 命名管道 檔案

-s file:是否存在並且為 套接字 檔案

檔案許可權測試:

-r file:是否存在並且對當前使用者 可讀

-w file:是否存在並且對當前使用者 可寫

-x file:是否存在並且對當前使用者 可執行

特殊許可權測試:

-u file:是否存在並且 擁有suid許可權

-g file:是否存在並且 擁有sgid許可權

-k file:是否存在並且 擁有sticky許可權

檔案是否有內容:

-s file:是否存在並且 有內容

時間戳:

-n file:檔案自從上一次讀操作後是否被修改過

從屬關係測試:

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

-g file:當前使用者是否屬於檔案的屬組

雙目測試:

file1 -ef file2:file1與file2是否指向同乙個檔案系統的相同inode的硬鏈結

file1 -nt file2:file1是否新於file2

file1 -ot file2:file1是否舊於file2

組合測試條件:

邏輯運算:

第一種方式:

command1 && command2

command1 || command2

!command

當前使用者是否是檔案的屬主,並且擁有可讀許可權:

[ -o file ] && [ -r file ]

第二種方式:

expression1 -a expression2

expression1 -o expression2

!expression

當前使用者是否是檔案的屬主,並且擁有可執行許可權:

[ -o file -a -x file ]

練習:將當前主機名稱儲存至hostname變數中;主機名如果為空,或者為localhost.domain,則將其設定為www.magedu.com

]# hostname=$(hostname)

]# echo $hostname

localhost.localdomain

]# [ -z "$hostname" -o "$hostname" == "localhost.localdomain" -o "$hostname" == "localhost" ] && hostname www.magedu.com

]# echo $hostname

www.magedu.com

向指令碼傳遞引數:

位置引數變數

位置引數變數:寫乙個指令碼,在指令碼裡邊寫 $1,$2,...$,$,...而$1,$2,...指的是在命令列裡邊執行指令碼後面跟著的引數,第乙個引數對應$1,以此類推

bash myscripts argu1 argu2

引用方式:

$1,$2,...$,$,...

例:寫乙個指令碼,可以把任意兩個整數相加,求和

#!/bin/bash

echo $[$1+$2]

]# bash sum1.sh 7 3

10輪替:

shift [n]:位置引數輪替

練習:寫一指令碼,通過命令傳遞兩個文字檔案路徑給指令碼,計算其空白行數之和

#!/bin/bash

#file1_lines=$(grep "^$" $1 | wc -l)

file2_lines=$(grep "^$" $2 | wc -l)

echo "total blank lines: $[$file1_lines+$file2_lines]"

]# bash lines.sh /etc/fstab /etc/rc.d/init.d/functions

total blank lines: 92

過程式程式語言的**執行順序:

(1)順序執行:逐條執行;

(2)選擇執行:

**有乙個分支:條件滿足時才會執行;

兩個或以上的分支:只會執行其中乙個滿足條件的分支;

(3)迴圈執行:

**片斷(迴圈體)要執行0,1或多個來回;

選擇執行的寫法:

單分支的if語句:

if 測試條件

then

**分支

fi雙分支的if語句:

if 測試條件;then

條件為真時執行的分支

else

條件為假時執行的分支

fi示例:通過引數傳遞乙個使用者名稱給指令碼,此使用者不存在時,則新增之

]# vim useradd.sh

#!/bin/bash

#if [ $# -lt 1 ]; then

echo "at least one username."

exit 2

fiif ! grep "^$1\>" /etc/passwd &> /dev/null; then

useradd $1

echo $1 | passwd --stdin $1 &> /dev/null

echo "add user $1 finished."

fi

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...

Shell指令碼 程式設計高階08

1 編寫函式實現兩個數字做為引數,返回最大值maxnum bin bash functions read p please input first digits num1 read p please input second digits num2 max maxnum num1 num2 if m...