Shell腳本基礎

特別變量:bash

$# 傳遞到腳本的參數個數
$* 以一個單字符串顯示全部向腳本傳遞的參數
$$ 腳本運行的當前進程ID號
$! 後臺運行的最後一個進程的ID號
$@ 與$#相同,可是使用時加引號,並在引號中返回每一個參數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其餘任何值代表有錯誤。測試

腳本調試:spa

1  -n 檢測語法錯誤,不執行腳本
script:debug_quotes.shdebug

#!/bin/bash
echo "USER=$USER
echo "HOME=$HOME"
echo "OSNAME=$OSNAME"
[root@limt01 ~]# bash -n debug_quotes.sh 
debug_quotes.sh:行4: 尋找匹配的 `"' 是遇到了未預期的文件結束符
debug_quotes.sh:行5: 語法錯誤: 未預期的文件結尾

2 -v 在執行過程是顯示每條命令
script:listusers.sh調試

#!/bin/bash

cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt
awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt

#Clean up the temporary file.
/bin/rm -f /tmp/users.txt
[root@limt01 ~]# bash -v listusers.sh
#!/bin/bash

cut -d : -f1,5,7 /etc/passwd | grep -v sbin | grep sh | sort > /tmp/users.txt
awk -F':' ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt
limt         limt                                    
root         root                                    

#Clean up the temporary file.
/bin/rm -f /tmp/users.txt

3 -x 跟蹤每一步執行記錄code

[root@limt01 ~]# bash -x listusers.sh
+ cut -d : -f1,5,7 /etc/passwd
+ grep -v sbin
+ grep sh
+ sort
+ awk -F: ' { printf ( "%-12s %-40s\n", $1, $2 ) } ' /tmp/users.txt
limt         limt                                    
root         root                                    
+ /bin/rm -f /tmp/users.txt

 

數值測試:blog

-eq 等於則爲真
-ne 不等於則爲真
-gt 大於則爲真
-ge 大於等於則爲真
-lt 小於則爲真
-le 小於等於則爲真進程

字符串測試:ip

= 等於則爲真
!= 不相等則爲真
-z 字符串 字符串長度僞則爲真
-n 字符串 字符串長度不僞則爲真字符串

文件測試:

-e 文件名 若是文件存在則爲真
-r 文件名 若是文件存在且可讀則爲真
-w 文件名 若是文件存在且可寫則爲真
-x 文件名 若是文件存在且可執行則爲真
-s 文件名 若是文件存在且至少有一個字符則爲真
-d 文件名 若是文件存在且爲目錄則爲真
-f 文件名 若是文件存在且爲普通文件則爲真
-c 文件名 若是文件存在且爲字符型特殊文件則爲真
-b 文件名 若是文件存在且爲塊特殊文件則爲真

Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操做符用於將測試條件鏈接起來,其優先級爲:"!"最高,"-a"次之,"-o"最低。

 

數值計算:

var=`expr $var + 1`let "var=(2+2-1)/2" var=$((var+1))var=$[var+1]

相關文章
相關標籤/搜索