bash -v test.sh 啓用 verbose 調試模式shell
bash -n test.sh 啓用語法檢查調試模式express
bash -x test.sh 遍歷腳本執行過程
編程
1、基礎參數bash
1.shell 中() {} [] (()) [[]]app
shell 中() {} [] (()) 在 bash shell 中,$( ) 與` ` (反引號) 均可用作命令替換用。
${ }用於變量替換。通常狀況下,$var 與${var} 並無什麼不同,可是用 ${ } 會比較精確的界定變量名稱的範圍。
$[]和$(())是同樣的,都是進行數學運算的。支持+ - * / %(「加、減、乘、除、取模」)。可是注意,bash只能做整數運算,對於浮點數是看成字符串處理的。
[[]] 雙方括號命令提供了針對字符串比較的高級特性。
2.命令替換less
#!/bin/bash #命令輸出負載給變量的兩種方式
#反引號字符(`)
#$()格式
d1=`date` d2=$(date) echo "The date d1 and time are: $d1" echo "The date d2 and time are: $d2"
3. >/dev/null 2>&1編程語言
ls /etcfsdfdsfs >/dev/null 2>&1 //將標準錯誤輸出導入標準正確輸出,而後將標準正確輸出重定向到 /dev/null ---------------------------------------------------------------------------------------------------------------- >/dev/null 2>&1 // 實際上,應該等同於這樣: 1>/dev/null 2>/dev/null , 默認狀況下就是1,標準輸出,因此通常都省略。 而&符號, 後面接的是必須的文件描述符。不能寫成2>1, 這樣就成了標準錯誤重定向到文件名爲1的文件中了, 而不是重定向標準錯誤到標準輸出中。 因此這裏就是:標準輸出重定向到了/dev/null,而標準錯誤又重定向到了標準輸出, 因此就成了標準輸出和標準錯誤都重定向到了/dev/null 2>&1 >/dev/null //此方式爲不正確方式 命令從左往右執行,2>&1 爲將標準錯誤輸出重定向到標準輸出,而這時標準輸出是打印在屏幕上的,還沒執行到 >/dev/null 命令行的重定向什麼的, 是在執行命令以前就準備好了的. 解釋順序從左至右依次進行, 2&>1 ,而1是屏幕, 因此標準錯誤重定向到屏幕, 再而 1>/dev/null , 即標準輸出重定向到 /dev/null, 上述2>&1 >/dev/null 並非什麼同一時刻要麼產生標準輸出要麼產生標準錯誤. 而是兩個不一樣的東西.
4.數值計算ide
#在bash中,在將一個數學運算結果賦給某個變量時,能夠用美圓符和方括號($[ operation ])將數學表達式圍起來
#!/bin/bash var1=100 var2=200 var3=$[$var1 * $var2] echo "$var3"
浮點數計算oop
#variable=$(echo "options; expression" | bc)
!/bin/bash var1=$(echo "scale=2; 6.44/3/56"|bc) #scale 保留小數點位數 echo $var1
5.退出腳本測試
#Linux提供了一個專門的變量$?來保存上個已執行命令的退出狀態碼。對於須要進行檢查的命令,必須在其運行完畢後馬上查看或使用$?變量。它的值會變成由shell所執行的最後一條命令的退出狀態碼
狀 態 碼 描 述 0 命令成功結束 1 通常性未知錯誤 2 不適合的shell命令 126 命令不可執行 127 沒找到命令 128 無效的退出參數 128+x 與Linux信號x相關的嚴重錯誤 130 經過Ctrl+C終止的命令 255 正常範圍以外的退出狀態碼
#!/bin/bash var=$(echo "scale=3; 1000/3.3" |bc ) echo $var exit 0
#echo $? 查看狀態碼
#exit 3 能夠指定退出的狀態碼
2、使用結構化命令
1. if-then
#bash shell的if語句會運行if後面的那個命令。若是該命令的退出狀態碼是0(該命令成功運行),位於then部分的命令就會被執行。若是該命令的退出狀態碼是其餘值,then部分的命令就不會被執行,bash shell會繼續執行腳本中的下一個命令。fi語句用來表示if-then語句到此結束
if command then commands fi
#!/bin/bash #test multiple commands in the then section # # testuser=zy # #then 能夠直接跟在if 判斷後面 ,也能夠另起一行 if grep $testuser /etc/passwd; then echo "this is my first command" echo "this is my second command" echo "$testuser is exist " fi
if-then-else 語句
#!/bin/bash #test multiple commands in the then section # # testuser=nouser # if grep $testuser /etc/passwd; then echo "this is my first command" echo "this is my second command" echo "$testuser is exist " echo else echo "the user $testuser does not exist on the system" echo
#echo 輸出一個空行 fi
嵌套 if
#!/bin/bash #test multiple commands in the then section # # testuser=nouser # if grep $testuser /etc/passwd; then echo "this is my first command" echo "this is my second command" echo "$testuser is exist " echo else echo "the user $testuser does not exist on the system" echo if ls -d /home/$testuser/ then echo "however ,$testuser has a directory" fi fi
elif 語句
#!/bin/bash #test multiple commands in the then section # # testuser=$1 # if grep $testuser /etc/passwd; then echo "this is my first command" echo "this is my second command" echo "$testuser is exist " echo elif ls -d /home/$testuser/ &>/dev/null;then echo "the $testuser dose not exists on the system" echo "however ,$testuser has a directory" else echo "however ,$testuser dose not exist on the system" echo "$testuser dose not have a directory" fi ---------------------------------------------------------------------------------------------------- [root@localhost shell_script]# ./test8.sh zy zy:x:22223:1001:IT_2:/home/zy_home:/bin/sh this is my first command this is my second command zy is exist [root@localhost shell_script]# ./test8.sh nouser the nouser dose not exists on the system however ,nouser has a directory [root@localhost shell_script]# ./test8.sh aaa however ,aaa dose not exist on the system aaa dose not have a directory [root@localhost shell_script]#
if command1 then command set 1 elif command2 then command set 2 elif command3 then command set 3 elif command4 then command set 4 fi
2.test 命令
test命令提供了在if-then語句中測試不一樣條件的途徑。若是test命令中列出的條件成立,test命令就會退出並返回退出狀態碼0。這樣if-then語句就與其餘編程語言中的if-then語句以相似的方式工做了。若是條件不成立,test命令就會退出並返回非零的退出狀態碼,這使得if-then語句不會再被執行
if test condition then commands fi
#若是不寫test命令的condition部分,它會以非零的退出狀態碼退出,並執行else語句塊
#!/bin/bash # # # var=$1 if test $var then echo " condition " else echo "no condition" fi
#bash shell提供了另外一種條件測試方法,無需在if-then語句中聲明test命令。 if [ condition ] then commands fi #方括號定義了測試條件。注意,第一個方括號以後和第二個方括號以前必須加上一個空格, 不然就會報錯。 test命令能夠判斷三類條件: 數值比較 字符串比較 文件比較
比 較 描 述 n1 -eq n2 檢查n1是否與n2相等 n1 -ge n2 檢查n1是否大於或等於n2 n1 -gt n2 檢查n1是否大於n2 n1 -le n2 檢查n1是否小於或等於n2 n1 -lt n2 檢查n1是否小於n2 n1 -ne n2 檢查n1是否不等於n2
#!/bin/bash # #Using numeric test evaluations val1=$1 val2=$2 # if [ $val1 -gt 10 ];then echo "$val1 gt 10" fi if [ $val1 -eq $val2 ];then echo "$val1 eq $val2" fi
字符串比較測試 比 較 描 述 str1 = str2 檢查str1是否和str2相同 str1 != str2 檢查str1是否和str2不一樣 str1 < str2 檢查str1是否比str2小 str1 > str2 檢查str1是否比str2大 -n str1 檢查str1的長度是否非0 -z str1 檢查str1的長度是否爲0
[root@localhost shell_script]# cat test11.sh #!/bin/bash # # var1=$1 var2=$2 if [ $var1 \> $var2 ];then
#字符串比較大於或者小於須要用 \ 進行轉義,不然會當成文件的重定向
echo "$var1 is greater than $var2" else echo "$var1 is less than $var2" fi [root@localhost shell_script]# ./test11.sh aaa cccccc aaa is less than cccccc [root@localhost shell_script]#
test命令的文件比較功能 比 較 描 述 -d file 檢查file是否存在並是一個目錄 -e file 檢查file是否存在 -f file 檢查file是否存在並是一個文件 -r file 檢查file是否存在並可讀 -s file 檢查file是否存在並不是空 -w file 檢查file是否存在並可寫 -x file 檢查file是否存在並可執行 -O file 檢查file是否存在並屬當前用戶全部 -G file 檢查file是否存在而且默認組與當前用戶相同 file1 -nt file2 檢查file1是否比file2新 file1 -ot file2 檢查file1是否比file2舊
[root@localhost shell_script]# cat test12.sh #!/bin/bash #Look before you leap var1=$1 if [ -d $var1 ];then echo "the $var1 directory exist" cd $var1 ls -a else echo "the $var1 directory dose not exists" fi [root@localhost shell_script]# ./test12.sh /home the /home directory exist . .. nouser shell_script tom zhengyue zy_home [root@localhost shell_script]#
複合條件測試
if-then語句容許你使用布爾邏輯來組合測試。有兩種布爾運算符可用: [ condition1 ] && [ condition2 ] [ condition1 ] || [ condition2 ]
[root@localhost shell_script]# cat test13.sh #!/bin/bash # # if [ -d $HOME ] && [ -w $HOME/testing ];then echo "the file exists and you can write to it" elif [ -d $HOME ] || [ -w $HONE/testing ];then echo "the file 2 || 1" else echo "I cannot write to the file" fi [root@localhost shell_script]# ./test13.sh the file exists and you can write to it [root@localhost shell_script]# ./test13.sh the file 2 || 1 [root@localhost shell_script]#
if-then 的高級特性
bash shell提供了兩項可在if-then語句中使用的高級特性:
用於數學表達式的雙括號
用於高級字符串處理功能的雙方括號
雙括號命令符號 (()) 符 號 描 述 val++ 後增 val-- 後減 ++val 先增 --val 先減 ! 邏輯求反 ~ 位求反 ** 冪運算 << 左位移 >> 右位移 & 位布爾和 | 位布爾或 && 邏輯和 || 邏輯或
[root@localhost shell_script]# cat test14.sh #!/bin/bash i=4 b=$(( i++ )) c=$(( ++i )) echo $b echo $c [root@localhost shell_script]# ./test14.sh 4 6
雙方括號命令提供了針對字符串比較的高級特性。雙方括號命令的格式以下:
[[ expression ]]
[root@localhost shell_script]# cat test15.sh #!/bin/bash # #using pattern match if [[ $USER == r* ]];then echo "Hello $USER" else echo "sorry , I do not know you" fi [root@localhost shell_script]# ./test15.sh Hello root [root@localhost shell_script]#
case 語句
case 字符串 in 模式) 語句 ;; 模式2 | 模式3) 語句 ;; *) 默認執行的 語句 ;; esac
#!/bin/bash # case $1 in [0-9]) echo "$1 IS number" ;; [A-Z]) echo "$1 is character" ;; *) echo "$1 is error character" ;; esac
[root@localhost shell_script]# cat test16.sh #!/bin/bash case $1 in [0-9]) echo "$1 is mumber" ;; [A-Z]) echo "$1 is character" ;; *) echo "$1 is error character" ;; esac [root@localhost shell_script]# ./test16.sh 1 1 is mumber [root@localhost shell_script]# ./test16.sh A A is character [root@localhost shell_script]# ./test16.sh CC CC is error character [root@localhost shell_script]#
只接受start ,stop ,restart ,status #!/bin/bash # case $1 in 'start') echo "start server ..." ;; 'stop') echo "stop server ..." ;; 'restart') echo "restart server ..." ;; 'status') echo "running ..." ;; *) echo "`basename $0` {start|stop|restart|status}" ;; esac ##注意多分支判斷每一個判斷結束都要在後面加上;;
for 命令
for var in list do commands done
root@localhost shell_script]# cat test17.sh #!/bin/bash #basic for command for test in A B C D E F ;do echo "The char : $test" done [root@localhost shell_script]# ./test17.sh The char : A The char : B The char : C The char : D The char : E The char : F [root@localhost shell_script]#
[root@localhost shell_script]# cat test18.sh #!/bin/bash # # list='A v bg ng jn df ttt' list=$list' cc'
#列表附加內容
for I in $list;do echo "$I" done [root@localhost shell_script]# ./test18.sh A v bg ng jn df ttt cc [root@localhost shell_script]
root@localhost shell_script]# cat test19.sh #!/bin/bash # # for file in /root/* ;do if [ -d "$file" ];then echo "The $file is a directory" elif [ -f "$file" ];then echo "the $file is a file" fi done [root@localhost shell_script]# ./test19.sh the /root/1111.cap is a file The /root/123 is a directory the /root/222.cap is a file the /root/anaconda-ks.cfg is a file the /root/cc is a file the /root/Joomla_3.9.3-Stable-Full_Package.zip is a file the /root/ping.out is a file the /root/qwe.cap is a file the /root/tr is a file the /root/:x is a file [root@localhost shell_script]#
C 語言的 for命令
for (( variable assignment ; condition ; iteration process ))
[root@localhost shell_script]# cat test20.sh #!/bin/bash # for (( i=1; i<5; i++ ));do echo "The next number is :$i" done [root@localhost shell_script]# ./test20.sh The next number is :1 The next number is :2 The next number is :3 The next number is :4 [root@localhost shell_script]#
while 命令
while命令的格式是: while test command do other commands done
#!/bin/bash # # var1=10 while echo $var1 [ $var1 -ge 0 ];do echo "This is inside the loop" var1=$[ $var1 - 1 ] done
until 命令
until命令和while命令工做的方式徹底相反。until命令要求你指定一個一般返回非零退
出狀態碼的測試命令。只有測試命令的退出狀態碼不爲0,bash shell纔會執行循環中列出的命令。
一旦測試命令返回了退出狀態碼0,循環就結束了。
until test commands do other commands done
root@localhost shell_script]# cat test22.sh #!/bin/bash # var1=100 until echo $var1 [ $var1 -eq 0 ];do echo "inside the loop:$var1" var1=$[ $var1 - 25 ] done [root@localhost shell_script]# ./test22.sh 100 inside the loop:100 75 inside the loop:75 50 inside the loop:50 25 inside the loop:25 0
嵌套循環
#注意,在使用嵌套循環時,你是在迭代中使用迭代,與命令運行的次數是乘積關係。
[root@localhost shell_script]# cat test23.sh #!/bin/bash # for (( a=1 ;a<=3;a++ ));do echo "starting loop $a" for ((b=1;b<=3;b++ ));do echo "Inside loop:$b" done done [root@localhost shell_script]# ./test23.sh starting loop 1 Inside loop:1 Inside loop:2 Inside loop:3 starting loop 2 Inside loop:1 Inside loop:2 Inside loop:3 starting loop 3 Inside loop:1 Inside loop:2 Inside loop:3 [root@localhost shell_script]#
break 語句
break n :指定要跳出的循環層級
[root@localhost shell_script]# cat test24.sh #!/bin/bash # # #breaking out of a while loop var1=1 while [ $var1 -lt 10 ];do if [ $var1 -eq 5 ];then break fi echo "Iteration: $var1" var1=$[ $var1 + 1 ] done echo "The while loop is complated" [root@localhost shell_script]# ./test24.sh Iteration: 1 Iteration: 2 Iteration: 3 Iteration: 4 The while loop is complated [root@localhost shell_script]#
continue 命令
continue命令能夠提早停止某次循環中的命令,但並不會徹底終止整個循環。
root@localhost shell_script]# cat test25.sh #!/bin/bash # for (( i=1;i<10;i++ ));do if [ $i -gt 4 ] && [ $i -lt 7 ];then continue fi echo "Iteration : $i" done [root@localhost shell_script]# ./test25.sh Iteration : 1 Iteration : 2 Iteration : 3 Iteration : 4 Iteration : 7 Iteration : 8 Iteration : 9 [root@localhost shell_script]#
[root@localhost shell_script]# cat test26.sh #!/bin/bash # piping a loop to another command for state in "North Dakota" Connecticut Illinois Alabama Tennessee do echo "$state is the next place to go" done | sort
#輸出結果交給sort 進行排序而後進行輸出 [root@localhost shell_script]# ./test26.sh Alabama is the next place to go Connecticut is the next place to go Illinois is the next place to go North Dakota is the next place to go Tennessee is the next place to go [root@localhost shell_script]#
實例:
[root@localhost shell_script]# cat test27.sh #!/bin/bash IFS=: #指定分隔符爲: for folder in $PATH ;do echo "path : $folder" #for 循環遍歷path 路徑 for file in $folder/* do
#for 循環遍歷path 路徑下的文件,判斷是不是可執行文件 if [ -x $file ];then echo "-x :$file" fi done done
for 命令容許你遍歷一系列的值 while 命令使用普通命令或者測試命令提供了基於條件命令的循環 until 命令也提供了迭代命令的一中方法,可是取非0 的狀態進行匹配
#階乘
[root@localhost shell_script]# cat test29.sh #!/bin/bash factorial=1 for (( number = 1 ;number <= $1; number++ ));do factorial=$[ $factorial * $number ] done echo "The factorial of $1 is $factorial" [root@localhost shell_script]# ./test29.sh 8 The factorial of 8 is 40320 [root@localhost shell_script]#
傳遞9之後的參數
root@localhost shell_script]# cat test30.sh #!/bin/bash echo $1 echo ${10} echo ${11}
basename 的做用:返回不包含路徑的腳本名
[root@localhost shell_script]# cat addem #!/bin/bash #testing a multi-function script name=$(basename $0) if [ $name = "addem" ];then total=$[ $1 + $2 ] elif [ $name = "multem" ];then total=$[ $1 * $2 ] fi echo "$total" [root@localhost shell_script]# ./addem 2 3 5 [root@localhost shell_script]# mv addem multem [root@localhost shell_script]# ./multem 2 3 6 [root@localhost shell_script]#
參數統計:$#
root@localhost shell_script]# cat test32.sh #!/bin/bash # $# 可以獲取參數的個數 #getting the number of parameters echo there were $# parameters supplied. exit 0 [root@localhost shell_script]# ./test32.sh 3 4 df h s g h there were 7 parameters supplied.
關於參數統計的腳本:
${$#} 在腳本中會出現異常,須要改爲 ${!#}
[root@localhost shell_script]# cat test33.sh #!/bin/bash #Testing parameters # if [ $# -ne 2 ];then echo echo Usage: test.sh a b echo else total=$[ $1 + $2 ] echo echo the total is $total echo fi
——————————————————————————————————————————————————————————————————————————
[root@localhost shell_script]# ./test33.sh 2 Usage: test.sh a b [root@localhost shell_script]# ./test33.sh 2 4 the total is 6
$* 將給定的多個參數定義爲一個總體保存,相似"A B C"
$@ 將給定的多個參數定義爲同一字符串的多個單獨的單詞,相似 "A" "B" "C"
--------------------------------------
shift 移動變量
在使用shift命令時,默認狀況下它會將每一個參數變量向左移動一個位置。因此,變量$3的值會移到$2中,變量$2的值會移到$1中,而變量$1的值則會被刪除(注意,變量$0的值,
也就是程序名,不會改變)
[root@localhost shell_script]# cat test34.sh #!/bin/bash #demonstrating the shift command count=1 while [ -n "$1" ];do
# "$1" 須要加"" 不然沒法進行匹配
echo echo "The parameters# $count: $1" echo count=$[ $count + 1 ] shift done [root@localhost shell_script]# ./test34.sh A b 1 2 3 The parameters# 1: A The parameters# 2: b The parameters# 3: 1 The parameters# 4: 2 The parameters# 5: 3 [root@localhost shell_script]#
處理選項:查找選項
Found the -c option [root@localhost shell_script]# cat test35.sh #!/bin/bash echo while [ -n "$1" ];do case "$1" in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" ;; -c) echo "Found the -c option" ;; *) echo " "$1" is not found option" ;; esac
#shift 將每一個變量向左移動一位
shift done
[root@localhost shell_script]# ./test35.sh -z -a -v -b -c -z is not found option Found the -a option -v is not found option Found the -b option Found the -c option [root@localhost shell_script]#
分離參數和選項:
[root@localhost shell_script]# cat test36.sh #!/bin/bash # extracting options and parameters echo while [ -n "$1" ];do case "$1" in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" ;; -c) echo "Found the -c option" ;; --) shift break ;; *) echo "$1 is not an option" ;; esac shift done # count=1 for param in $@;do echo "Parameter #$count: $param " count=$[ $count + 1 ] done [root@localhost shell_script]# [root@localhost shell_script]# ./test36.sh -a -c test ss -- 1 2 3 Found the -a option Found the -c option test is not an option ss is not an option Parameter #1: 1 Parameter #2: 2 Parameter #3: 3 [root@localhost shell_script]#
處理帶值的選項:
[root@localhost shell_script]# cat test37.sh #!/bin/bash # extracting options and parameters echo while [ -n "$1" ];do case "$1" in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" ;; -c) echo "Found the -c option" echo echo "Found the param :$2 " shift ;; --) shift break ;; *) echo "$1 is not an option" ;; esac shift done # count=1 for param in $@;do echo "Parameter #$count: $param " count=$[ $count + 1 ] done [root@localhost shell_script]# ./test37.sh -a -c test ss -- 1 2 3 Found the -a option Found the -c option Found the param :test ss is not an option Parameter #1: 1 Parameter #2: 2 Parameter #3: 3 [root@localhost shell_script]#
getopt 命令:
得到用戶輸入: read 從鍵盤得到用戶輸入
read -t 5 -p "your name: " name
-t 指定超時時間
[root@localhost shell_script]# ./test38.sh your name: ww hi ww your name: ee ee [root@localhost shell_script]# cat test38.sh #!/bin/bash #testing the read command # echo -n "your name: " read name echo "hi $name" read -p "your name: " name echo "$name" [root@localhost shell_script]# ./test38.sh your name: ff hi ff your name: gg gg [root@localhost shell_script]#
[root@localhost shell_script]# cat test39.sh #!/bin/bash #getting just one character of input # read -n1 -p "Do you want to contiune [Y/N]? " answer case $answer in Y|y) echo echo "fine, continue on...";; N|n) echo echo "OK goodbye" exit;; esac echo "this is the end of the script" [root@localhost shell_script]# ./test39.sh Do you want to contiune [Y/N]? n OK goodbye [root@localhost shell_script]#
#本例中將-n選項和值1一塊兒使用,告訴read命令在接受單個字符後退出。只要按下單個字符回答後,read命令就會接受輸入並將它傳給變量,無需按回車鍵。
# -s選項能夠避免在read命令中輸入的數據出如今顯示器上(實際上,數據會被顯示,只是read命令會將文本顏色設成跟背景色同樣)。
#!/bin/bash # reading data from a file # count=1 cat test | while read line do echo "Line $count: $line" count=$[ $count + 1] done echo "Finished processing the file"
#從文件讀取內容
root@localhost shell_script]# cat test41.sh #!/bin/bash exec 1>testout #exec 永久重定向 echo "ff" echo "aa" echo "bb" [root@localhost shell_script]# cat testout ff aa bb [root@localhost shell_script]#
done < ${1} :$1 表明第一個命令行參數
控制腳本
1 SIGHUP 掛起進程 2 SIGINT 終止進程 3 SIGQUIT 中止進程 9 SIGKILL 無條件終止進程 15 SIGTERM 儘量終止進程 17 SIGSTOP 無條件中止進程,但不是終止進程 18 SIGTSTP 中止或暫停進程,但不終止進程 19 SIGCONT 繼續運行中止的進程
trap 捕獲信號
root@localhost shell_script]# cat test42.sh #!/bin/bash #Testing signal trapping # trap "echo 'Sorry I have trap Ctrl-C'" SIGINT echo "This is a test script" count=1 while [ $count -le 10 ];do echo "loop #$count" sleep 1 count=$[ $count + 1 ] done echo "END" [root@localhost shell_script]# ./test42.sh This is a test script loop #1 loop #2 ^CSorry I have trap Ctrl-C loop #3 ^CSorry I have trap Ctrl-C loop #4 ^CSorry I have trap Ctrl-C loop #5 loop #6 loop #7 loop #8 loop #9 loop #10 END [root@localhost shell_script]#
後臺運行腳本
./test1.sh & #後臺運行腳本,終端關閉後中止
nohup ./test1.sh & #後臺運行腳本,終端關閉後任然執行
nice 命令:
nice -n 10 ./test4.sh > test4.out &
定時任務執行
1.在將來某個時間點執行一次 at batch at 時間 at > COMMAND at > crtl +d :提交 指定時間: 絕對時間: HH:MM DD:MM:YY MM/DD/YY 相對時間: now+# 單位: minutes ,hours ,days ,weeks 模糊時間:noon ,midnight ,teatime 命令的執行結果將以郵件的形式發送給安排任務的用戶 at -l :顯示做業 at -d :刪除做業 at -c ;顯示執行的內容 2.週期性執行 cron :crontab 自身是一個不間斷執行的程序 anacron: cron 的補充。可以實現cron 沒執行的動做 cron: 系統cron 任務 /etc/crontab 分鐘 小時 天 月 周 用戶 任務 用戶cron 任務 /var/spool/cron/USERNAME 時間統配符:* *:對應全部有效取值 * * * * * :每分鐘執行一次 3 * * * * :表示每週每個月天天每小時的第三分鐘執行一次 3 * * * * :每一個星期天的每小時的第三分鐘執行一次 13 12 * * 5 :每週五12 點13 分執行一次 13 12 6 7 * :每一年7月6號12點13 分執行一次 ,:離散時間點 10,40 * * * * :每小時的第10 分和第40 分執行一次 -:連續時間點 10 02 * * 1-5 :每週一到週五的2 點 10 分執行一次 /:對應取值範圍內每多久執行一次 */3 * * * * :每三分鐘執行一次 * */2 * * * :每隔2 小時執行60 次, 由於每分鐘爲* 每分鐘都會執行 01 */2 * * * :每隔 2小時的第一分鐘執行一次 執行結果將以郵件方式發送給管理員 */3 * * * * cat /etc/fstab > /dev/null :每3 分鐘執行一次,而且將正確輸出重定向,錯誤內容郵箱發送 cron 環境變量在PATH 查找 在腳本中 export 定義環境變量: service crond status :查看crond 服務運行狀態 crontab -l :查看定時任務 crontab -e : 編輯, 注意使用crontab -e 編輯,直接/etc/crontab 不行 crontab -r : 移除全部任務 crontab -u :指定以哪一個用戶來運行