黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

對話 UNIX: Squirrel--可移植的 shell 和腳本語言

瀏覽:303日期:2024-06-08 08:43:28

1799 年,一名法國陸軍工程師取得了一項重大發現。不,不是鵝肝醬、卡門培爾奶酪、巴氏消毒法或沙特(Sartre)— 實際上,他發現了能夠破譯埃及古代象形文字的鑰匙 —— 羅塞塔石碑(參見 圖 1)。

圖 1. 羅塞塔石碑,1100 磅重,其上使用三國語言篆刻了稅收策略。碑文展示的是減免僧侶稅款的詔書。

這塊石碑制作于公元前 196 年,篆刻了對同一段文字的三種不同語言版本 — 分別是象形文字、通俗體文字(埃及草書)和希臘文字。通過對照翻譯,或在不同語言版本之間尋找對應的詞匯,羅塞塔石碑解讀出已經失傳已久的象形文字的含義。

換句話說,將羅塞塔石碑想像成 Babelfish。即使在公元前 196 年,就出現了使用一種以上的語言進行表達。

公元 2000 年末,軟件開發人員面對著一個相似的問題。有太多的語言和方法可以用來表達同一內容。即使對于命令行,也有許多類似的內容可供選擇,包括各種 shell 和不同的命令組合。

通常來講,多樣性是件好事,但是它也會讓人覺得害怕。應該選擇哪種解決方案?這種技術是否能夠跟上需求的變化?時間和精力方面的投入能否得到回報?這些編寫良好的代碼(或 Perl 代碼)是否會過時?更糟糕的是,是否需要針對其他環境轉換(重寫)所有內容?

如果您不希望局限于 Fish shell、Bash shell、Z shell、Windows operating system 的 cmd.exe 或其他一些 shell 腳本語言的特性,那么請嘗試使用 Squirrel Shell。Squirrel Shell 提供了一種高級的、面向對象的腳本語言,在 Unix、Linux、Mac OS X 和 Windows 系統上都可以良好地運行。您只需要編寫一次腳本,就可以在任意平臺上運行。

更妙的是,您需要做的工作非常簡單。

獲得 Squirrel

根據 GNU Public License version 3 (GPLv3) 的條款,Squirrel Shell 很容易獲得并且可以免費使用。最新的版本為 2008 年 10 月 11 日發布的 1.2.2。Squirrel Shell 的創建者和維護者是 Constantin "Dinosaur" Makshin。

Squirrel Shell 的下載頁面(參見 參考資料)提供了針對 32 位和 64 位 Windows 的源代碼和二進制代碼。如果您使用 Unix 或 Linux,請檢查發行版附帶的庫,尋找合適的二進制文件或從頭構建 Squirrel Shell。

從頭構建 Squirrel Shell 非常簡單。下載并提取源代碼 tarball 文件,放到源代碼目錄,然后使用非常典型的構建 shell,如 清單 1 所示。

清單 1. 從頭構建 Squirrel Shell

 $ ./configure --with-pcre=system && make && sudo make install Checking CPU architecture...x86 Checking for install.../usr/bin/install ... Configuration has been completed successfully. Build for x86 CPU architecture Installation prefix: /usr/local Allow debugging: no Build static librarIEs Use system PCRE 6.7 library Install MIME information: auto Create symbolic link: no Compile C code with 'gcc' Compile C++ code with 'g++' Create static libraries with 'ar rc' Create executables and shared libraries with 'g++' Install files with 'install' 

要查找與包有關的選項列表以進行配置,需在命令行中輸入 ./configure --help。

為方便起見,Squirrel Shell 打包了 Perl Compatible Regular Expression (PCRE) 庫的源代碼,這些內容在程序中被大量使用。如果系統缺少 PCRE,打包后的代碼可以使構建變得簡單快捷。然而,如果系統已經有了 PCRE,那么可以通過指定 --with-pcre=system 選項來使用它。另一種方法是指定 --with-pcre=auto 以鏈接到更新的系統庫或 Squirrel Shell 的副本。

構建的結果是得到一個新的二進制文件,名為 squirrelsh。假設此文件被安裝到 PATH 變量的某個目錄中,比如 /usr/local/bin,那么輸入 squirrelsh 以啟動該 shell。在命令行提示符下,輸入命令 printl(getenv("HOME")); 以輸出主目錄的路徑:

$ squirrelsh > printl( getenv( "HOME" ) ); /home/strike > exit(); 

Squirrel Shell 基于 Squirrel 編程語言(參見 參考資料 獲得更多信息的鏈接)。該語言類似于 C++,并且提供了非常類似于 Python 和 Ruby 等面向對象腳本語言的特性。Squirrel Shell 納入了 Squirrel 中的所有特性和數據類型,并添加了一些專門為常見 shell 腳本任務編寫的新功能,比如復制文件和讀取環境變量。

盡管 Squirrel Shell 的語法對于日常的命令行使用過于繁雜 —echo $HOME 是和 Squirrel Shell 的 printl( "~") 具有等效功能的 Bash 命令 — 但是它擁有出色的腳本。您只需要編寫一次,就可以到處運行,而不需要針對 Unix 和 Windows 分別編寫。正如 Dinosaur 這樣評價他的工作,“Squirrel Shell 主要是充當一個腳本翻譯器。

使用 Squirrel 編寫腳本

讓我們看一看一個 Squirrel Shell 腳本的示例。清單 2 展示了文件 listing2.nut,此腳本將遞歸地列出您的主目錄的內容。

清單 2. listing2.nut

 #!/usr/bin/env squirrelsh  function reveal( filedir ) {  if ( !exist( filedir ) ) { return;  }   if ( filename( filedir ) == ".." || filename( filedir ) == "." ) { return;  }   if ( filetype( filedir ) == FILE ) { printl( filename( filedir, true ) ); return;  }  printl("Directory: " + filename( filedir, true) );  local names = readdir( filedir );  foreach( index, name in names ) { reveal( name );  } }  local previous = getcwd();  chdir( "~" );  reveal( getcwd() );  chdir( previous );  exit( 0 ); 

按照規定,每個 shell 腳本的第一行將向操作系統表明要啟動哪個程序來解釋腳本。通常,這一行會顯示 #! /usr/bin/bash 或 #! /bin/zsh 以從某個位置啟動特定 shell 或解釋器。

#!/usr/bin/env squirrelsh 有一些不同。它啟動了一個特殊的程序 env,此程序又啟動 PATH 變量中找到的第一個 squirrelsh 實例。因此,可以修改 PATH 變量以支持某個程序的本地版本 — 即您自己的、修改后的 squirrelsh 副本,位于 $HOME/bin/squirrelsh — 而不要修改 shell 腳本的內容。

注意:這個技巧適用于所有解釋器。例如,#!/usr/bin/env ruby 將按照 PATH 設置的指示,調用您喜歡的 Ruby 版本。總之,如果計劃發布所編寫的任何 shell 腳本,在第一行中使用 #!/usr/bin/env application 表單,因為它的 “移植性 更強:它將運行用戶 在他/她的 PATH 變量中已經配置好的應用程序版本。

清單 2 的其余部分應該比較熟悉,至少對于方法是這樣。函數 reveal() 是遞歸的:

如果為 reveal() 傳遞一個無效的路徑或 “小圓點(.,當前目錄)或 “兩個小圓點(..,父目錄),那么遞歸將結束。

否則,如果參數 filedir 是一個文件,代碼將輸出其名稱并返回,并再一次停止進一步的遞歸。函數 filename() 可以接受一到兩個參數。如果只有一個參數,或者第二個參數為 false,那么將忽略擴展文件名。如果提供 true 作為第二個參數,將返回完整的文件名。

如果參數是一個目錄,代碼將輸出其名稱,然后掃描內容(不需要執行深度優先處理,因為目錄內容并沒有按特定的順序排列。下一個示例將改進輸出)。

需要注意一點:由于對 reveal() 的調用是同一個函數中的最后一條語句,Squirrel 虛擬機(VM)— 運行腳本代碼的引擎 — 可以通過稱為尾遞歸(tail recursion)的技術將遞歸改為迭代。實際上,尾遞歸消除了對遞歸使用調用棧的需要;因此,可以實現任意深度的遞歸并且可以避免棧溢出。

Squirrel 的語法相當簡單,因此使用這種語言編寫代碼非常快捷,特別是如果您曾經使用過 C、C++ 或任何更高級的語言編寫過代碼的話,這一點則體現得更充分。

最妙的是,這個 shell 代碼是可移植的。將它轉移到 Windows 機器上,在其上安裝 Squirrel Shell,然后就可以運行您的代碼。

改進表

與典型 shell 相比,Squirrel 的優秀特性之一就是它豐富的數據結構。如果數據可以進行良好地組織,那么即使是復雜的問題通常也能夠快速得到解決。Squirrel 提供了真正的對象、異構數組和關聯數組(在 Squirrel 中稱為 表)。

一個 Squirrel 表由一些 slot 或 (鍵-值)對組成。除 Null 以外的任何值都可以充當一個鍵;任何值都可以被分配給一個 slot。您將使用 “箭頭 操作符創建一個新的 slot(<-)。

讓我們對 清單 2 的代碼稍加改進,在將目錄轉變為任何子目錄之前展示它的內容。使用什么方法?使用一個本地表在單獨的 slot 中存放文件和子目錄,然后相應地處理兩個類別。清單 3 展示了新的代碼。

清單 3. 增強后的清單 2 將首先輸出目錄的內容,然后遞歸到子目錄

 #!/usr/bin/env squirrelsh  function reveal( filedir ) {  local tally = {};  tally[FILE] <- [];  tally[DIR] <- [];  if ( !exist( filedir ) ) { return;  }   if ( filename( filedir ) == ".." || filename( filedir ) == "." ) { return;  }   local names = readdir( filedir );  foreach( index, name in names ) { tally[ filetype( name ) ].append( name ) ;  }   foreach( index, file in tally[FILE] ) { printl( file );  }   foreach( index, dir in tally[DIR] ) { printl( filename( dir ) + "/" );  }  foreach( index, dir in tally[DIR] ) { reveal( dir );  }  }  local entrIEs = readdir( (__argc >= 2) ? __argv[1] : "." );  exit( 0 ); 

在這里非常適合使用表這種數據結構。reveal() 中的表有兩個 slot:一個用于文件,另一個用于目錄。filetype( name ) 函數的返回值 — 常量 FILE 或常量 DIR — 將文件系統中的每一項整理到相應的 slot 中。

此外,每個 slot 是一個數組,由 tally[FILE] <- [] 和 tally[DIR] <- []; 這兩條語句創建。([] 是一個空數組)。由于 tally 是函數內的本地變量,它將在每次調用時重新創建并清空范圍,并且在每個調用被返回時自動銷毀。

數組函數 append( arg ) 將 arg 添加到數組的末尾,從而在此過程中形成了一個列表。在執行完 foreach( index, name in names ) 循環后,所有項都被添加到這兩個 slot 中其中一個的列表中。函數其余部分的代碼將輸出文件,接著輸出目錄,然后是遞歸。

當然,如果沒有命令行參數的話,shell 腳本的價值就沒有那么大了。特殊 Squirrel Shell 變量 __argc 和 __argv 分別以字符串數組形式包含命令行參數的計數和參數列表。根據約定,__argv[0] 始終都作為 shell 腳本的名稱;因此,如果 __argc 的值至少為 2,那么將提供額外的參數。為了簡單起見,這個腳本只處理第一個額外參數 argv[1]。

作為參考,清單 4 展示了一個 Ruby 腳本(作者為 Mr. Makshin),此腳本的功能與清單 3 相同。即使該腳本已像 Ruby 那樣簡潔,但它在簡潔性方面仍然遜色于 Squirrel Shell 代碼。

清單 4. 使用 Ruby 重新實現清單 3

 !/usr/bin/ruby  # List Directory contents.  path = ARGV[0] == nil ? "." : ARGV[0].dup  # Remove trailing slashes while path =~ //$/  path.chop! end  entrIEs = Dir.open(path) for entry in entries  unless entry == "." || entry == ".." filePath= "#{path}/#{entry}" fileStat = File.stat(filePath) if fileStat.directory?  puts "dir : #{filePath}" elsif fileStat.file?  puts "file: #{filePath}" end  end end  entries.close() 

有關 Squirrel 語言的更多信息,請參閱 Squirrel Programming Language Reference(參見 參考資料 獲得鏈接)。

巧妙的是,Squirrel Shell 中的幾乎所有函數都去掉了底層操作系統的細節,因此您的代碼可以盡可能保持通用。例如,filename() 函數(在前兩個清單中使用)將引導路徑(leading path)從文件路徑名中分離 — 比如,將 /home/example/some/Directory/file.txt 簡化為 file.txt — 而不管您使用的是何種平臺。類似地,readdir() 和 filetype() 允許您不必了解真實的、底層操作和文件系統的圈套和陷阱。通常,普通的 shell 并不能提供這種抽象(較為高級的腳本語言則可以)。

其他有用的、獨立于平臺的功能包括 convpath() 和 run(),前者可以將路徑名轉換成本地路徑名格式,而后者可以調用另一個可執行文件。convpath() 函數可以執行雙向轉換,因此對于編寫跨平臺腳本非常有用。

正則表達式

Shell 腳本通常用于自動化系統管理和維護工作。實現這種自動化主要依靠正則表達式,它是用來查找、匹配和分解字符串的一組真正的象形文字。如前所述,Squirrel Shell 需要 PCRE 庫,這種庫在 Perl、PHP、Ruby 和其他許多解釋器和程序中都可找到。PCRE 是用于數據處理的重要武器。

盡管非常完整,Squirrel Shell 的正則表達式實現有一些不同,可能會令您想起 PHP 實現。要在 Squirrel Shell 中使用正則表達式,需要先定義正則表達式,對其進行編譯,進行比較,然后再迭代結果(如果有的話)。

清單 5 展示的示例程序演示了 Squirrel Shell 中的正則表達式(代碼由 Mr. Makshin 編寫并且得到使用許可)。

清單 5. 演示 Squirrel Shell 中的正則表達式

 #!/usr/bin/env squirrelsh  // Match a regular expression against text  print("Text: "); local text = scan();  print("Pattern: "); local pattern = scan();  local re = regcompile(pattern); if (!re) {  printl("Failed to compile regular expression - " + regerror());  exit(1); }  local matches = regmatch(re, text); if (!matches) {  printl("Failed to match regular expression - " + regerror());  regfree(re);  exit(1); }  regfree(re); printl("Matches found:"); foreach (match in matches)  printl("t"" + substr(text, match[0], match[1]) + """); 

在這里,scan() 從標準輸出中讀取一些文本和一個模式,但是并不包含通常用于確定正則表達式的起始和結束部分的前斜杠(/)字符。

對于一個模式,函數 reqgcompile() 將編譯此模式,這將提高匹配的速度。您可以對 reqgcompile() 函數使用一個標記以啟用或禁用區分大小寫的功能(等同于 PCRE /i 修飾符),并且可以使用另一個選項針對一行或多行進行匹配(等同于 PCRE /m 選項)。如果沒有對正則表達式執行編譯,那么所有匹配將失敗。

regmatch(re, text) 函數將比較正則表達式和文本,如果沒有匹配的話就生成 Null 值,否則生成一個由成對整數組成的數組(雙元素數組)。每一對中的第一個整數表示匹配的開始;第二個整數表示匹配結束。這解釋了最后一行代碼中 substr(text, match[0], match[1]) 的使用。

執行完比較后,可以迭代結果。如果在任何時候不再需要編譯后的正則表達式,則使用 regfree() 刪除它。還有一個 regfreeall() 函數可以處理所有已編譯表達式所持有的所有資源。

Squirrel Shell 的限制

在理想情況下,相同的編程邏輯將應用到 Unix、Linux 和 Windows 中,并且效率至少和以前一樣高,這樣程序員會更加高興。可惜操作系統各不相同,您經常需要為了某個特定系統而求助于定制代碼。

在這些情況下,無論是 Squirrel Shell 還是您都無法脫離平臺,Squirrel Shell 提供了一個方便的函數來探測操作系統,這樣代碼就可以適當的執行。

清單 6 展示了如何使用 platform() 函數作出決策。該函數始終返回一個值,但是該值可能是 unknown。

清單 6. platform() 函數生成操作系統類型

 print( "Made by ... ");  local platform = platform();  switch ( platform ) {  case "linux": printl( "Linus." ); break;   case "Macintosh": printl( "Steve." ); break;   case "win32":  case "win64": printl( "Bill." ); break;   default: printl( "Unknown" ); } 

您可以通過 Squirrel Shell 環境變量 PLATFORM 查找當前平臺的類型:

> printl( PLATFORM ); linux 

環境變量 CPU_ARCH 生成處理器,shell 將針對該處理器進行編譯:

> printl( CPU_ARCH ); x86 

結束語

Squirrel Shell 的其他函數將管理文件、處理環境和執行策略。實際上,它的三角學內置函數就有 20 余種。Version 2.0 目前正在規劃之中,并且將包含更多類、對 Unicode 的支持、改進的交互模式,以及一個模塊化的插件架構。

Squirrel Shell 并不算得上一種交互式 shell,但是這沒關系。在這方面已經出現了很多選擇。作為一種腳本運行程序,Squirrel Shell 要比其同類出色許多。其數據結構要比傳統 shell 更加強大,它的語法簡單易懂,其底層虛擬引擎支持從枚舉類型到線程等所有內容。Squirrel 引擎也很小巧,不超過 6000 行代碼。您甚至可以將完整的 Squirrel 嵌入到另一個應用程序中。

當您需要為兩個平臺編寫代碼時,請嘗試使用 Squirrel Shell!它使您能夠輕松編寫自己的代碼。

標簽: Unix系統
主站蜘蛛池模板: 蘑菇福利视频一区播放 | 人人做人人爽 | 亚洲欧洲无码av不卡在线 | 韩日一级片 | 国产欧美wwwxj在线观看 | 毛片视频网站 | 一二三区在线视频 | 免费在线黄色网 | 国产欧美精品日韩区二区麻豆天美 | 成人免费无码大片a毛片抽搐 | 少妇裸体淫交视频免费看 | 疯狂欧美牲乱大交777 | 国产精品久久久久无码人妻 | 亚洲精品中文字幕久久久久下载 | 老妇高潮潮喷到猛进猛出 | 成人做爰69片免网站 | 亚洲精品一区久久久久久 | 国产精品13p| 一级片在线免费视频 | 少妇精品一区二区三区在线观看 | 免费一区区三区四区 | 韩国av一区二区三区 | 色综合久久久久久久 | 夜色福利院在线观看免费 | 夜夜高潮夜夜爽夜夜爱爱 | 亚洲 国产 另类 精品 专区 | 男人激烈吮乳吃奶爽文 | 秋霞亚洲 | 色婷婷亚洲 | 成人片黄网站色大片免费观看 | 秋霞影院一区二区三区 | 97免费公开视频 | 最近免费中文字幕大全免费版视频 | 337p亚洲精品色噜噜狠狠 | aa视频免费在线观看 | 亚洲欧美中文字幕 | 国产高清视频网站 | 欧美va亚洲va在线观看 | 国产精品亚洲色婷婷99久久精品 | 神马影院午夜伦理片 | 亚洲永久在线观看 | 日韩美女免费视频 | 国产午夜不卡av免费 | 久久久久97国产精 | 免费看黄片毛片 | 欧美日韩高清丝袜 | 麻豆乱码国产一区二区三区 | 国产精品一区二区人人爽79欧美 | 国色天香网www在线观看 | 国产又大又黄又猛 | 国产在线视频你懂的 | 成人免费毛片内射美女-百度 | 国内色视频 | 极品销魂美女一区二区 | 亚洲视频图片小说 | 一本大道无码日韩精品影视_ | 色吧久久 | 艳妇臀荡乳欲伦交换在线播放 | 中文字幕一区二区人妻电影 | 香港三级网站 | 中文字幕第4页 | 精品国产大片 | 国产精品丝袜www爽爽爽 | 亚洲精品污一区二区三区 | www亚洲一区二区 | 国产91av视频 | 思热99re视热频这里只精品 | 一二三在线视频 | 国产精品桃色 | 六月婷婷久香在线视频 | 青青青爽视频在线观看 | 伊人久久五月 | 免费美女视频网站 | 国产91视频在线观看 | 精品一区二区三区四区外站 | 国产激情视频在线播放 | 久久精品成人欧美大片 | 国产乱妇乱子 | 久操热久操 | 国产精品你懂的 | 欧洲精品在线观看 | 丁香色综合 | 国产网红主播三级精品视频 | 大又大粗又爽又黄少妇毛片 | 91欧美大片 | 性欧美videos高清精品 | 国产黄色精品网站 | 精品一区二区三区激情在线欧美 | 国产精品爽爽久久久久久 | 找国产毛片看 | 中文字幕在线播放一区 | 韩国r级hd中文字幕 韩国r级大尺度激情做爰外出 | 欧美国产日韩另类 | 凹凸日日摸日日碰夜夜爽孕妇 | 欧美性猛交xxxxx水多 | 欧美日韩成人一区 | 国产第一精品 | 男女晚上黄羞羞视频播放 | 毛片天堂| 超污网站在线看 | 国产探花在线精品一区二区 | 欧美黄色一区 | 光棍影院一区二区 | 久久国产精品精品国产色婷婷 | 国产精品国产三级国产专播i12 | 超碰精品在线 | 日本毛片高清免费视频 | 夜夜揉揉日日人人 | 日韩精品久久久久久久 | 国产成人精品亚洲777人妖 | 观看成人永久免费视频 | 香蕉免费在线视频 | 国产精品欧美一区二区三区奶水 | 天天综合色 | 亚洲欧美视频 | 日韩精品一区二区三区免费视频 | 91亚洲国产成人久久精品网站 | 久久99精品久久久久久 | 国产视频久久久久久久 | 国产精品性色 | 污网站在线播放 | 自拍偷拍欧美亚洲 | 夜夜爽av | 日韩av片无码一区二区不卡电影 | 噼里啪啦在线播放 | 国产av国片偷人妻麻豆 | 天天干夜夜 | 在线视频资源 | 国产精品爱久久久久久久电影蜜臀 | 大尺度无遮挡激烈床震网站 | 三级裸体视频 | 澳门永久免费av | 三级网址在线 | 羞羞国产一区二区三区四区 | 黄色日本视频 | 欧美人与动物xxxxz0oz | 亚洲日韩v无码中文字幕 | xxx国产精品 | 精品无人码麻豆乱码1区2区 | 中文字幕在线免费视频 | 黄色一级毛片 | 欧美日韩精品在线 | h在线免费| 日本中文有码 | 无限资源日本好片 | 波多野结衣调教 | www嫩草com| 手机av在线免费观看 | 97久久精品人人爽人人爽蜜臀 | 国产成人精品久久久 | 国产毛片毛片毛片 | 亚洲美女偷拍 | av永久免费 | 亚洲看片网 | 国产情侣自拍小视频 | 97天天操| 人人爽人人澡人人高潮 | 久久五月综合 | 欧美日韩国产精品 | 国产又大又黑又粗免费视频 | 国产动漫av | 嘿嘿射在线观看 | 日本国产一区二区 | 亚洲精品国产精品国自产网站按摩 | 中文字幕第8页 | 水蜜桃av无码 | 一本一道久久a久久精品综合蜜臀 | 伊人91| 少妇裸体长淫交视频免费观看 | 一个人在线观看免费视频www | 丰满少妇一区二区三区专区 | 亚洲精品久久久久中文第一幕 | 欧美永久视频 | 欧美xxxx黑人又粗又长密月 | 中文字幕_第2页_高清免费在线 | 国产精品毛片一区二区 | 国产又粗又硬又大爽黄老大爷视 | 亚洲性无码av中文字幕 | 日韩一区欧美二区 | 久久精品无码一区二区三区 | 蜜桃视频一区二区在线观看 | 日韩av网址大全 | 亚洲欧美www | 亚洲a∨国产av综合av网站 | 在线 日本 制服 中文 欧美 | 黑人精品xxx一区一二区 | 中文字幕av一区 | 中文字幕在线播出 | 白丝美女喷水 | 久久久国产精 | 欧美综合激情 | 中文字幕一区二区av | 亚洲www在线观看 | 国产乱码精品一区二区 | youporn免费视频成人软件 | 国产51人人成人人人人爽色哟哟 | 一本视频 | 污视频在线免费观看 | 精品人妻无码一区二区三区抖音 | 精品久久久久久久久久久下田 | 亚洲国产精品免费 | 精品中文字幕一区二区三区av | 乱子伦一区 | 优月まりな乳狂在线观看 | 性猛交富婆xxxx乱大 | 国产精品亚洲日韩欧美色窝窝色欲 | 青青热久免费精品视频在线播放 | 日本不卡一区在线观看 | 国产高清在线a视频大全 | a级片免费播放 | 全部免费的毛片在线看 | 免费成人黄色网址 | 精品一区二区三区波多野结衣 | 日本一区二区三区在线免费观看 | 成人丝袜激情一区二区 | 性做久久久久久久 | 伊伊亚洲综合人网777 | 日本三级排行榜 | 欧美少妇一级片 | 成人a在线 | 国产精品丝袜黑色高跟鞋v18 | 亚洲乱码av中文一二区软件 | 8x8ⅹ国产精品一区二区二区 | 性做久久久久久免费观看 | 中国肥老太婆高清video | 上床视频在线观看 | 日本在线一本 | 一级a性色生活片久久毛片明星 | 91综合在线 | 国产三级视频在线播放 | 999一个人免费看ww | 91精品视频一区二区三区 | 一本色道无码不卡在线观看 | 精品久久一二三区 | 精品国产一区二区三区忘忧草 | 色哟哟官网 | 色女人网 | 国产成人在线视频播放 | 人人看人人看 | 91嫩草国产线观看亚洲一区二区 | 九色porny视频 | 最全aⅴ番号库 | 凹凸精品一区二区三区 | 中国小鲜肉xvideoscom | 奇米久久久 | 欧美一区二区三区免费视频 | 国产成人久久婷婷精品流白浆 | 国产啪亚洲国产精品无码 | 欧美在线xxxx | 欧美三级乱人伦电影 | 一本大道伊人av久久乱码 | 插插操操 | 亚洲风情亚aⅴ在线发布 | 国产午夜精品一区理论片飘花 | 黄色成人免费视频 | 北条麻妃在线一区二区 | 久久综合资源 | 亚洲午夜精品17c | 日本内谢少妇xxxxx少交 | 黄色片的网站 | 亚洲欧美视频在线 | 久久噜噜噜 | 99久久亚洲精品 | 超碰伦理| 色欲天天婬色婬香综合网 | 成人免费一区二区三区 | 性饥渴艳妇性色生活片在线播放 | 99视频免费 | 一道本毛片 | 久久婷婷五月综合色99啪 | 免费一区二区三区 | 亚洲一区 国产精品 | 成人看黄色s一级大片 | 色综合中文 | 亚洲一区免费视频 | 国产免费无遮挡吸奶头视频 | 亚洲熟妇自偷自拍另类 | 国产精品一色哟哟 | 波多野结av衣东京热无码专区 | 欧美片一区二区三区 | 免费xxxxx在线观看网站软件 | 亚洲国产福利 | 欧美色性视频 | 国产亚洲精品日韩在线tv黄 | 91av视频在线观看 | 国产成人久久精品麻豆二区 | 一区视频在线播放 | 999zyz玖玖资源站在线观看 | 欧美野外做受又粗又硬 | av无遮挡| 初尝性事后的女的 | 乱人伦人妻中文字幕无码久久网 | 久久一精品 | www.se天堂| 波多野结衣一区二区三区在线观看 | 毛片看| 成人性生交视频免费观看 | 日本极品丰满ⅹxxxhd | 日韩一区二区在线观看视频 | 国产精品无码天天爽视频 | 国产高清视频在线观看 | 一区二区免费在线观看 | 夜夜夜操 | av免费片| a√天堂中文 | 欧亚av在线 | 99热免费观看 | 日本黄网站色大片免费观看 | 美一女一无一伦一性一交 | 成年人免费网 | 99ri视频 | 精品久久人人妻人人做精品 | 国产精品一区二区在线观看 | 超碰在线免费播放 | 肉体肉体xxx肉体d久久 | 噜噜高清欧美内射短视频 | 亚洲一区二区三区四区五区六区 | aaa大片十八岁禁止 aa爱做片免费 | 成人男同av在线观 | 又大又长粗又爽又黄少妇毛片 | 亚洲视频在线观看 | 狠狠网 | 91福利小视频 | www九九九| 国产九色91 | 欧美色图亚洲视频 | 亚洲aⅴ欧洲av国产综合图片 | 中文字幕乱码人妻无码久久 | 中文字幕在线播出 | 果冻传媒mv国产董小宛主演是谁 | 99久久欧美日韩国产二区 | 三级网站视频 | 久久综合伊人中文字幕 | 国产igao为爱做激情在线观看 | 噼里啪啦完整高清观看视频 | 亚洲大色堂人在线无码 | 亚洲天堂av中文字幕 | 伊人久久五月丁香综合中文亚洲 | 久久免费看少妇高潮v片特黄 | 曰批全过程免费视频在线观看无码 | 一级做a在线观看 | a天堂资源 | 亚洲自拍偷拍一区二区三区 | 欧美超级乱婬视频播放 | 色精品| 国产在线aaa片一区二区99 | 亚洲精品久久久中文字幕痴女 | 国产亚洲精品久久yy50 | 91精品久久久久久久久久 | 国内精品毛片 | 女体拷问一区二区三区 | 精品国产一区二区三区四区阿崩 | 亚洲 变态 欧美 另类 捆绑 | 国产最新在线 | 欧美特黄aaaaaa | 亚洲精品国产精品乱码在线观看 | 性色欲情网站 | 麻豆精品一区二区三区 | 一道本视频在线 | 一二三四在线视频观看社区 | 国产精品自在在线午夜出白浆 | 亚洲第一视频区 | 中文字幕人妻熟女人妻洋洋 | 国产超碰人人模人人爽人人喊 | 欧美精品videossex少妇 | 免费人成打屁股网站www | 日本极品在线 | 中文字幕日本人妻久久久免费 | av在线手机版 | 中文在线免费看视频 | 国产欧美又粗又猛又爽老小说 | 免费观看又色又爽又黄的韩国 | 45分钟免费真人视频 | 2019高清中文字幕在线免费看 | 国产成人精选视频在线观看 | 成人在线视频播放 | 果冻传媒mv免费播放在线观看 | 国产精品视频在 | youjizz韩国| 森泽佳奈作品在线观看 | 亚洲综合久久一区二区 | 色婷婷影院 | 亚洲精品久久久乳夜夜欧美 | 超碰导航 | 欧美精品日韩精品 | 国产一区二区三区四区视频 | 国产精品久久二区二区 | 国产精品久久久一区二区三区网站 | 国产精品久久久久久久久久久久久久 | 日本免费a级片 | 色91视频| 久久精品女人天堂av麻 | 日韩第一区 | 少妇无码吹潮 | 97人人模人人爽人人少妇 | 国产主播啪啪 | 无遮挡粉嫩小泬久久久久久久 | 天天摸天天看天天做天天爽 | 久久bb| 亚洲色图25p | 色婷婷久久久 | 午夜爱爱免费视频 | 成人午夜网址 | 午夜视频一区二区三区 | 欧美日韩国产在线观看 | 超碰777| 中文字幕亚洲日本 | 深夜国产福利 | 第一福利在线观看 | 日韩有码av | 日产麻无矿码直接进入 | 天天插日日干 | www超碰在线com | 国产伦精品一区二区三区视频黑人 | 日韩久久一级片 | 狠狠干亚洲色图 | 国产精品人八做人人女人a级刘 | 精品国精品国产自在久国产87 | 欧美国产日韩在线观看 | 日日摸日日踫夜夜爽无码 | www男人的天堂| 免费看特级毛片 | 国产精品国产三级国产专播 | 农村少妇野战xxx视频 | 五月天六月婷婷 | 朋友的姐姐2在线观看 | 狠狠做深爱婷婷久久综合一区 | 污视频在线观看免费 | 欧美日韩色图片 | 免费看男女做爰爽爽视频 | 免费大片黄在线观看视频网站 | 性猛交xxxx免费看网站 | 手机国产乱子伦精品视频 | 尤物视频在线免费观看 | 草草影院在线观看 | 日本天天黄网站 | 国产天堂av在线 | 亚洲国产精品成人女人久久 | 成人无码影片精品久久久 | 欧美 亚洲 另类 制服 自拍 | 2019国产精品| 啪啪资源 | 欧美a级网站 | 欧美大片一区二区三区 | 97成人在线| 精品久久九九 | 日韩va视频 | 黄色小网站在线观看 | 好吊妞视频这里有精品 | 日本极品在线 | 精品日韩视频 | 亚洲国产精品第一区二区 | 韩国av中文字幕 | 一区二区av | 男女三级视频 | 秋霞影院午夜老牛影院 | 欧美激情成人在线 | 人人爽在线 | 亚洲天堂福利 | 毛片tv网站无套内射tv网站 | 色嗨嗨av一区二区三区 | 日韩成人一级片 | 欧美 日韩 国产 亚洲 色 | 日本不卡在线播放 | 亚洲毛片网 | 精品国产一区三区 | 成人xxxxx| 福利资源导航 | 青青青爽视频在线观看 | 亚洲日韩av一区二区三区四区 | 护士人妻hd中文字幕 | 国产95在线 | 亚洲 | 精品成人一区二区三区四区 | 一二三四在线视频观看社区 | 粉嫩久久99精品久久久久久夜 | 欧美a级成人淫片免费看 | 日本69视频 | 又长又硬又粗一区二区三区 | 国产亚洲日韩av在线播放不卡 | av影音先锋最大资源网 | 免费aⅴ网站 | 日韩av一级片 | 亚洲成人在线免费观看 | 色视频网站在线 | 一本大道久久东京热无码av | 性色在线 | 精品国产乱码一区二 | 精品香蕉一区二区三区 | 三级自拍 | 免费一级淫片aaa片毛片a级 | 国产精品12| 国产精品久久久久久久久侵犯 | 亚洲自拍偷拍一区二区三区 | 日韩精品第一页 | 公妇乱淫免费观看 | 日韩在线一卡二卡 | 思思久久96热在精品国产 | 失禁大喷潮在线播放 | 国产ts在线观看 | frxxee欧美xxee麻豆 | 日韩高清不卡一区 | 92看片淫黄大片看国产片图片 | 欧美激情一区二区三区成人 | 男女av免费 | 最近国产中文字幕 | 春色影视 | av激情小说 | 亚洲精选一区二区三区 | 亚洲国产婷婷六月丁香 | www日本色 | 精品久久久av | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 精品人妻大屁股白浆无码 | 中文字幕亚洲一区二区三区 | 精品国产一区二区三区不卡 | 无码av免费精品一区二区三区 | 久久久久99精品成人片直播 | 久久免费少妇高潮久久精品99 | 综合久久久久 | 国产女同视频 | 无码中文av波多野吉衣迅雷下载 | 日韩aⅴ在线观看 | 国精产品一区二区三区黑人免费看 | 18视频在线观看男男 | 性欧美videos另类hd | 国产区图片区小说区亚洲区 | 在线黄视频 | 东北妇女xx做爰视频 | 国产在线黄色 | 肉欲性毛片交国产 | 午夜免费学生在线观看av | 日日碰狠狠添天天爽 | 中文字幕日韩一区二区三区 | 色吧婷婷 | 国产精品爽爽久久久久久 | 美国美女群体交乱 | 色哟哟在线 | 东京热无码av一区二区 | 在线中文字幕播放 | 动漫av纯肉无码av在线播放 | 国产精品一区二区在线免费观看 | 美女穴穴 | 国产精品久久久久久久妇 | 成人在线观看国产 | 九色porny丨首页在线 | 亚洲欧美日韩精品久久亚洲区 | 中文字字幕在线 | 久久亚洲一区二区三区明星换脸 | 扒开双腿被两个男人玩弄视频 | 国产亚洲欧美日韩在线一区二区三区 | 国产成人精品2021 | 欧美深性狂猛ⅹxxx深喉 | 日本少妇做爰xxxⅹ漫 | 一区二区三区无码视频免费福利 | 一二三四视频社区在线 | 久久精品小视频 | 日本爽爽 | 国产成人欧美一区二区三区一色天 | www.久久爱| 看曰本女人大战黑人视频 | 夜夜嗨av一区二区三区四季av | 久久久久久久久久网站 | 成年人国产| www四虎com| 国产成人精品一区 | 六月丁香婷婷激情 | 成人精品少妇免费啪啪18 | 亚洲性无码av在线 | 亚洲国产综合精品久久久久久 | 国产午夜啪啪 | 日日操夜夜爱 | 九色视频网址 | 最近中文字幕在线中文视频 | 男人的亚洲天堂 | 国产高清在线观看 | 91片黄在线观看 | 久久日本三级香港三级456 | 久久久久久久久久久久 | 国产性猛交xx乱视频 | 久久久久国产一区二区三区 | 婷婷开心激情 | 中文字幕av无码一区二区三区电影 | 无码人妻精品一区二区三 | 老司机在线免费视频 | jizz在线观看视频 | 亚洲精品第二页 | 人成亚洲 | 国产精品第七页 | 国产成人精品久久二区二区 | 成人福利免费视频 | 国产精品久久久久久av福利软件 | 柠檬福利视频导航 | 玖玖色资源 | 成年人的视频网站 | 欧美jjzz| 国产亚洲精品久久久久久 | 麻豆区1免费 | 亚洲黄色片视频 | 少妇熟女视频一区二区三区 | 成人观看网站 | 欧美日韩久久久久 | 无遮挡国产 | 国产性生大片免费观看性 | 日本19禁啪啪免费观看www | 亚洲精品视屏 | a∨在线观看 | 国产人妻久久精品二区三区老狼 | 精品国产黄色 | 女人被男人爽到呻吟的视频 | 国产亚洲人成网站在线观看 | 久久免费播放视频 | 91久久人人夜色一区二区 | 久久视频这里有久久精品视频11 | 午夜成人爽爽爽视频在线观看 | 精品国产乱码久久久久软件 |