linux_shell編程

基礎(chǔ)正則表達(dá)式

  • 通配符
    匹配符合條件的文件名压真,完全匹配娩嚼;lsfindcp這些命令不支持正則就用通配符匹配
  • 正則表達(dá)式
    匹配文件中的字符串拓哟,包含匹配往踢;grepawk贵少、sed這些命令支持正則表達(dá)式
元字符 作用
* 前一個(gè)字符0次或任意多次
. 匹配除換行符外任意一個(gè)字符
^ 匹配行首
$ 匹配行尾
[] 匹配中括號(hào)中任意一個(gè)字符
[^] 匹配中括號(hào)中字符以外的任意字符
\ 轉(zhuǎn)義符
{n} 表示前面字符恰好出現(xiàn)n次
{n,} 前面字符出現(xiàn)不小于n次
{n,m} 表示前面字符至少出現(xiàn)n次,至多出現(xiàn)m次

字符截取命令

cut字段提取命令

grep命令可以提取行堆缘,cut可以提取列滔灶;文件需由制表符組成。cut命令通常和grep命令結(jié)合使用吼肥,通過(guò)管道符录平,依次實(shí)現(xiàn)功能

用法: cut [選項(xiàng)] 文件
選項(xiàng):-f列號(hào),提取第幾列缀皱;-d分隔符斗这,提取指定分隔符分割列(默認(rèn)分隔符為制表符)

實(shí)例:提取當(dāng)前系統(tǒng)所有非root用戶

$ cat /etc/passwd|grep /bin/bash|grep -v root|cut -d ":" -f 1
# 查看所有用戶信息,尋找正常用戶信息啤斗,取反剔除root|取得第一列用戶名信息

printf命令格式化打颖砑(awk基礎(chǔ))

$ printf '輸出類型輸出格式' 輸出格式
符號(hào) 作用
%ns 輸出字符串。n是數(shù)字指代輸出幾個(gè)字符
%ni 輸出整數(shù)钮莲。n是數(shù)字指代輸出幾個(gè)數(shù)字
%m.nf 輸出浮點(diǎn)數(shù)免钻。m和n是數(shù)字彼水,指代輸出的整數(shù)位數(shù)和小數(shù)位數(shù)

輸出類型:

符號(hào) 作用
%ns 輸出字符串。n是數(shù)字指代輸出幾個(gè)字符
%ni 輸出整數(shù)伯襟。n是數(shù)字指代輸出幾個(gè)數(shù)字
%m.nf 輸出浮點(diǎn)數(shù)猿涨。m和n是數(shù)字,指代輸出的整數(shù)位數(shù)和小數(shù)位數(shù)
符號(hào) 作用
\a 輸出警告音
\b 輸出退格鍵姆怪,也就是Backspace
\f 清楚屏幕
\n 換行
\r 回車叛赚,也就是Enter鍵
\t 水平輸出退格鍵,也就是Tab鍵
\v 垂直輸出退格鍵稽揭,也就是Tab鍵

輸出格式:

符號(hào) 作用
\a 輸出警告音
\b 輸出退格鍵俺附,也就是Backspace
\f 清楚屏幕
\n 換行
\r 回車,也就是Enter鍵
\t 水平輸出退格鍵溪掀,也就是Tab鍵
\v 垂直輸出退格鍵事镣,也就是Tab鍵

在awk命令中輸出支持print和printf

  • print命令在輸出之后自動(dòng)加一個(gè)換行符
  • printf命令是標(biāo)準(zhǔn)輸出,如果需要換行揪胃,就要添加換行符

實(shí)例:

$ vim stu.md
name    age     scole
john    12      88
alex    13      89
mei     12      90

$ printf '%s\t%s\t%s\t\n' $(cat stu.md)
name    age     scole
john    12      88
alex    13      89
mei     12      90

awk命令(強(qiáng)化的cut)

cut命令針對(duì)標(biāo)準(zhǔn)的確定的分隔符; awk先讀入第一行璃哟,再使用$n截取第n列

命令:$ awk '條件1{動(dòng)作1} 條件2{動(dòng)作2}... 文件名

  • $ awk '$3>=88 {print $1}' stu.md
    條件判斷,在第三列大于等于88時(shí)喊递,打印對(duì)應(yīng)第一列的內(nèi)容(但是列表第一行為表頭沒(méi)有數(shù)字)
  • cat stu.md|grep -v name|awk '$3>=89 {print $1}'
    作用同上随闪,提前反選出表頭行
  • $ df -h|grep sda6|awk '{printf $5}'|cut -d "%" -f 1
    截取硬盤使用情況,選取sda6行骚勘,打印出第5列铐伴,截取百分號(hào)前的數(shù)字
  • $ awk 'BEGIN{print "test !!"} END{print "the end !!"} {print $2 "\t" $5}' stu.md
    在awk執(zhí)行命令前后添加信息,執(zhí)行一個(gè)額外的命令
  • 如果手工定義分隔符俏讹,一定要注意第一行当宴,強(qiáng)制讀入第一行
    $ awk '{FS=":"} {print $1} "\t" $3' /etc/passwd
    此時(shí)需強(qiáng)制使用“BEGIN”
    $ awk 'BEGIN{FS=":"} {print $1} "\t" $3' /etc/passwd

sed命令

sed 是一種幾乎包括在所有 UNIX 平臺(tái)(包括 Linux)的輕量級(jí)流編輯器。sed主要是用來(lái)將數(shù)據(jù)進(jìn)行選取泽疆、替換户矢、刪除、新增的命令殉疼。(可以從管道符收集數(shù)據(jù)修改)

命令:
$ sed [選項(xiàng)] '[動(dòng)作]' 文件名

選項(xiàng) 作用
-n 一般sed命令會(huì)把所有數(shù)據(jù)都輸出到屏幕 ,如果加入此選擇,則只會(huì)把經(jīng)過(guò)sed命令處理的行輸出到屏幕梯浪。
-e 允許對(duì)輸入數(shù)據(jù)應(yīng)用多條sed命令編輯
-i 用sed的修改結(jié)果直接修改讀件,而不是由屏幕輸出

選項(xiàng):

選項(xiàng) 作用
-n 一般sed命令會(huì)把所有數(shù)據(jù)都輸出到屏幕 ,如果加入此選擇,則只會(huì)把經(jīng)過(guò)sed命令處理的行輸出到屏幕。
-e 允許對(duì)輸入數(shù)據(jù)應(yīng)用多條sed命令編輯
-i 用sed的修改結(jié)果直接修改讀件,而不是由屏幕輸出
動(dòng)作 作用
a\ 追加,在當(dāng)前行后添加一行或多行株依。添加多行時(shí),除最后 一行外,每行末尾需要用“\”代表數(shù)據(jù)未完結(jié)。
c\ 行替換,用c后面的字符串替換原數(shù)據(jù)行,替換多行時(shí),除最后一行外,每行末尾需用“\”代表數(shù)據(jù)未完結(jié)延窜。
i\ 插入,在當(dāng)期行前插入一行或多行恋腕。插入多行時(shí),除最后 一行外,每行末尾需要用“\”代表數(shù)據(jù)未完結(jié)。
d 刪除,刪除指定的行逆瑞。
p 打印,輸出指定的行荠藤。
s 字串替換,用一個(gè)字符串替換另外一個(gè)字符串伙单。格式為“行范圍s/舊字串/新字串/g”(和vim中的替換格式類似) 。

動(dòng)作:

動(dòng)作 作用
a\ 追加,在當(dāng)前行后添加一行或多行哈肖。添加多行時(shí),除最后 一行外,每行末尾需要用“\”代表數(shù)據(jù)未完結(jié)吻育。
c\ 行替換,用c后面的字符串替換原數(shù)據(jù)行,替換多行時(shí),除最后一行外,每行末尾需用“\”代表數(shù)據(jù)未完結(jié)。
i\ 插入,在當(dāng)期行前插入一行或多行淤井。插入多行時(shí),除最后 一行外,每行末尾需要用“\”代表數(shù)據(jù)未完結(jié)布疼。
d 刪除,刪除指定的行。
p 打印,輸出指定的行币狠。
s 字串替換,用一個(gè)字符串替換另外一個(gè)字符串游两。格式為“行范圍s/舊字串/新字串/g”(和vim中的替換格式類似) 。

字符處理命令

排序命令sort:

$ sort [選項(xiàng)] 文件名

選項(xiàng) 作用
-f 忽略大小寫
-n 以數(shù)值型進(jìn)行排序,默認(rèn)使用字符串型排序
-r 反向排序
-t 指定分隔符,默認(rèn)是分隔符是制表符
-k n[,m] 按照指定的字段范圍排序漩绵。從第n字段開始,m字段結(jié)束(默認(rèn)到行尾)

實(shí)例:

  • $ sort -n -t ":" -k 3,3 /etc/passwd
    以“:”為分隔符贱案,按照第三個(gè)字段的數(shù)字順序排序

統(tǒng)計(jì)命令wc:

$ wc [選項(xiàng)] 文件名

選項(xiàng) 作用
-l 只統(tǒng)計(jì)行數(shù)
-w 只統(tǒng)計(jì)單詞
-m 只統(tǒng)計(jì)字符

條件判斷

按照文件類型進(jìn)行判斷

判斷兩種格式:

  • 方法1-命令格式: $ test -e /root/install.log
  • 方法2- 腳本格式:[$ -e /root/install.log ]
選項(xiàng) 作用
-b 文件 判斷該文件是否存在,并且是否為塊設(shè)備文件(是塊設(shè)備文件為真)
-c 文件 判斷該文件是否存在,并且是否為字符設(shè)備文件(是字符設(shè)備文件為真)
-d 文件 判斷該文件是否存在,并且是否為目錄文件(是目錄為真)
-e 文件 判斷該文件是否存在(存在為真)
-f 文件 判斷該文件是否存在,并且是否為普通文件(是普通文件為真)
-L 文件 判斷該文件是否存在,并且是否為符號(hào)鏈接文件(是符號(hào)鏈接文件為真)
-p 文件 判斷該文件是否存在,并且是否為管道文件(是管道文件為真)
-s 文件 判斷該文件是否存在,并且是否為非空(非空為真)
-S 文件 判斷該文件是否存在,并且是否為套接字文件(是套接字文件為真)

加強(qiáng)判斷:
[ -d /root ] && echo "yes" || echo "no"
判斷文件目錄是否存在,如果存在輸出“yes”止吐,如果不存在輸出“no”

判斷文件的讀寫權(quán)限

選項(xiàng) 作用
-r 文件 判斷該文件是否存在,并且是否該文件擁有讀權(quán)限(有讀權(quán)限為真)
-w 文件 判斷該文件是否存在,并且是否該文件擁有寫權(quán)限(有寫權(quán)限為真)
-x 文件 判斷該文件是否存在,并且是否該文件擁有執(zhí)行權(quán)限(有執(zhí)行權(quán)限為真)
-u 文件 判斷該文件是否存在,并且是否該文件擁有SUID權(quán)限(有SUID權(quán)限為真)
-g 文件 判斷該文件是否存在,并且是否該文件擁有SGID權(quán)限(有SGID權(quán)限為真)
-k 文件 判斷該文件是否存在,并且是否該文件擁有SBit權(quán)限(有SBit權(quán)限為真)

加強(qiáng)判斷:
[ -w student.txt ] && echo "yes" || echo "no"
判斷文件讀寫權(quán)限宝踪,如果具備寫入權(quán)限,則輸出“yes”碍扔,如果不存在則輸出“no”

兩個(gè)文件之間的判斷

選項(xiàng) 作用
文件1 -nt 文件2(newer than) 判斷文件1的修改時(shí)間是否比文件2的新(如果新則為真)
文件1 -ot 文件2(older than) 判斷文件1的修改時(shí)間是否比文件2的舊(如果舊則為真)
文件1 -ef 文件2 判斷文件1是否和文件2的Inode號(hào)一致,可以理解為兩個(gè)文件是否為同一個(gè)文件瘩燥。這個(gè)判斷用于判斷硬鏈接是很好的方法

兩個(gè)整數(shù)之間的判斷

選項(xiàng) 作用
整數(shù)1 -eq 整數(shù)2(equal than) 判斷整數(shù)1是否和整數(shù)2相等(相等為真)
整數(shù)1 -ne 整數(shù)2(no equal) 判斷整數(shù)1是否和整數(shù)2不相等(不相等位置)
整數(shù)1 -gt 整數(shù)2(greater than) 判斷整數(shù)1是否大于整數(shù)2(大于為真)
整數(shù)1 -lt 整數(shù)2(less than) 判斷整數(shù)1是否小于整數(shù)2(小于位置)
整數(shù)1 -ge 整數(shù)2(greater or equal) 判斷整數(shù)1是否大于等于整數(shù)2(大于等于為真)
整數(shù)2 -le 整數(shù)2(less or equal) 判斷整數(shù)1是否小于等于整數(shù)2(小于等于為真)

實(shí)例:

$ [ 11 -gt 10 ] && echo "yes" || echo "no"
yes

字符串之間的判斷

選項(xiàng) 作用
-z 字符串 判斷字符串是否為空(為空返回真)
-n 字符串 判斷字符串是否為非空(非空返回真)
字符串1 == 字符串2 判斷字符串1是否和字符串2相等(相等返回真)
字符串2 !== 字符串2 判斷字符串1是否和字符串2不相等(不相等返回真)

實(shí)例:

$ name=hello
$ [ -z "$name" ] && echo "yes" || echo "no"
no

多重條件判斷

選項(xiàng) 作用
判斷1 -a 判斷2(and) 邏輯與,判斷1和判斷2都成立,最終的結(jié)果才為真
判斷1 -o 判斷2(or) 邏輯或,判斷1和判斷2有一個(gè)成立,最終的結(jié)果就為真
! 判斷 邏輯非,使原始的判斷式取反

實(shí)例:

$ aa=11
$ [ -n "$aa" -a "$aa" -gt 12 ] && echo "yes" || echo "no"
# “-n”判斷變量aa是否存在蕴忆,同時(shí)判斷變量aa是否大于12

流程控制

if語(yǔ)句

if [ 條件判斷式 ]; then
    程序
fi

或者

if [ 條件判斷式 ]
    then
        程序
fi

雙分支if條件句

if [ 條件判斷式 ]
    then
        條件成立時(shí)颤芬,執(zhí)行的程序
    else
        條件不成立時(shí),執(zhí)行的程序
fi

實(shí)例1:

#!/bin/bash
#coding:utf-8
#統(tǒng)計(jì)根分區(qū)使用率
#Author: alex

rate=$(df -h | grep "/dev/sda1" | awk '{print $5}' | cut -d "%" -f 1)
# 將根分區(qū)使用率賦值給變量rate

if [ $rate -ge 80 ]
    then
        echo "Warning! /dev/sda1 is full!!"
    else
    echo "/dev/sda1 is fine!" 
fi

實(shí)例2:

#!/bin/bash
# Author: shenchao (E-mail: shenchao@lampbrother.net)

port=$(nmap -sT 192.168.10.1 | grep tcp | grep http | awk '{print$2}')
#使用nmap命令掃描服務(wù)器,并截取apache服務(wù)的狀態(tài),賦予變量port
if [ "$port" == "open" ]
    then
        echo “$(date) httpd is ok!” >> /tmp/autostart-acc.log
    else
        /etc/rc.d/init.d/httpd start &>/dev/null
        echo "$(date) restart httpd !!" >> /tmp/autostart-err.log
fi

nmap命令

$ nmap -sT 192.168.10.1

Starting Nmap 7.01 ( https://nmap.org ) at 2017-08-22 18:15 CST
Nmap scan report for 192.168.10.1
Host is up (0.018s latency).
Not shown: 997 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
1900/tcp open  upnp
9876/tcp open  sd
MAC Address: 30:B4:9E:4C:83:70 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 4.78 seconds

多分支if條件句

if [ 條件判斷式1 ]
    then
        條件判斷式1為真套鹅,執(zhí)行程序1
elif [ 條件判斷式2 ]
    then
    條件判斷式2為真站蝠,執(zhí)行程序2
...
else
    程序
fi

實(shí)例:

#!/bin/bash
#判斷用戶輸入的是什么條件卓鹿,針對(duì)于當(dāng)前目錄文件和目錄
#Author:alex

read -p "PLease input a filename:" file
#接收鍵盤的輸入菱魔,并賦予變量file

if [ -z "$file" ]
#判斷file是否存在
    then
        echo "Error, please input a filename!"
        exit 1
elif [ ! -e "$file" ]
#判斷file的值是否存在
    then
        echo "Your input is not a file!"
elif [ -f "$file" ]
#判斷file的值是否為普通文件
    then
        echo "$file is a regulare file!"
elif [ -d "$file" ]
#判斷file的值是否為目錄文件
    then
        echo "$file is a directory!"
else
    echo "$file is an other file!"
fi
   

case語(yǔ)句

case語(yǔ)句和if...elif...else語(yǔ)句一樣都是多分支條件語(yǔ)句,不過(guò)和if多分支條件語(yǔ)句不同的是,case語(yǔ)句只能判斷一種條件關(guān)系,而if語(yǔ)句可以判斷多種條件關(guān)系。

語(yǔ)法:

case $變量名 in
    “值1”)
        echo “Your choose is yes!”
        ;;
    "no")
        echo "Your choose is no!"
        ;;
    ...snip...
    *)
        如果變量的值都不是以上的值吟孙,則執(zhí)行此程序
        澜倦;;
esac

實(shí)例:

#!/bin/bash
# test case
#Author:alex

echo "if you are male, enter M"
echo "if you are female, enter F"

read -t 30 -p "what is your gender: " gender

case $gender in
        "M")
                echo "Male"
                ;;
        "F")
                echo "Female"
                ;;
        *)
                echo "error M/F"
                ;;
esac

for循環(huán)

語(yǔ)法1:

for 變量 in 值1 值2 值3 ...
    do
        程序
    done
  • 實(shí)例1:
#!/bin/bash
# test for
#Author:alex

for time in yesterday today tomorrow
        do
                echo "it is $time!"
        done

  • 實(shí)例2:

語(yǔ)法2:

for((初始值杰妓;循環(huán)控制條件藻治;變量變化))
    do
        程序
    done
  • 實(shí)例1:
#!/bin/bash
# 高斯巷挥,1加到100
#Author:alex

s=0
for ((i=1;i<=100;i=i+1))
        do
                s=$(($s+$i))
        done
        echo "the sum of 1+2+...100 is:$s"
  • 實(shí)例2:
#!/bin/bash

read -t 30 -p "add user_name: " name
read -t 30 -p "add user_num: " num
read -t 30 -p "add passwd:" pass

if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
        then
                y=$(echo $num | sed 's/^[0-9]*$'//g)
                if [ -z "$y" ]
                        then
                        for ((i=1;i<=$num;i=i+1))
                                do
                                        sudo useradd $name$i &>/dev/null
                                        echo $pass | sudo passwd --stdin $name$i &>/dev/null
                                done
                fi
fi

  • 實(shí)例3:
#!/bin/bash
# 刪除新添加的用戶
#Author:alex

new_users=$(tail /etc/passwd | grep '/home' | awk 'BEGIN{FS=":"}{print $1}'|grep -v "alex")

for user in $new_users
        do
                userdel $user &> /dev/null
        done

while循環(huán)

while循環(huán)是不定循環(huán),也稱作條件循環(huán)桩卵。只要條件判斷式成立,循環(huán)就會(huì)一直繼續(xù),直到條件判斷式不成立,循環(huán)才會(huì)停止。這和for的固定循環(huán)不一樣。

語(yǔ)法:

while [條件判斷式]
    do
        程序
    done

實(shí)例:

#!/bin/bash
# test while
# Author: alex

i=1
s=0
while [ "$i" -le 100 ]
        do
                s=$(($s+$i))
                i=$(($i+1))
        done
echo "the sum is: $s"

until 循環(huán)是一個(gè)終止條件循環(huán)

語(yǔ)法:

while [條件判斷式]    # t當(dāng)滿足此條件時(shí)執(zhí)行以下循環(huán)
    do
        程序
    done

實(shí)例:

#!/bin/bash
# test while
# Author: alex

i=1
s=0
until [ "$i" -gt 100 ]    #執(zhí)行以下操作雏节,直到不滿足該條件時(shí)停止
        do
                s=$(($s+$i))
                i=$(($i+1))
        done
echo "the sum is: $s"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胜嗓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钩乍,更是在濱河造成了極大的恐慌辞州,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寥粹,死亡現(xiàn)場(chǎng)離奇詭異变过,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)排作,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門牵啦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妄痪,你說(shuō)我怎么就攤上這事哈雏。” “怎么了衫生?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵裳瘪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我罪针,道長(zhǎng)彭羹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任泪酱,我火速辦了婚禮派殷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘墓阀。我一直安慰自己毡惜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布斯撮。 她就那樣靜靜地躺著经伙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勿锅。 梳的紋絲不亂的頭發(fā)上帕膜,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音溢十,去河邊找鬼垮刹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛张弛,可吹牛的內(nèi)容都是我干的荒典。 我是一名探鬼主播宗挥,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼种蝶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瞒大,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤螃征,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后透敌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盯滚,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年酗电,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了魄藕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撵术,死狀恐怖背率,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嫩与,我是刑警寧澤寝姿,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站划滋,受9級(jí)特大地震影響饵筑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜处坪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一根资、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧同窘,春花似錦玄帕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至案狠,卻和暖如春服傍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骂铁。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工吹零, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拉庵。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓灿椅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子茫蛹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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