linuxshell編程實(shí)戰(zhàn)-編寫簡單的腳本實(shí)用工具

不管你負(fù)責(zé)的是商業(yè)環(huán)境的Linux系統(tǒng)還是家用環(huán)境的挟裂,丟失數(shù)據(jù)都是一場災(zāi)難。為了防止
這種倒霉事揍诽,最好是定時進(jìn)行備份(或者是歸檔)诀蓉。
但是好想法和實(shí)用性經(jīng)常是兩回事。制定一個存儲重要文件的備份計(jì)劃絕非易事暑脆。這時候
shell腳本通常能夠助你一臂之力渠啤。
本節(jié)將會演示兩種使用shell腳本備份Linux系統(tǒng)數(shù)據(jù)的方法。
歸檔數(shù)據(jù)文件
如果你正在用Linux系統(tǒng)作為一個重要項(xiàng)目的平臺添吗,可以創(chuàng)建一個shell腳本來自動獲取特定
目錄的快照沥曹。在配置文件中指定所涉及的目錄,這樣一來,在項(xiàng)目發(fā)生變化時妓美,你就可以做出對
應(yīng)的修改僵腺。這有助于避免把時間耗在恢復(fù)主歸檔文件上。
本節(jié)將會介紹如何創(chuàng)建自動化shell腳本來獲取指定目錄的快照并保留舊數(shù)據(jù)的歸檔壶栋。

  1. 需要的功能
    Linux中歸檔數(shù)據(jù)的主要工具是 tar 命令(參見第4章)想邦。 tar 命令可以將整個目錄歸檔到單個
    文件中。下面的例子是用 tar 命令來創(chuàng)建工作目錄歸檔文件委刘。
$ tar -cf archive.tar /home/Christine/Project/*.*
tar: Removing leading '/' from member names
$
$ ls -l archive.tar
-rw-rw-r--. 1 Christine Christine 51200 Aug 27 10:51 archive.tar
$

tar 命令會顯示一條警告消息丧没,表明它刪除了路徑名開頭的斜線,將路徑從絕對路徑名變成
相對路徑名(參見第3章)锡移。這樣就可以將 tar 歸檔文件解壓到文件系統(tǒng)中的任何地方了呕童。你很可
能不想在腳本中出現(xiàn)這條消息。這種情況可以通過將 STDERR 重定向到 /dev/null 文件(參見第
15章)實(shí)現(xiàn)淆珊。

$ tar -cf archive.tar /home/Christine/Project/*.* 2>/dev/null
$
$ ls -l archive.tar
-rw-rw-r--. 1 Christine Christine 51200 Aug 27 10:53 archive.tar
$

由于 tar 歸檔文件會消耗大量的磁盤空間夺饲,最好能夠壓縮一下該文件。這只需要加一個 -z 選
項(xiàng)就行了施符。它會將 tar 歸檔文件壓縮成gzip格式的tar文件往声,這種文件也叫作tarball。別忘了使用恰
當(dāng)?shù)奈募U(kuò)展名來表示這是個tarball戳吝,用.tar.gz或.tgz都行浩销。下面的例子創(chuàng)建了項(xiàng)目目錄的tarball。

$ tar -zcf archive.tar.gz /home/Christine/Project/*.* 2>/dev/null
$
$ ls -l archive.tar.gz
-rw-rw-r--. 1 Christine Christine 3331 Aug 27 10:53 archive.tar.gz
$

現(xiàn)在你已經(jīng)完成了歸檔腳本的主要部分听哭。
你不需要為待備份的新目錄或文件修改或編寫新的歸檔腳本慢洋,而是可以借助于配置文件。配
置文件應(yīng)該包含你希望進(jìn)行歸檔的每個目錄或文件陆盘。

$ cat Files_To_Backup
/home/Christine/Project
/home/Christine/Downloads
/home/Does_not_exist
/home/Christine/Documents
$

說明 如果你使用的是帶圖形化桌面的Linux發(fā)行版普筹,那么歸檔整個HOME目錄時要注意。盡管 這個想法很有吸引力隘马,但HOME目錄含有很多跟圖形化桌面有關(guān)的配置文件和臨時文
件太防。它會生成一個比你想象中大很多的歸檔文件。選擇一個用來存儲工作文件的子目錄酸员,
然后在歸檔配置文件中加入那個子目錄蜒车。
可以讓腳本讀取配置文件,然后將每個目錄名加到歸檔列表中沸呐。要實(shí)現(xiàn)這一點(diǎn)醇王,只需要使用
read 命令(參見第14章)來讀取該文件中的每一條記錄就行了呢燥。不過不用像之前那樣(參見第
13章)通過管道將 cat 命令的輸出傳給 while 循環(huán)崭添,在這個腳本中我們使用 exec 命令(參見第14
章)來重定向標(biāo)準(zhǔn)輸入( STDIN ),用法如下叛氨。

exec < $CONFIG_FILE
read FILE_NAME

注意呼渣,我們?yōu)闅w檔配置文件使用了一個變量棘伴, CONFIG_FILE 。配置文件中每一條記錄都會被
讀入屁置。只要 read 命令在配置文件中發(fā)現(xiàn)還有記錄可讀焊夸,它就會在 ? 變量中(參見第11章)返回一
個表示成功的退出狀態(tài)碼 0 ±督牵可以將它作為 while 循環(huán)的測試條件來讀取配置文件中的所有記錄阱穗。

while [ $? -eq 0 ]
do
[...]
read FILE_NAME
done

一旦 read 命令到了配置文件的末尾,它就會返回一個非零狀態(tài)碼使鹅。這時腳本會退出 while
循環(huán)揪阶。
在 while 循環(huán)中,我們需要做兩件事患朱。首先鲁僚,必須將目錄名加到歸檔列表中。更重要的是要
檢查那個目錄是否存在裁厅!很可能你從文件系統(tǒng)中刪除了一個目錄卻忘了更新歸檔配置文件冰沙。可以
用一個簡單的 if 語句來檢查目錄存在與否(參見第12章)执虹。如果目錄存在拓挥,它會被加入要?dú)w檔目
錄列表 FILE_LIST 中,否則就顯示一條警告消息袋励。 if 語句如下撞叽。

if [ -f $FILE_NAME -o -d $FILE_NAME ]
then
# If file exists, add its name to the list.
FILE_LIST="$FILE_LIST $FILE_NAME"
else
# If file doesn't exist, issue warning
echo
echo "$FILE_NAME, does not exist."
echo "Obviously, I will not include it in this archive."
echo "It is listed on line $FILE_NO of the config file."
echo "Continuing to build archive list..."
echo
fi
#
FILE_NO=$[$FILE_NO + 1] # Increase Line/File number by one.

由于歸檔配置文件中的記錄可以是文件名,也可以是目錄名插龄,所以 if 語句會用 -f 選項(xiàng)和 -d
選項(xiàng)測試兩者是否存在愿棋。 or 選項(xiàng) -o 考慮到了,在測試文件或目錄的存在性時均牢,只要其中一個測
試為真糠雨,那么整個 if 語句就成立。
為了在跟蹤不存在的目錄和文件上提供一點(diǎn)額外幫助徘跪,我們添加了變量 FILE_NO 甘邀。這樣,這
個腳本就可以告訴你在歸檔配置文件中哪行中含有不正確或缺失的文件或目錄垮庐。

  1. 創(chuàng)建逐日歸檔文件的存放位置
    如果你只是備份少量文件松邪,那么將這些歸檔文件放在你的個人目錄中就行了。但如果要對多
    個目錄進(jìn)行備份哨查,最好還是創(chuàng)建一個集中歸檔倉庫目錄逗抑。
$ sudo mkdir /archive
[sudo] password for Christine:
$
$ ls -ld /archive
drwxr-xr-x. 2 root root 4096 Aug 27 14:10 /archive
$

創(chuàng)建好集中歸檔目錄后,你需要授予某些用戶訪問權(quán)限。如果忘記了這一點(diǎn)邮府,在該目錄下創(chuàng)
建文件時就會出錯荧关。

$ mv Files_To_Backup /archive/
mv: cannot move 'Files_To_Backup' to
'/archive/Files_To_Backup': Permission denied
$

可以通過 sudo 命令或者創(chuàng)建一個用戶組的方式,為需要在集中歸檔目錄中創(chuàng)建文件的用戶
授權(quán)褂傀∪唐。可以創(chuàng)建一個特殊的用戶組Archivers。

$ sudo groupadd Archivers
$
$ sudo chgrp Archivers /archive
$
$ ls -ld /archive
drwxr-xr-x. 2 root Archivers 4096 Aug 27 14:10 /archive
$
$ sudo usermod -aG Archivers Christine
[sudo] password for Christine:
$
$ sudo chmod 775 /archive
$
$ ls -ld /archive
drwxrwxr-x. 2 root Archivers 4096 Aug 27 14:10 /archive
$

將用戶添加到Archivers組后仙辟,用戶必須先登出然后再登入同波,才能使組成員關(guān)系生效。現(xiàn)在只
要是該組的成員叠国,無需超級用戶權(quán)限就可以在目錄中創(chuàng)建文件了参萄。

$ mv Files_To_Backup /archive/
$
$ ls /archive
Files_To_Backup
$

記住,Archivers組的所有用戶都可以在歸檔目錄中添加和刪除文件煎饼。為了避免組用戶刪除他
人的歸檔文件讹挎,最好還是把目錄的粘滯位加上。
現(xiàn)在你已經(jīng)有足夠的信息來編寫腳本了吆玖。下一節(jié)將講解如何創(chuàng)建按日歸檔的腳本筒溃。

  1. 創(chuàng)建按日歸檔的腳本
    Daily_Archive腳本會自動在指定位置創(chuàng)建一個歸檔,使用當(dāng)前日期來唯一標(biāo)識該文件沾乘。下面
    是腳本中的對應(yīng)部分的代碼怜奖。
DATE=$(date +%y%m%d)
#
# Set Archive File Name
#
FILE=archive$DATE.tar.gz
#
# Set Configuration and Destination File
#
CONFIG_FILE=/archive/Files_To_Backup
DESTINATION=/archive/$FILE
#

DESTINATION 變量會將歸檔文件的全路徑名加上去。 CONFIG_FILE 變量指向含有待歸檔目
錄信息的歸檔配置文件翅阵。如果需要歪玲,二者都可以很方便地改成備用目錄和文件。
說明 如果你剛開始編寫腳本掷匠,那么在面對一個完整的腳本代碼時(你馬上就會看到)滥崩,要養(yǎng)成
通讀整個腳本的習(xí)慣。試著理解內(nèi)在的邏輯和腳本的控制流程讹语。對于不理解的腳本語法
或某些片段钙皮,就重新去閱讀書中相關(guān)的章節(jié)。這種習(xí)慣能夠幫助你非惩缇觯快速地習(xí)得腳本
編寫技巧短条。
將所有的內(nèi)容結(jié)合在一起,Daily_Archive腳本內(nèi)容如下才菠。

#!/bin/bash
#
# Daily_Archive - Archive designated files & directories
########################################################
#
# Gather Current Date
#
DATE=$(date +%y%m%d)
#
# Set Archive File Name
#
FILE=archive$DATE.tar.gz
#
# Set Configuration and Destination File
#
CONFIG_FILE=/archive/Files_To_Backup
DESTINATION=/archive/$FILE
#
######### Main Script #########################
#
# Check Backup Config file exists
#
if [ -f $CONFIG_FILE ] # Make sure the config file still exists.
then # If it exists, do nothing but continue on.
echo
else # If it doesn't exist, issue error & exit script.
echo
echo "$CONFIG_FILE does not exist."
echo "Backup not completed due to missing Configuration File"
echo
exit
fi
#
# Build the names of all the files to backup
#
FILE_NO=1 # Start on Line 1 of Config File.
exec < $CONFIG_FILE # Redirect Std Input to name of Config File
#
read FILE_NAME # Read 1st record
#
while [ $? -eq 0 ] # Create list of files to backup.
do
# Make sure the file or directory exists.
if [ -f $FILE_NAME -o -d $FILE_NAME ]
then
# If file exists, add its name to the list.
FILE_LIST="$FILE_LIST $FILE_NAME"
else
# If file doesn't exist, issue warning
echo
echo "$FILE_NAME, does not exist."
echo "Obviously, I will not include it in this archive."
echo "It is listed on line $FILE_NO of the config file."
echo "Continuing to build archive list..."
echo
fi
#
FILE_NO=$[$FILE_NO + 1] # Increase Line/File number by one.
read FILE_NAME # Read next record.
done
#
#######################################
#
# Backup the files and Compress Archive
#
echo "Starting archive..."
echo
#
tar -czf $DESTINATION $FILE_LIST 2> /dev/null
#
echo "Archive completed"
echo "Resulting archive file is: $DESTINATION"
echo
#
exit

  1. 運(yùn)行按日歸檔的腳本
    在測試腳本之前茸时,別忘了修改腳本文件的權(quán)限(參見第11章)。必須賦予文件屬主可執(zhí)行權(quán)
    限( x )才能夠運(yùn)行腳本赋访。
$ ls -l Daily_Archive.sh
-rw-rw-r--. 1 Christine Christine 1994 Aug 28 15:58 Daily_Archive.sh
$
$ chmod u+x Daily_Archive.sh
$
$ ls -l Daily_Archive.sh
-rwxrw-r--. 1 Christine Christine 1994 Aug 28 15:58 Daily_Archive.sh
$

測試Daily_Archive腳本非常簡單可都。

$ ./Daily_Archive.sh
/home/Does_not_exist, does not exist.
Obviously, I will not include it in this archive.
It is listed on line 3 of the config file.
Continuing to build archive list...
Starting archive...
Archive completed
Resulting archive file is: /archive/archive140828.tar.gz
$ ls /archive
archive140828.tar.gz Files_To_Backup
$

你會看到這個腳本發(fā)現(xiàn)了一個不存在的目錄:/home/Does_not_exist缓待。腳本能夠告訴你這個錯
誤的行在配置文件中的行號,然后繼續(xù)創(chuàng)建列表和歸檔數(shù)據(jù)⌒谠粒現(xiàn)在數(shù)據(jù)已經(jīng)穩(wěn)妥地歸檔到了tarball
文件中命斧。

  1. 創(chuàng)建按小時歸檔的腳本
    如果你是在文件更改很頻繁的高容量生產(chǎn)環(huán)境中田晚,那么按日歸檔可能不夠用嘱兼。如果要將歸檔
    頻率提高到每小時一次,你還要考慮另一個因素贤徒。
    在按小時備份文件時芹壕,如果依然使用 date 命令為每個tarball文件加入時間戳,事情很快就會
    變得丑陋不堪接奈。篩選一個含有如下文件名的目錄會很乏味:
archive010211110233.tar.gz

不必將所有的歸檔文件都放到同一目錄中踢涌,你可以為歸檔文件創(chuàng)建一個目錄層級。

image.png

這個歸檔目錄包含了與一年中的各個月份對應(yīng)的目錄序宦,將月的序號作為目錄名睁壁。而每月的目
錄中又包含與當(dāng)月各天對應(yīng)的目錄(用天的序號作為目錄名)。這樣你只用給每個歸檔文件加上
時間戳互捌,然后將它們放到與月日對應(yīng)的目錄中就行了潘明。
首先,必須創(chuàng)建新目錄/archive/hourly秕噪,并設(shè)置適當(dāng)?shù)臋?quán)限钳降。之前我們說過,Archivers組有權(quán)
在目錄中創(chuàng)建歸檔文件腌巾。因此遂填,這個新創(chuàng)建的目錄也得修改它的屬組以及組權(quán)限。

$ sudo mkdir /archive/hourly
[sudo] password for Christine:
$
$ sudo chgrp Archivers /archive/hourly
$
$ ls -ld /archive/hourly/
drwxr-xr-x. 2 root Archivers 4096 Sep 2 09:24 /archive/hourly/
$
$ sudo chmod 775 /archive/hourly
$
$ ls -ld /archive/hourly
drwxrwxr-x. 2 root Archivers 4096 Sep 2 09:24 /archive/hourly
$

新目錄設(shè)置好之后澈蝙,將按小時歸檔的配置文件File_To_Backup移動到該目錄中吓坚。

$ cat Files_To_Backup
/usr/local/Production/Machine_Errors
/home/Development/Simulation_Logs
$
$ mv Files_To_Backup /archive/hourly/
$

現(xiàn)在,還有個新問題要解決灯荧。這個腳本必須自動創(chuàng)建對應(yīng)每月和每天的目錄凌唬,如果這些目錄
已經(jīng)存在的話,腳本就會報(bào)錯漏麦。這可不是我們想要的結(jié)果客税!
如果仔細(xì)查看 mkdir 命令的命令行選項(xiàng)的話(參見第3章),會發(fā)現(xiàn)有一個 -p 命令行選項(xiàng)撕贞。這
個選項(xiàng)允許在單個命令中創(chuàng)建目錄和子目錄更耻。另外,額外的福利是:就算目錄已經(jīng)存在捏膨,它也不
會產(chǎn)生錯誤消息秧均。這正是我們的腳本中所需要的食侮!
現(xiàn)在可以創(chuàng)建Hourly_Archive.sh腳本了。以下是前腳本的前半部分目胡。

#!/bin/bash
#
# Hourly_Archive - Every hour create an archive
#########################################################
#
# Set Configuration File
#
CONFIG_FILE=/archive/hourly/Files_To_Backup
#
# Set Base Archive Destination Location
#
BASEDEST=/archive/hourly
#
# Gather Current Day, Month & Time
#
DAY=$(date +%d)
MONTH=$(date +%m)
TIME=$(date +%k%M)
#
# Create Archive Destination Directory
#
mkdir -p $BASEDEST/$MONTH/$DAY
#
# Build Archive Destination File Name
#
DESTINATION=$BASEDEST/$MONTH/$DAY/archive$TIME.tar.gz
#
########## Main Script ####################
[...]

一旦腳本Hourly_Archive.sh到了Main Script部分锯七,就和Daily_Archive.sh腳本完全一樣了。大
部分工作都已經(jīng)完成誉己。
Hourly_Archive.sh會從 date 命令提取天和月眉尸,以及用來唯一標(biāo)識歸檔文件的時間戳。然后它
用這個信息創(chuàng)建與當(dāng)天對應(yīng)的目錄(如果已經(jīng)存在的話巨双,就安靜地退出)噪猾。最后,這個腳本用 tar
命令創(chuàng)建歸檔文件并將它壓縮成一個tarball筑累。

  1. 運(yùn)行按小時歸檔的腳本
    跟Daily_Archive.sh腳本一樣袱蜡,在將Hourly_Archive.sh腳本放到cron表中之前最好先測試一下。
    腳本運(yùn)行之前必須修改好權(quán)限慢宗。另外坪蚁,通過 date 命令檢查小時和分鐘。知道了當(dāng)前的時和分才
    能夠驗(yàn)證最終歸檔文件名的正確性镜沽。
$ chmod u+x Hourly_Archive.sh
$
$ date +%k%M
1011
$
$ ./Hourly_Archive.sh
Starting archive...
Archive completed
Resulting archive file is: /archive/hourly/09/02/archive1011.tar.gz
$
$ ls /archive/hourly/09/02/
archive1011.tar.gz
$

這個腳本第一次運(yùn)行很正常敏晤,創(chuàng)建了相應(yīng)的月和天的目錄,隨后生成的歸檔文件名也沒問題淘邻。
注意茵典,歸檔文件名archive1011.tar.gz中包含了對應(yīng)的小時(10)和分鐘(11)。
說明 如果你當(dāng)天運(yùn)行 Hourly_Archive.sh 腳本宾舅,那么當(dāng)小時數(shù)是單個數(shù)字時统阿,歸檔文件名中只會
出現(xiàn)3個數(shù)字。例如運(yùn)行腳本的時間是1:15am筹我,那么歸檔文件名就是 archive115.tar.gz 扶平。如
果你希望文件名中總是保留4位數(shù)字,可以將腳本行 TIME=(date +%k%M) 修改成 TIME=(date +%k0%M) 蔬蕊。在 %k 后加入數(shù)字0后结澄,所有的單數(shù)字小時數(shù)都會被加入一個前
導(dǎo)數(shù)字0,填充成兩位數(shù)字岸夯。因此麻献, archive115.tar.gz 就變成了 archive0115.tar.gz 。
為了進(jìn)行充分的測試猜扮,我們再次運(yùn)行腳本勉吻,看看當(dāng)目錄/archive/hourly/09/02/已存在的時候會
不會出現(xiàn)問題。

$ date +%k%M
1017
$
$ ./Hourly_Archive.sh
Starting archive...
Archive completed
Resulting archive file is: /archive/hourly/09/02/archive1017.tar.gz
$ ls /archive/hourly/09/02/
archive1011.tar.gz archive1017.tar.gz
$

沒有問題旅赢!這個腳本仍正常運(yùn)行齿桃,并創(chuàng)建了第二個歸檔文件』蠡蹋現(xiàn)在可以把它放到cron表中了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市短纵,隨后出現(xiàn)的幾起案子带污,更是在濱河造成了極大的恐慌,老刑警劉巖香到,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鱼冀,死亡現(xiàn)場離奇詭異,居然都是意外死亡养渴,警方通過查閱死者的電腦和手機(jī)雷绢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門泛烙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來理卑,“玉大人,你說我怎么就攤上這事蔽氨∶赀耄” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵鹉究,是天一觀的道長宇立。 經(jīng)常有香客問我,道長自赔,這世上最難降的妖魔是什么妈嘹? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮绍妨,結(jié)果婚禮上润脸,老公的妹妹穿的比我還像新娘。我一直安慰自己他去,他們只是感情好毙驯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灾测,像睡著了一般爆价。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上媳搪,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天峦萎,我揣著相機(jī)與錄音租漂,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛版姑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播普泡,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼活逆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拗胜,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔗候,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后埂软,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锈遥,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年勘畔,在試婚紗的時候發(fā)現(xiàn)自己被綠了所灸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡炫七,死狀恐怖爬立,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情万哪,我是刑警寧澤侠驯,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站奕巍,受9級特大地震影響吟策,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜的止,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一檩坚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诅福,春花似錦匾委、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旺芽,卻和暖如春沪猴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背采章。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工运嗜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悯舟。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓担租,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抵怎。 傳聞我的和親對象是個殘疾皇子奋救,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 題目:給定長字符串a(chǎn)和段字符串b岭参,如何判斷短字符串中所有字符均在長字符串a(chǎn)中?示例:a="ABCD", b="BA...
    吳金君閱讀 189評論 0 0
  • 自體弱小尝艘,黑暗就會來臨演侯。一切充滿敵意的東西都會出現(xiàn)。自體強(qiáng)大背亥,自然可以抵擋一些敵意秒际。也會更好的打開自己,迎接復(fù)雜狡汉。
    小笨魚王月閱讀 355評論 0 0
  • 2017.8.31 我沒有忘記昨天答應(yīng)了一家幼兒園今天去面試娄徊,過了中午,我和林子一起去這個地兒盾戴。查詢了路線圖寄锐,怎么...
    小燕999閱讀 403評論 1 3
  • 琪33閱讀 455評論 0 0