shell中特殊變量及if條件


特殊變量:

linux中shell變量$#,$@,$0,$1,$2的含義解釋: 
變量說明: 
$$ 
Shell本身的PID(ProcessID) 
$! 
Shell最后運行的后台Process的PID 
$? 
最后運行的命令的結束代碼(返回值) 
$- 
使用Set命令設定的Flag一覽 
$* 
所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 
$@ 
所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2""$n" 的形式輸出所有參數。 
$# 
添加到Shell的參數個數 
$0 
Shell本身的文件名 
$1~$n 
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。 

整數比較:

-eq 等於,如:if [ "$a" -eq "$b" ]   
-ne 不等於,如:if [ "$a" -ne "$b" ]   
-gt 大於,如:if [ "$a" -gt "$b" ]   
-ge 大於等於,如:if [ "$a" -ge "$b" ]   
-lt 小於,如:if [ "$a" -lt "$b" ]   
-le 小於等於,如:if [ "$a" -le "$b" ]   
<   小於(需要雙括號),如:(("$a" < "$b"))   
<=  小於等於(需要雙括號),如:(("$a" <= "$b"))   
>   大於(需要雙括號),如:(("$a" > "$b"))   
>=  大於等於(需要雙括號),如:(("$a" >= "$b"))  

if中其他參數:

-e                          文件存在
-a                          文件存在(已被棄用)
-f                          被測文件是一個regular文件(正常文件,非目錄或設備)
-s                          文件長度不為0
-d                          被測對象是目錄
-b                          被測對象是塊設備
-c                          被測對象是字符設備
-p                          被測對象是管道
-h                          被測文件是符號連接
-L                          被測文件是符號連接
-S(大寫)                    被測文件是一個socket
-t                          關聯到一個終端設備的文件描述符。用來檢測腳本的stdin[-t0]或[-t1]是一個終端
-r                          文件具有讀權限,針對運行腳本的用戶
-w                          文件具有寫權限,針對運行腳本的用戶
-x                          文件具有執行權限,針對運行腳本的用戶
-u                          set-user-id(suid)標志到文件,即普通用戶可以使用的root權限文件,通過chmod +s file實現
-k                          設置粘貼位
-O                          運行腳本的用戶是文件的所有者
-G                          文件的group-id和運行腳本的用戶相同
-N                          從文件最后被閱讀到現在,是否被修改
f1 -nt f2                   文件f1是否比f2新
f1 -ot f2                   文件f1是否比f2舊
f1 -ef f2                   文件f1和f2是否硬連接到同一個文件

字符串比較:

=                         等於           if [ "$a" = "$b" ]
==                        與=等價
!=                        不等於         if [ "$a" = "$b" ]
<                         小於,在ASCII字母中的順序:
                          if [[ "$a" < "$b" ]]
                          if [ "$a" \< "$b" ]         #需要對<進行轉義
>                         大於
-z                        字符串為null,即長度為0
-n                        字符串不為null,即長度不為0

 

#如果沒有參數被傳遞到腳本中, 那么就使用
#當前目錄. 否則就是用傳遞進來的參數作為目錄
#來搜索.
[ $# -eq 0 ] && directorys=`pwd` || directorys=$@

#編寫函數linkchk用來檢查傳遞進來的目錄或文件是否是鏈接, 
#並判斷這些文件或目錄是否存在. 然后打印它們所指向的文件.
#如果傳遞進來的元素包含子目錄, 
#那么把子目錄也放到linkcheck函數中處理, 這樣就達到了遞歸的目的.
##########
linkchk () {
for element in $1/*; do
[ -h "$element" -a ! -e "$element" ] && echo \"$element\"
[ -d "$element" ] && linkchk $element
# 當然, '-h'用來測試符號鏈接, '-d'用來測試目錄.
done
}

#把每個傳遞到腳本的參數都送到linkchk函數中進行處理, 
#檢查是否有可用目錄. 如果沒有, 那么就打印錯誤消息和
#使用信息.
################
for directory in $directorys; do
if [ -d $directory ]
then linkchk $directory
else 
echo "$directory is not a directory"
echo "Usage: $0 dir1 dir2 ..."
fi
done

exit 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM