Linux之bash

bash的基礎(chǔ)特性之
    globbing:文件名通配【一次操作多文件】
          匹配模式:元字符
                *:匹配任意長(zhǎng)度的任意字符【pa* 已pa開頭的任意文件 ls pa*瑰钮,但是在/目錄下ls好像顯示有問題】
                ?:匹配任意單個(gè)字符【如果是 pa?必須是pa后加上一個(gè)字符】
               []:匹配指定范圍內(nèi)的任意單個(gè)字符
                   [a-z],[a-z0-9]
                   [[:upper:]]匹配所有大寫字母
                   [[:lower:]]:匹配所有 小寫字母
                   [[:alpha:]]:匹配所有字母
                   [[:digit:]]:匹配所有數(shù)字
                   [[:alnum:]]:匹配所有字母和數(shù)字
                   [[:space:]]:匹配所有空白字符
                   [[:punct:]]:匹配所有標(biāo)點(diǎn)符號(hào)
               [^]:匹配指定范圍外的任意單個(gè)字符
                   [^[:upper:]]
                   [^0-9]
                   [^[:alnum:]] 
               舉例:復(fù)制/home/myhome下所有以m開頭非數(shù)字結(jié)尾的文件夾到目標(biāo)地址:cp /home/myhome/m*[^0-9] /to/myPath
IO重定向及管理
程序:指令+數(shù)據(jù)
     程序也有數(shù)據(jù)的IO

     可用于輸入的設(shè)備:文件
        鍵盤設(shè)備、文件系統(tǒng)上的常規(guī)文件畅涂、網(wǎng)卡等芭梯;
    可用于輸出的設(shè)備:文件
        顯示器皇钞、文件系統(tǒng)上的常規(guī)文件跨细、網(wǎng)卡燈砚偶。
     程序的數(shù)據(jù)流有三種:
         輸入的數(shù)據(jù)流:<--標(biāo)準(zhǔn)輸入(stdin),一般是鍵盤是越;
         輸出的數(shù)據(jù)流:-->標(biāo)準(zhǔn)輸出(sdtout)耳舅,一般是顯示器;
         錯(cuò)誤的輸出流: -->錯(cuò)誤輸出(stderr)倚评,一般也是顯示器浦徊。

       fd:file descriptor 文件描述符
            標(biāo)準(zhǔn)輸入:0
            標(biāo)準(zhǔn)輸出:1
            錯(cuò)誤輸出:2
特殊設(shè)備:/dev/null[這個(gè)還是不是很理解,但是看到老師有寫天梧,在創(chuàng)建用戶時(shí):
  id user1 &> /dev/null || useradd user1

]

IO重定向:
  輸出重定向:>

  可以輸出到其他文件中盔性,例如cat ./m.txt > ./n/i.txt此時(shí)看./n/i.txt的文件就是之前./m.txt的內(nèi)容了,也可以輸出到其他終端上腿倚,例如cat ./m.txt > /dev/tty1此時(shí)登錄tty1就能夠看到這個(gè)消息
          特性:覆蓋輸出
     追加輸出重定向:>>保留原有文件內(nèi)容追加,例如cat m.txt >> n.txt 會(huì)把m和n的文件合并到n文件

          set -C 
              禁止覆蓋輸出重定向文件
              此時(shí)可以使用強(qiáng)制覆蓋輸出:>|
         set +C
              關(guān)閉上述特性
         set -/+ C僅對(duì)當(dāng)前shell有效

   錯(cuò)誤輸出重定向:2> ,2>>
          這個(gè)是把命令執(zhí)行的錯(cuò)誤信息輸出敷燎,而不是正常數(shù)據(jù)的輸出

   合并正常輸出流和錯(cuò)誤輸出流:
             1暂筝、&>,&>>
             2、command > /path/to/file 2>&1
                command >>  /path/to/file 2>&1
                相應(yīng)的信息輸出到file硬贯,如果報(bào)錯(cuò)也追加輸入
錯(cuò)誤信息輸出至某個(gè)文件
輸入重定向:
<
tr命令:把輸入的數(shù)據(jù)當(dāng)中的字符焕襟,反思在SET1定義范圍內(nèi)出現(xiàn)的,對(duì)位轉(zhuǎn)換為SET2中字符饭豹,如果使用參數(shù)-d鸵赖,且SET2為空則將SET1中的字符進(jìn)行刪除顯示并不刪除源數(shù)據(jù)。
tr [a-z] [A-Z] < /path/to/file
      會(huì)把file文件中的字符轉(zhuǎn)換為大寫顯示拄衰,但是源文件依然不變它褪。

<<:here documents
      交互式:cat << EOF 結(jié)束后輸入EOF即會(huì)顯示交互的內(nèi)容
      輸出至文件:cat > /path/to/file << EOF 結(jié)束后輸入EOF無(wú)反應(yīng),交互內(nèi)容保存至file中
管道
  連接程序翘悉,實(shí)現(xiàn)將前一個(gè)命令的輸出直接重定向?yàn)楹笠粋€(gè)程序的輸入 COMMAND1 | COMMAND2 | COMMAND3

        例如:cat m.txt | tr 'a-z' 'A-Z'則會(huì)將把m.txt文件中的小寫字母替換為大寫
                  who | head -2 查看前兩個(gè)用戶

tee命令  把數(shù)據(jù)流分為兩叉茫打,既干這個(gè)又干那個(gè)
          例如:cat m.txt | tee /etc/m.tee | tr 'a-z' 'A-Z' 既會(huì)把m.txt的數(shù)據(jù)通過(guò)tr命令顯示小寫替換為大寫,還能把m.txt的數(shù)據(jù)復(fù)制給/etc/m.tee文件

bash基礎(chǔ)特性之自動(dòng)補(bǔ)充命令

命令補(bǔ)全:
      shell程序接收到用戶執(zhí)行命令的請(qǐng)求妖混,分析完成后老赤,最左側(cè)的字符串會(huì)當(dāng)作命令。
       命令的查找機(jī)制:
              查找內(nèi)部命令制市;
              根據(jù)PATH環(huán)境變量中設(shè)定的目錄抬旺,自作而又諸葛搜索目錄下的文件名。
       如果給定的打頭字符串能夠唯一標(biāo)識(shí)某一命令程序文件祥楣,則自動(dòng)補(bǔ)全开财,如果不能唯一識(shí)別,再按一次tab荣堰,顯示出所有以此字符串打頭的列表床未。

路徑補(bǔ)全:
        根據(jù)給定的起始路徑補(bǔ)全。 
        如果給定的打頭字符串能夠唯一標(biāo)識(shí)某一路徑文件振坚,則自動(dòng)補(bǔ)全薇搁,如果不能唯一識(shí)別,再按一次tab渡八,顯示出所有以此字符串打頭的列表啃洋。
bash的基礎(chǔ)特性之命令行展開
~:自動(dòng)展開為用戶的家目錄,或指定的用戶的家目錄屎鳍;
{}:可承載一個(gè)以逗號(hào)分隔的路徑列表宏娄,并能夠?qū)⑵湔归_為多個(gè)路徑。
    例如/tmp/{a,b}  相當(dāng)于/tmp/a /tmp/b
             mkdir {a,b}_{c,d} 會(huì) 創(chuàng)建a_c,a_d,b_c,b_d

bash基礎(chǔ)特性之命令執(zhí)行的狀態(tài)結(jié)果

    命令執(zhí)行的狀態(tài)結(jié)果:
            bash通過(guò)裝填返回值來(lái)輸出此結(jié)果:
                成功:0逮壁;
                失敺跫帷:1-255.
            保存于環(huán)境變量$?中
  命令執(zhí)行完成后,有的還會(huì)有命令返回值,根據(jù)命令及其功能不同卖宠,結(jié)果各不同巍杈。
    
   引用命令的執(zhí)行結(jié)果:
          $(command)或`command`
            例如mkdir $(date %m-%d-%y)

bash基礎(chǔ)特性之快捷鍵

    ctrl + a 跳轉(zhuǎn)至命令行行首
    ctrl + e 跳轉(zhuǎn)至命令行行尾
    
    ctrl + u 刪除行首至光標(biāo)所在之處之間的所有字符;
    ctrl + k 刪除光標(biāo)所在處至行尾的所有字符
  
    ctrl + l clear清屏
bash特性及bash腳本編程初步
系統(tǒng)構(gòu)成
  終端:附著在終端的接口 程序:
      GUI:KDE扛伍,GNome筷畦,Xfce
      CLI:/etc/shells


  bash的特性:
      命令行展開:~,{}【這個(gè)知識(shí)點(diǎn)有點(diǎn)忘了,需要重新去溫習(xí)一下2020/03/22】
      命令別名:alias刺洒,unalias
      命令歷史:history
      文件名通配:glob
      快捷鍵:Ctrl +a鳖宾,e,u,k,l
      命令補(bǔ)全:通過(guò)$PATH查找
      路徑補(bǔ)全:通過(guò)打頭位置查找
      
      命令hash:緩存此前運(yùn)行的命令的程序位置(key:value數(shù)據(jù)結(jié)構(gòu),key搜索鍵逆航,value值)
          -d 刪除hash表中的某個(gè)命令歷史【使用場(chǎng)景鼎文,例如把cat程序從目錄A移動(dòng)到了目錄B,但是hash表中的緩存依然是目錄A纸泡,那么則會(huì)執(zhí)行出錯(cuò)漂问,此時(shí)刪除一下hash表中的cat命令即可,如果在hash表中沒有記錄女揭,則會(huì)去環(huán)境變量中查找此命令的實(shí)際位置】
          -r  清空hash表所有的記錄

       變量:指向內(nèi)存空間【修改數(shù)據(jù)只能在內(nèi)存中操作】
          程序:指令+數(shù)據(jù)
              指令:由程序文件提供蚤假;
              數(shù)據(jù):通過(guò)IO設(shè)備獲取、通過(guò)文件獲取吧兔、通過(guò)管道磷仰、通過(guò)變量
          程序也可稱為:算法+數(shù)據(jù)結(jié)構(gòu)
          變量名:指向內(nèi)存中某一段空間的起始地址
          變量賦值:name = value【shell中】
          變量類型:決定了存儲(chǔ)格式、表示數(shù)據(jù)范圍境蔼、參與的運(yùn)算
              編程語(yǔ)言:
                  強(qiáng)類型變量:c
                  弱類型變量:
                      bash把所有變量通通視為字符型灶平,做四則運(yùn)算時(shí)會(huì)自動(dòng)轉(zhuǎn)換為數(shù)值型;
                      bash中的變量無(wú)需事先聲明箍土,聲明和賦值過(guò)程同時(shí)實(shí)現(xiàn)逢享;聲明:類型、變量名吴藻;
          變量替換:把變量名出現(xiàn)的位置替換為其所指向的內(nèi)存空間中的數(shù)據(jù)瞒爬;【有點(diǎn)不太理解】
          變量引用:${var_name},$var_name,當(dāng)變量在一個(gè)字符串內(nèi)部沟堡,大括號(hào)不可省略侧但,例如"Hi ,${name}"
          變量名:數(shù)字、字母航罗、下劃線禀横,不能以數(shù)字開頭;見名知義粥血,命名機(jī)制遵循某種法則柏锄,且不能使用程序的保留字酿箭,例如if,else趾娃,then七问,while等

    bash的變量類型:
            本地變量:作用域僅為當(dāng)前shell【不包括子進(jìn)程】
               賦值:name = value
               引用:${name},$name
                          ""顯示變量名
                          ''顯示變量值
                查看變量:set命令
                變量撤銷:unset name【此處非變量引用,不使用$】 
            環(huán)境變量:作用域?yàn)楫?dāng)前shell進(jìn)程及子進(jìn)程【例如在shell中運(yùn)行bash實(shí)際上進(jìn)入了子進(jìn)程shell茫舶,運(yùn)行exit退出shell子進(jìn)程,對(duì)父進(jìn)程無(wú)效】刹淌,退出之后則失效
                變量賦值:
                    1饶氏、export name = value
                    2、name = value
                          export name
                    3有勾、declare -x name = value
                    4疹启、name = value
                          declare -x name
                  變量引用${name},$name
           注意:bash內(nèi)嵌了許多環(huán)境變量(通常為全大寫字符),用于定義bash的工作環(huán)境蔼卡,例如:PATH喊崖,HISTFILE,HISTFILESIZE,HISTCONTROL,SHELL,HOME,UID,PWD<OLDPWD
        查看環(huán)境變量的命令:export ,declare -x雇逞,printenv荤懂,env
      撤銷環(huán)境變量:unset name
      只讀變量:
              declare -r name  
              readonly name
              只讀變量無(wú)法重新賦值,且不支持撤銷塘砸,存活時(shí)間為當(dāng)前shell進(jìn)程的生命周期节仿,隨shell進(jìn)程終止而終止

            局部變量:作用域僅為某代碼片段(函數(shù)上下文)
        

            位置參數(shù)變量變量:當(dāng)執(zhí)行腳本的shell進(jìn)程傳遞的參數(shù);
            特殊變量:shell內(nèi)置的特殊功用的變量掉蔬;
                  例如:$?【其中一個(gè)特殊變量】上一個(gè)命令執(zhí)行狀態(tài)的結(jié)果0表示成功廊宪,10255表示失敗。


  多命令執(zhí)行:
         command1女轿,command2箭启,command3,...執(zhí)行順序?yàn)?-2-3-...
      邏輯運(yùn)算:
          運(yùn)算數(shù):真(true,yes,on,1)
                        假(false,no,off,0)
           與:&
           或:||
           非:蛉迹!
           #異或:XOR

          短路法則:
              COMMAND1 && COMMAND2 命令1失敗命令2不執(zhí)行傅寡,命令1成功命令2執(zhí)行;
             COMMAND1 ||COMMAND2 命令1失敗命令2執(zhí)行婿禽,命令1成功命令2不執(zhí)行赏僧;
                  示例:id $username || useradd $username(查看此用戶信息,如果不存在則進(jìn)行創(chuàng)建用戶)
shell腳本編程:
    編程語(yǔ)言的分類:根據(jù)運(yùn)行方式
       編譯運(yùn)行:源代碼 --> 編譯器(編譯)--> 程序文件扭倾;
          C語(yǔ)言
       解釋運(yùn)行:源代碼-->運(yùn)行時(shí)啟動(dòng)解釋器淀零,有解釋器邊解釋邊運(yùn)行;

    根據(jù)其編程過(guò)程中功能的實(shí)現(xiàn)是調(diào)用庫(kù)還是調(diào)用外部的程序文件:
        shell腳本編程:利用系統(tǒng)上的命令及編程組件進(jìn)行編程膛壹;
        完整編程:利用庫(kù)或編程組件進(jìn)行編程驾中。

    編程模型:過(guò)程式編程語(yǔ)言唉堪,面向?qū)ο蟮木幊陶Z(yǔ)言
        程序 = 指令 + 數(shù)據(jù)
            過(guò)程式:以指令為中心來(lái)組織代碼,數(shù)據(jù)是服務(wù)于代碼肩民;
                順序執(zhí)行唠亚、選擇執(zhí)行,循環(huán)執(zhí)行
            代表:C持痰,bash
            對(duì)象式:以數(shù)據(jù)為中心來(lái)組織代碼灶搜,圍繞數(shù)據(jù)來(lái)組織指令;
                類(class):實(shí)例化對(duì)象工窍; 
                  代表:java割卖,python,c++

    shell腳本編程特性:過(guò)程式編程患雏,解釋運(yùn)行鹏溯,依賴于外部程序文件運(yùn)行。
    格式/如何寫:
        腳本文件第一行頂格淹仑,給出shebang【解釋器路徑】用于指明解釋執(zhí)行當(dāng)前腳本的解釋器文件丙挽。
          常見的解釋器:
              #!/bin/bash
              #!/usr/bin/python
              #!/usr/bin/perl

      文本編輯器:
              行編輯器:sed
               全屏幕編輯器:nano,vi匀借,vim
      shell腳本是什么:
            命令的堆積颜阐;
            但很多命令不具有冥等性,所以需要程序邏輯來(lái)判斷運(yùn)行條件是否滿足吓肋,以避免其運(yùn)行中發(fā)生錯(cuò)誤

      運(yùn)行腳本:
        1瞬浓、賦予執(zhí)行權(quán)限,并直接運(yùn)行此程序
        chmod +x /path/to/file
        2蓬坡、直接運(yùn)行解釋器猿棉,將腳本以命令行參數(shù)傳遞給解釋器程序(無(wú)需增加執(zhí)行權(quán)限);
        bash /path/to/file
    注意:腳本中屑咳,除了shebang萨赁,余下所有以#開頭的行和空白行都會(huì)被視作注釋行而忽略,此即為注釋行兆龙;shell腳本的運(yùn)行是通過(guò)運(yùn)行一個(gè)子shell進(jìn)程實(shí)現(xiàn)的杖爽。
          引申:為什么有些sh文件無(wú)法直接運(yùn)行: 1、沒有添加x權(quán)限紫皇,或當(dāng)前用戶不具備權(quán)限慰安;2、需要添加地址聪铺,因?yàn)槟J(rèn)系統(tǒng)會(huì)去環(huán)境變量找此命令化焕,但是可能不存在與環(huán)境變量目錄下。
bash的配置文件
    兩類:
        profile類:為交互式登錄shell進(jìn)程提供配置
              全局:對(duì)所有用戶都生效铃剔;
                  /etc/profile
                  /etc/profile.d/*.sh
              用戶個(gè)人:僅對(duì)當(dāng)前用戶有效撒桨;
                  ~/.bash_profile
            功用:
                1查刻、用戶定義環(huán)境變量;
                2凤类、運(yùn)行命令或腳本
        bashrc類:為非交互式登錄的shell進(jìn)程提供配置
              全局:
                  /etc/bashrc
              用戶個(gè)人:
                ~/.bashrc
          功用:
              1穗泵、定義本地變量;
              2谜疤、定義命令別名佃延。
    僅管理員可以修改全局配置文件。
     登錄類型:
        交互式登錄shell進(jìn)程:
          直接通過(guò)某終端輸入賬號(hào)密碼登錄打開的shell進(jìn)程夷磕;
          使用su - username 或su -l username執(zhí)行的登錄賬號(hào)切換苇侵;

        非交互式登錄shell進(jìn)程:
            使用su usename執(zhí)行的登錄切換【這里沒有-】;
            圖形界面下打開的終端企锌;
            運(yùn)行腳本。

    交互式登錄shell進(jìn)程配置文件讀取次序:
        /etc/profile -- >/etc/profile.d/* -->~/.bash_profile --> ~/.bashrc --> /etc/bashrc

    非交互式登錄shell進(jìn)程配置文件讀取次序:
        ~/.bashrc  --> /etc/bashrc --> /etc/profile.d/*

    命令行中定義的特性于未,例如變量和別名作用域?yàn)楫?dāng)前shell進(jìn)程的生命周期撕攒;
    配置文件定義的特性,只對(duì)隨后新啟動(dòng)的shell進(jìn)程有效烘浦;

    如果想通過(guò)配置文件定義的特性立即生效:
        1抖坪、通過(guò)命令行重復(fù)定義一次;
        2闷叉、讓shell進(jìn)程重讀配置文件:
            source  /path/to/conf_file
          或 . /path/to/conf_file【這里的.即為source命令】

實(shí)踐驗(yàn)證擦俐,在profile文件中環(huán)境變量修改之后,source一下握侧,發(fā)現(xiàn)當(dāng)前session的環(huán)境變量還在蚯瞧,并且把新的這個(gè)環(huán)境變量增加上了。

  巧用:如果想讓每個(gè)登錄用戶登陸時(shí)都能夠看到一行提示信息品擎,可以在/etc/profile.d/目錄 下新建一個(gè)例如welcom.sh的文件埋合,寫下echo “你想讓每個(gè)登錄用戶看到的信息”
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萄传,隨后出現(xiàn)的幾起案子甚颂,更是在濱河造成了極大的恐慌,老刑警劉巖秀菱,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件振诬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡衍菱,警方通過(guò)查閱死者的電腦和手機(jī)赶么,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脊串,“玉大人禽绪,你說(shuō)我怎么就攤上這事蓖救。” “怎么了印屁?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵循捺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我雄人,道長(zhǎng)从橘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任础钠,我火速辦了婚禮阿弃,結(jié)果婚禮上蹲姐,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好怔蚌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纸淮,像睡著了一般允趟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上码倦,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天企孩,我揣著相機(jī)與錄音,去河邊找鬼袁稽。 笑死勿璃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的推汽。 我是一名探鬼主播补疑,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歹撒!你這毒婦竟也來(lái)了癣丧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栈妆,失蹤者是張志新(化名)和其女友劉穎胁编,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳞尔,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嬉橙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寥假。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片市框。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖糕韧,靈堂內(nèi)的尸體忽然破棺而出枫振,到底是詐尸還是另有隱情喻圃,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布粪滤,位于F島的核電站斧拍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏杖小。R本人自食惡果不足惜肆汹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望予权。 院中可真熱鬧昂勉,春花似錦、人聲如沸扫腺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笆环。三九已至攒至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咧织,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工籍救, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留习绢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓蝙昙,卻偏偏與公主長(zhǎng)得像闪萄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奇颠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354