欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

談?wù)剆hell中的eval與crontab命令

 更新時(shí)間:2016年08月16日 08:50:18   投稿:daisy  
本文運(yùn)用實(shí)例介紹了shell中的eval與crontab命令,文章介紹的很詳細(xì),有需要的可以參考借鑒。

eval

eval會(huì)對(duì)后面的命令進(jìn)行兩遍掃描,如果第一遍掃描后,命令是個(gè)普通命令,則執(zhí)行此命令;如果命令中含有變量的間接引用,則保證間接引用的語(yǔ)義。也就是說(shuō),eval命令將會(huì)首先掃描命令行進(jìn)行所有的置換,然后再執(zhí)行該命令。因此,eval命令適用于那些一次掃描無(wú)法實(shí)現(xiàn)其功能的變量。

eval 執(zhí)行以下兩個(gè)步驟

     第一次,執(zhí)行變量替換,類似與C語(yǔ)言的宏替代

     第二次,執(zhí)行替換后的命令串

栗子:

1.  有一個(gè)名為test的文件,其內(nèi)容為“Please move on !”,定義一個(gè)內(nèi)容是cat test的字符串變量,利用echo 命令引用該變量, 則直接打印該字符串,而用eval  則會(huì)輸出文件test的內(nèi)容!

這是由于執(zhí)行eval命令第一次掃描進(jìn)行了變量置換,第二次掃描執(zhí)行了該字符串所包含的命令cat test。

2.取得傳給shell腳本的最后一個(gè)參數(shù)

  如果我們知道傳遞給shell的參數(shù)個(gè)數(shù),想要輸出最后一個(gè)參數(shù),可以使用echo直接顯示,例如,本例中輸入的參數(shù)有10、11、12共三個(gè)參數(shù),可以使用命令: echo $3

  但是如果我們不知道有幾個(gè)參數(shù),卻想輸出最后一個(gè)參數(shù),大家可能會(huì)想到使用 $$# ( $# 為傳給shell腳本的參數(shù)個(gè)數(shù))來(lái)輸出最后一個(gè)參數(shù)。

  如果使用命令: echo "\$$#"  得到的結(jié)果是 $3,而不是我們想要的12。

  使用eval命令就可以達(dá)到我們的預(yù)期:  eval echo "\$$#"    則得到的結(jié)果為12。

shell腳本內(nèi)容:

 

執(zhí)行腳本文件:

3.再比如:

[admin@localhost test]$ G='|'
[admin@localhost test]$ eval ls $G wc -l

第一步變量替換為 eval ls | wc -l  第二部再執(zhí)行命令結(jié)果 

注意:

     1、eval 不能獲得函數(shù)處理結(jié)果

     2、eval 嵌套無(wú)意義 ,在其他語(yǔ)言中可以通過(guò) eval(eval("code")) ,來(lái)執(zhí)行(執(zhí)行動(dòng)態(tài)生成的 code 的返回),而由于shell 中 eval 將后面的 eval 命令簡(jiǎn)單當(dāng)作命令字符串執(zhí)行,失去了嵌套作用,嵌套被命令替換取代。

crontab

  crond是linux下用來(lái)周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個(gè)守護(hù)進(jìn)程,系統(tǒng)會(huì)自動(dòng)啟動(dòng)crond進(jìn)程,crond進(jìn)程每分鐘會(huì)定期檢查是否有要執(zhí)行的任務(wù),如果有要執(zhí)行的任務(wù),則自動(dòng)執(zhí)行該任務(wù)。

  crontab文件包含送交cron守護(hù)進(jìn)程的一系列作業(yè)和指令。每個(gè)用戶可以擁有自己的crontab文件;同時(shí),操作系統(tǒng)保存一個(gè)針對(duì)整個(gè)系統(tǒng)的crontab文件,該文件通常存放于/etc或者/etc之下的子目錄中,而這個(gè)文件只能由系統(tǒng)管理員來(lái)修改。

  crontab命令用于設(shè)置系統(tǒng)周期性被執(zhí)行的指令。該命令從標(biāo)準(zhǔn)輸入設(shè)備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執(zhí)行。/etc/crontab文件就是系統(tǒng)任務(wù)調(diào)度的配置文件。

參數(shù):

      -l 在標(biāo)準(zhǔn)輸出上顯示當(dāng)前的crontab。

      -r 刪除當(dāng)前的crontab文件。

      -e 使用VISUAL或者EDITOR環(huán)境變量所指的編輯器編輯當(dāng)前的crontab文件

 使用格式 :

  *      *   *   *   *  command

  分   時(shí)  日  月  周   命令

  第1列表示分鐘0~59 (每分鐘用*或者 */1表示)

  第2列表示小時(shí)0~23

  第3列表示日期1~31

  第4列表示月份1~12

  第5列標(biāo)識(shí)號(hào)星期0~6(0表示星期天)

  第6列表示需要執(zhí)行的命令

除了數(shù)字還有幾個(gè)個(gè)特殊的符號(hào)就是"*"、"/"和"-"、",",*代表所有的取值范圍內(nèi)的數(shù)字。"/"代表每的意思,"/5"表示每5個(gè)單位,"-"代表從某個(gè)數(shù)字到某個(gè)數(shù)字,","分開(kāi)幾個(gè)離散的數(shù)字。

crontab文件的一些使用例子:

#每晚的21:30 重啟apache
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
#每月1、10、22日的4 : 45重啟apache
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
#每周六、周日的1 : 10重啟apache
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
#每天18 : 00至23 : 00之間每隔30分鐘重啟apache
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
#每星期六的11 : 00 pm重啟apache
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
#晚上11點(diǎn)到早上7點(diǎn)之間,每隔一小時(shí)重啟apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
#每一小時(shí)重啟apache
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
#每月的4號(hào)與每周一到周三的11點(diǎn)重啟apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
#一月一號(hào)的4點(diǎn)重啟apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
#每半小時(shí)同步一下時(shí)間
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44

以上就是關(guān)于shell中的eval與crontab命令的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家能有所幫助,如果有疑問(wèn)歡迎大家留言討論。

相關(guān)文章

最新評(píng)論