国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

談談shell中的eval與crontab命令

2020-10-28 18:48:29
字體:
來源:轉載
供稿:網友

eval

eval會對后面的命令進行兩遍掃描,如果第一遍掃描后,命令是個普通命令,則執行此命令;如果命令中含有變量的間接引用,則保證間接引用的語義。也就是說,eval命令將會首先掃描命令行進行所有的置換,然后再執行該命令。因此,eval命令適用于那些一次掃描無法實現其功能的變量。

eval 執行以下兩個步驟

     第一次,執行變量替換,類似與C語言的宏替代

     第二次,執行替換后的命令串

栗子:

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

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

2.取得傳給shell腳本的最后一個參數

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

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

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

  使用eval命令就可以達到我們的預期:  eval echo "/$$#"    則得到的結果為12。

shell腳本內容:

 

執行腳本文件:

3.再比如:

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

第一步變量替換為 eval ls | wc -l  第二部再執行命令結果 

注意:

     1、eval 不能獲得函數處理結果

     2、eval 嵌套無意義 ,在其他語言中可以通過 eval(eval("code")) ,來執行(執行動態生成的 code 的返回),而由于shell 中 eval 將后面的 eval 命令簡單當作命令字符串執行,失去了嵌套作用,嵌套被命令替換取代。

crontab

  crond是linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,系統會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

  crontab文件包含送交cron守護進程的一系列作業和指令。每個用戶可以擁有自己的crontab文件;同時,操作系統保存一個針對整個系統的crontab文件,該文件通常存放于/etc或者/etc之下的子目錄中,而這個文件只能由系統管理員來修改。

  crontab命令用于設置系統周期性被執行的指令。該命令從標準輸入設備讀取指令,并將其存放于“crontab”文件中,以供之后讀取和執行。/etc/crontab文件就是系統任務調度的配置文件。

參數:

      -l 在標準輸出上顯示當前的crontab。

      -r 刪除當前的crontab文件。

      -e 使用VISUAL或者EDITOR環境變量所指的編輯器編輯當前的crontab文件

 使用格式 :

  *      *   *   *   *  command

  分   時  日  月  周   命令

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

  第2列表示小時0~23

  第3列表示日期1~31

  第4列表示月份1~12

  第5列標識號星期0~6(0表示星期天)

  第6列表示需要執行的命令

除了數字還有幾個個特殊的符號就是"*"、"/"和"-"、",",*代表所有的取值范圍內的數字。"/"代表每的意思,"/5"表示每5個單位,"-"代表從某個數字到某個數字,","分開幾個離散的數字。

crontab文件的一些使用例子:

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

以上就是關于shell中的eval與crontab命令的全部內容,希望本文的內容對大家能有所幫助,如果有疑問歡迎大家留言討論。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双辽市| 成安县| 霍州市| 溆浦县| 吉林省| 凉山| 濉溪县| 张家川| 五峰| 东至县| 玛沁县| 桐庐县| 江津市| 容城县| 隆子县| 汉源县| 昭平县| 铁力市| 西盟| 荔波县| 拜泉县| 昌吉市| 惠安县| 英吉沙县| 梅州市| 台东市| 玉山县| 固始县| 泰安市| 谢通门县| 宜兴市| 康保县| 南岸区| 神农架林区| 永善县| 尼勒克县| 石城县| 牡丹江市| 德化县| 冀州市| 新余市|