習題分析
本題有兩個核心知識點:
1. 如何自動表示當天的日期 2. 磁盤使用情況
# date 2017 年 12 月 20 日 星期三 16:26:55 CST
而題目中要求的格式為應該是:2017-12-20,date 命令是有這樣的功能的,示例命令如下:
# date +%Y-%m-%d 2017-12-20 或者: # date +%F 2017-12-20
磁盤使用情況,我們用命令 df -h 實現,示例命令如下:
# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/vda1 99G 1.8G 92G 2% / devtmpfs 911M 0 911M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 336K 920M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgroup tmpfs 184M 0 184M 0% /run/user/0
習題答案
有了上面的分析之后,我們最終得到本題答案:
#! /bin/bash d=`date +%F` logfile=$d.log df -h > $logfile
答案解析
把當天日期賦值給變量 d,從而定義每日的日志文件名,最終把磁盤使用情況的結果直接輸入到該日志里。這里的>,比較特殊它可以把該符號左邊的結果寫入到該符號右邊的文件里。
擴展知識點
1. shell 中反引號可以表示一個命令的結果,通常給變量賦值,示例命令如下:
# n=`wc -l /etc/passwd|awk '{print $1}'` # echo $n 23
2. date 命令還有諸多用法,示例如下:
# date +%H ##小時 16 # date +%M ##分鍾 38 # date +%S ##秒 55 # date +%T ##時間 16:39:31 # date +%w ##星期 3 # date -d "-1 day" +%F ##一天以前 2017-12-19
3. >為正確重定向,我們運行一條命令時,有正確的輸出信息也有錯誤的輸出信息,>會把正確的輸出信息寫入到指定文件里,與其對應的還有一個錯誤重定向符號 2>,顧名思義它會把錯誤信息寫入到指定文件里。示例如下:
# ls /etc/passwd /etc/nofile ##其中/etc/nofile 是不存在的,所以會報錯 ls: 無法訪問/etc/nofile: 沒有那個文件或目錄 /etc/passwd # ls /etc/passwd /etc/nofile > /tmp/log 2>/tmp/error # cat /tmp/log /etc/passwd # cat /tmp/error ls: 無法訪問/etc/nofile: 沒有那個文件或目錄