檔案測試
存在性測試
-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...