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

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

對話 UNIX: 更多 shell 腳本技術

瀏覽:32日期:2024-06-13 17:53:04

盡管在近兩年使用過 Unix 的一些人可能嘗試過 shell 腳本編程,但是他們很可能只是研究操作系統的細節(jié),并不精通 shell 腳本編程。本文針對那些希望進一步了解 shell 腳本,并開始編寫更高級腳本的讀者。本文提供腳本編程的基礎知識,包括如何簡化腳本、如何盡可能保持腳本的靈活性、如何編寫干凈的腳本、在腳本內編寫注釋以及調試腳本。

保持簡單

在人們學習如何編寫 shell 腳本時,常常遇到的一個問題是,重復他們在另一個腳本中已經做過的工作。他們其實不需要復制原來的腳本并修改幾個硬編碼值,只需創(chuàng)建一個函數來處理兩個腳本的重復部分。創(chuàng)建集中的函數還可以促進標準化,幫助創(chuàng)建統一的腳本。如果一個函數在腳本的一個部分工作正常,那么它在腳本中的其他地方也會正常工作。

例如,清單 1 所示的腳本應該濃縮和簡化為更簡單、更干凈的程序。

清單 1. 可以簡化的腳本示例

#!/usr/bin/kshif [[ $# -lt 2 ]]then echo "Usage: ${0##*/} <file name #1> <file name #2> exit 0fiif [[ ! -f "${1}" ]]then echo "Unable to find file '${1}'" exit 1fiif [[ ! -r "${1}" ]]then echo "Unable to read file '${1}'" exit 2figzip ${1}ls -l ${1}.gzif [[ ! -f "${2}" ]]then echo "Unable to find file '${2}'" exit 1fiif [[ ! -r "${2}" ]]then echo "Unable to read file '${2}'" exit 2figzip ${2}ls -l ${2}.gz

這個腳本看起來很糟糕!(謝天謝地,它只是一個示例)。這個腳本應該盡可能進行濃縮。從便于閱讀的角度來看,清單 2 提供的版本更干凈。

清單 2. 對清單 1 腳本進行濃縮的版本

#!/usr/bin/kshexit_msg() { [[ $# -gt 1 ]] && echo "${0##*/} (${1}) - ${2}" exit ${1:-0}}[[ $# -lt 2 ]] && exit_msg 0 "Usage: ${0##*/} <file name #1> <file name #2>for _FNAME in $@do [[ ! -f "${_FNAME}" ]] && exit_msg 1 "Unable to find file '${_FNAME}'" [[ ! -r "${_FNAME}" ]] && exit_msg 2 "Unable to read file '${_FNAME}'" gzip ${_FNAME} ls -l ${_FNAME}.gzdone

注意到這兩者的差異了嗎?這個腳本增加了一個簡單的函數來顯示一個消息并帶適當的返回碼退出,還把所有操作轉移到一個 for 循環(huán)中,這使這個腳本看起來更干凈、更容易理解了。

保持靈活性

編程和 shell 腳本編程的新手常常犯的另一個錯誤是,在程序或 shell 腳本中對靜態(tài)值進行硬編碼。這會限制腳本的靈活性,是一種糟糕的編程習慣。這迫使管理員或開發(fā)人員不得不經常修改腳本以使用其他值;為了避免這個問題,應該使用變量并為腳本或函數提供參數。

例如,清單 3 是一個編寫得很差的不靈活的示例腳本。

清單 3. 不靈活的示例腳本

#!/bin/bashif [[ -f /home/cormany/FileA ]]then echo "Found file '/home/cormany/FileA'"elif [[ -f /home/cormany/DirA/FileA ]]then echo "Found file '/home/cormany/DirA/FileA'"else echo "Unable to find file FileA"fi

這個腳本可以正常工作,但是它只能在兩個位置搜索一個文件。

清單 4 提供相同的功能,但是允許用戶在任何位置搜索任何文件。

清單 4. 使腳本更靈活

#!/bin/bashexit_msg() { [[ $# -gt 1 ]] && echo "${0##*/} (${1}) - ${2}" exit ${1:-0}}[[ $# -lt 2 ]] && exit_msg 1 "Usage: ${0##*/} <file name> <location>"_FNAME="${1}"_DNAME="${2}"[[ ! -d "${_DNAME}" ]] && exit_msg 2 "Unable to read or find Directory '${_DNAME}'"if [[ -f "${_DNAME}/${_FNAME}" ]]then exit_msg 0 "Found file '${_DNAME}/${_FNAME}'"else exit_msg 3 "Unable to find file '${_DNAME}/${_FNAME}'"fi

這個腳本更靈活,因為它允許用戶指定要搜索的任何文件和任何搜索目錄。

提供選項

在編寫一個 shell 腳本時,一些用戶可能會說,“它真不錯! 或者 “我喜歡使用它;而同時,其他用戶可能不同意這個評價,他們可能不希望執(zhí)行相同的操作。人們喜歡有選擇,為什么不給他們提供選項呢?內置的 shell 命令 getopt 可以完成這個任務。

清單 5 提供一個在 AIX 中使用 getopt 的基本示例。

清單 5. getopt 示例

#!/usr/bin/ksh_ARGS=`getopt -o x --long xxxxx -n ${0##*/} -- "$@"`while [[ $# -gt 0 ]]do case "${1}" in-x|--xxxxx) echo "Arg x hit!"shift;;--) shift; break;; *) echo "Invalid Option: ${1}"break;; esacdone

在執(zhí)行包含 getopt(稱為 opttest)的腳本時,如果在 -x 或 --xxxxx 中使用有效的參數,getopt 會識別出開關并執(zhí)行 case 開關中的代碼:

# ./hm -xArg x hit!

下面是使用無效開關或選項時的結果:

# ./hm -aInvalid Option: -a

文檔,文檔,文檔

我們在職業(yè)生涯中早晚會受到這個問題的困擾。老板要求您看看一個 10 年前編寫的腳本,它的作者已經不再為公司工作了。您會說 “沒問題 嗎?通常情況下,可能沒問題;但是,如果這個腳本很復雜,執(zhí)行了您不習慣使用的命令,采用的編寫風格與您的風格不一樣,或者干脆就不能正常工作,您就遇到大麻煩了。在這種情況下,一些反映作者當初編寫這個腳本時的想法的提示會有很大的幫助。有時候,您開發(fā)了一個自認為只使用一次的腳本,但是以后卻發(fā)現還需要修改它。或者,您用幾星期時間編寫了一個巨大的腳本,您了解這個腳本的所有細節(jié),但是如果別人閱讀它,卻不知所云。這幾種情況說明,文檔之于開發(fā)人員就像腳本之于用戶,都非常重要。

看看清單 6 所示的函數。

清單 6. 沒有注釋的腳本示例

confirm_and_exit() { [[ ${_DEBUG_LEVEL} -ge 3 ]] && set -x while [[ -z ${_EXIT_ANS} ]] docup_echo "Are you sure you want to exit? [Y/N] c" ${_PROMPT_ERR_ROW} ${_PROMPT_ERR_COL}${_TPUT_CMD} cnormread ${_NO_EOL_FLAG:+${_READ_FLAG:-'-n'}} ${_NO_EOL_FLAG} _EXIT_ANS${_TPUT_CMD} civis done case ${_EXIT_ANS} in[Nn]) unset _EXIT_ANS; return 0;;[Yy]) exit_msg 0 1 "Exiting Script";;  *) invalid_selection ${_EXIT_ANS}; unset _EXIT_ANS;; esac return 0}

如果您有比較豐富的 shell 腳本編程經驗,可能能夠讀懂這個腳本。但是,腳本編程的初學者很難理解這個函數的作用。如果花上幾分鐘在這個腳本中添加注釋,情況就大不一樣了。清單 7 給出包含注釋的同一個函數。

清單 7. 包含注釋的腳本示例

########################################## function confirm_and_exit#########################################confirm_and_exit() { # if the debug level is set to 3 or higher, send every evaluated line to stdout [[ ${_DEBUG_LEVEL} -ge 3 ]] && set –x # Continue to prompt the user until they provide a valid answer while [[ -z ${_EXIT_ANS} ]] do# prompt user if they want to exit the script# cup_echo function calls tput cup <x> <y># syntax:# cup_echo <string to display> <row on stdout to display><column on stdout to display>cup_echo "Are you sure you want to exit? [Y/N] c" ${_PROMPT_ERR_ROW} ${_PROMPT_ERR_COL}# change cursor to normal via tput${_TPUT_CMD} cnorm# read value entered by user# if _NO_EOL_FLAG is supplIEd, use value of _READ_FLAG or “-n# if _NO_EOL_FLAG is supplied, use value as characters aloud on read# assign value entered by user to variable _EXIT_ANSread ${_NO_EOL_FLAG:+${_READ_FLAG:-'-n'}} ${_NO_EOL_FLAG} _EXIT_ANS# change cursor to invisible via tput${_TPUT_CMD} civis done # if user entered “n, return to previous block of code with return code 0 # if user entered “y, exit the script # if user entered anything else, execute function invalid_selection case ${_EXIT_ANS} in[Nn]) unset _EXIT_ANS; return 0;;[Yy]) exit_msg 0 1 "Exiting Script";;  *) invalid_selection ${_EXIT_ANS}; unset _EXIT_ANS;; esac # exit function with return code 0 return 0}

對于這么小的函數,這似乎太麻煩了,甚至有點過分,但是對于 shell 腳本編程新手和閱讀這個函數的人員而言,注釋是非常有價值的。

在 shell 腳本中,注釋的另一個極其有幫助的用途是,解釋變量的有效值以及解釋返回碼的含義。

清單 8 中的示例取自一個 shell 腳本的開頭。

清單 8. 未加注釋的變量示例

#!/usr/bin/bashtrap 'exit_msg 1 0 "Signal Caught. Exiting..."' HUP INT QUIT KILL ABRTtrap 'window_size_changed' WINCH_MSG_SLEEP_TIME=3_RETNUM_SIZE=6_DEBUG_LEVEL=0_TMPDIR="/tmp"_SP_LOG="${0##*/}.log"_SP_REQUESTS="${HOME}/sp_requests"_MENU_ITEMS=15LESS="-P LINE: %l"export _SP_REQUESTS _TMPDIR _SP_LOG _DB_BACKUP_DIRexport _DEBUG_LEVEL _NEW_RMSYNC _RMTOTS_OFFSET_COL

同樣,很難理解 trap 語句的作用以及每個變量可以是哪些值。除非把整個腳本都讀一遍,否則不可能看出這些變量的意義。另外,這里沒有提到這個腳本中使用的任何返回碼。這會大大增加解決 shell 腳本問題的難度。向 清單 8 的代碼行中添加一些注釋和一個專門描述返回碼的注釋塊,這樣就可以顯著降低理解難度。看看下面的清單 9。

清單 9. 帶注釋的變量示例

#!/usr/bin/bash########################################################################## traps########################################################################## trap when a user is attempting to leave the scripttrap 'exit_msg 1 0 "Signal Caught. Exiting..."' HUP INT QUIT KILL ABRTtrap 'window_size_changed' WINCH# trap when a user has resized the window################################################################################################################################################### defined/exported variables#########################################################################_MSG_SLEEP_TIME=3  # seconds to sleep for all messages # (if not defined, default will is 1 second)_CUSTNUM_SIZE=6  # length of a customer number in this location # (if not defined, default is 6)_DEBUG_LEVEL=0 # log debug messages. log level is accumulative # (i.e. 1 = 1, 2 = 1 & 2, 3 = 1, 2, & 3) # (if not defined, default is 0) # Log levels: # 0 = No messages # 1 = brIEf messages (start script, errors, etc) # 2 = environment setup (set / env) # 3 = set -x (A LOT of spam)_TMPDIR="/tmp" # Directory to put work/tmp files # (if not defined, default is /tmp)_SP_LOG="${0##*/}.log"  # log of script events_SP_REQUESTS="${HOME}/sp_requests"# file to customer record requests,  # also read at startup_MENU_ITEMS=15# default number of items to display per page  # (it not defined, default is 10)LESS="-P LINE: %l"# format 'less' prompt. MAN less if more info# export the variables defined aboveexport _MSG_SLEEP_TIME _CUSTNUM_SIZE _DEBUG_LEVEL _TMPDIR_SP_LOG _SP_REQUESTS _MENU_ITEMS#########################################################################

看起來好多了,不是嗎?所有東西都組織有序,并且有詳細的描述,初次閱讀這個腳本的人更容易理解它的作用。

調試

編寫完一個腳本之后,就要第一次運行它了。但是,如果在執(zhí)行腳本時顯示某些意外的錯誤,應該怎么辦呢?沒有人是完美的,而且從頭編寫腳本并保持沒有錯誤需要大量時間和豐富的經驗;大多數時候,開發(fā)人員很容易漏掉一個字母或者顛倒了兩個字母的順序,這幾乎是不可避免的。不必擔心:AIX、其他風格的 Unix 和 Linux 中的 shell 已經考慮到了這個問題,可以幫助您進行調試。

例如,清單 10 中的 shell 腳本(名為 make_errors)已經編寫好等待執(zhí)行。

清單 10. 包含錯誤的腳本示例

#!/bin/bash_X=1while [[ ${_X} -le 10 ]]do [[ ${_X} -lt 5 ]] && echo "X is less than 5! _Y=`expr ${_X) + 1` if [[ ${_Y} -eq 6 ]]echo "Y is now equal to ${_Y}" fi _X=${_Y}done

但是,初次執(zhí)行這個腳本時,顯示以下錯誤:

# ./make_errors./make_errors: line 11: unexpected EOF while looking for matching `"'./make_errors: line 16: syntax error: unexpected end of file

Vim 是一種出色的調試工具,您可能使用過它,但不一定了解它的真正價值。Vim 是一種強大的文本編輯器,但是它對調試也很有幫助。如果通過設置 .exrc 或 .vimrc 文件指定用不同的顏色顯示某些錯誤,Vim 就會替您完成大部分調試工作,見圖 1。

圖 1. 用 Vim 進行調試

第一個錯誤消息(line 11: unexpected EOF while looking for matching `"')指出在第 11 行上有錯誤,但是看過這一行之后,并沒有發(fā)現任何錯誤。再看看第 9 行。echo 后面的字符串的末尾缺少一個雙引號(")。這個示例很好地說明了在進行調試時為什么必須查看整個腳本。錯誤消息中顯示的行號不一定是出現錯誤的實際位置。報告第 11 行有錯誤是因為第 9 行用雙引號標出一個字符串的開頭,但是這個字符串直到第 11 行還沒有結束。要想糾正這個錯誤,應該在第 9 行末尾添加雙引號。

其他一些問題也會顯示為錯誤。在第 11 行上,變量值 _X 后面是一個用紅色突出顯示的后圓括號())。這是 Vim 替您做出的判斷,它指出這里有錯誤。這里用一個前花括號({)標出了變量值 _X 的開頭,但是沒有用后花括號(})結束。只需把 ) 改為 },就能夠糾正這個錯誤。

到目前為止,已經糾正了兩個錯誤。再次運行這個腳本,看看會發(fā)生什么:

./make_errors: line 12: syntax error near unexpected token `fi'./make_errors: line 12: ` fi'

還有另一個錯誤。錯誤消息指出問題出現在第 12 行上,但是這一行只有一個用來結束 if 語句的 fi。這有什么錯呢?請牢記前一個錯誤的情況。并非所有錯誤都源自 shell 所報告的行上。shell 僅僅報告發(fā)生錯誤的位置,但是錯誤的根源可能出現在這個位置之前。對于這個小腳本,可以很有把握地猜測錯誤可能出現在實際的 if 語句中。回憶一下基本的腳本編程邏輯:if 語句由 if、then 和 fi 組成。看看這個條件語句,可以看出缺少了 then。只需在腳本中添加 then。完成之后,這個腳本應該類似于清單 11。

清單 11. 糾正清單 10 中的錯誤之后的腳本

#!/bin/bash_X=1while [[ ${_X} -le 10 ]]do [[ ${_X} -lt 5 ]] && echo "X is less than 5!" _Y=`expr ${_X} + 1` if [[ ${_Y} -eq 6 ]] thenecho "Y is now equal to ${_Y}" fi _X=${_Y}done

再次運行這個腳本:

# ./make_errorsX is less than 5!X is less than 5!X is less than 5!X is less than 5!Y is now equal to 6

恭喜!這個腳本現在正常工作了!

set -x 選項

有時候,對 shell 腳本執(zhí)行基本的錯誤排除步驟并不像前一個示例那么容易。如果所有努力都失敗了,并且想不出腳本的錯誤之處在哪里,那么最后一招就是動用 “殺手锏!Ksh、Bash 和其他現代 shell 都支持在 set 命令中使用 -x 開關。如果使用 set –x 選項,執(zhí)行的每個命令都顯示在 stdout 中。為了突出顯示執(zhí)行的代碼,set –x 把 PS4 變量的值加在顯示的每行代碼前面。請記住,這種做法會產生大量文本,所以在查看輸出時要有耐心。

減小前一個示例中的循環(huán)計數值,在腳本的開頭添加 set -x 和一個注釋,見清單 12。

清單 12. set -x 示例

#!/bin/bashset -x# loop through and display some test statements_X=1while [[ ${_X} -le 4 ]]do [[ ${_X} -lt 2 ]] && echo "X is less than 2! _Y=`expr ${_X} + 1` if [[ ${_Y} -eq 3 ]] thenecho "Y is now equal to ${_Y}" fi _X=${_Y}done

在執(zhí)行這個腳本之前,把 PS4 變量改為某個看起來醒目的字符串:

# export PS4="DEBUG => "

接下來,執(zhí)行這個腳本,就會看到可能非常有價值的信息,見清單 13。

清單 13. set -x 的輸出

# ./make_errorsDEBUG => _X=1DEBUG => [[ 1 -le 4 ]]DEBUG => [[ 1 -lt 2 ]]DEBUG => echo 'X is less than 2!'X is less than 2!DDEBUG => expr 1 + 1DEBUG => _Y=2DEBUG => [[ 2 -eq 3 ]]DEBUG => _X=2DEBUG => [[ 2 -le 4 ]]DEBUG => [[ 2 -lt 2 ]]DDEBUG => expr 2 + 1DEBUG => _Y=3DEBUG => [[ 3 -eq 3 ]]DEBUG => echo 'Y is now equal to 3'Y is now equal to 3DEBUG => _X=3DEBUG => [[ 3 -le 4 ]]DEBUG => [[ 3 -lt 2 ]]DDEBUG => expr 3 + 1DEBUG => _Y=4DEBUG => [[ 4 -eq 3 ]]DEBUG => _X=4DEBUG => [[ 4 -le 4 ]]DEBUG => [[ 4 -lt 2 ]]DDEBUG => expr 4 + 1DEBUG => _Y=5DEBUG => [[ 5 -eq 3 ]]DEBUG => _X=5DEBUG => [[ 5 -le 4 ]]

可以看到這里有大量信息:處理并執(zhí)行的每個命令都顯示出來了。還要注意,在調試信息中沒有顯示 shell 腳本中的注釋。這是因為 shell 在讀取注釋之后并不執(zhí)行它。還好,在完成前面的修改之后,這個腳本沒有錯誤了!

在使用 set -x 時還要記住一點:如果腳本有內部函數,而且 set -x 放在代碼的主體部分,那么它的輸出會包含子函數的運算過程。但是,如果 set -x 只放在內部函數中,那么 debug 選項的影響范圍只包含這個內部函數中的代碼和在其中調用的子函數;shell 腳本的主體并不包含在內,這是因為它不知道它的內部函數會調用這個例程。

結束語

無論是使用 shell 腳本、C、Java™ 語言或其他語言,我們都在不斷地改進編程方法。堅持簡單化的基本規(guī)則,保持代碼簡潔靈活,給代碼加上適當的注釋,再借助調試工具的幫助,您很快就能編寫出出色的 shell 腳本。祝您好運!

標簽: Unix系統
主站蜘蛛池模板: 成人性生交大片免费7 | 视色网| 欧美一区二区高清 | 日本成人黄色 | 川上奈美侵犯中文字幕在线 | 成年人午夜免费视频 | 黄色美女毛片 | 黄色av免费在线看 | 丰满人妻熟妇乱又伦精品 | 少妇呻吟内裤揉搓水 | 手机看黄色 | 人妻激情另类乱人伦人妻 | 全肉乱妇杂乱视频在线观看 | 一进一出gif抽搐日本免费视频 | 变态美女紧缚一区二区三区 | 综合激情五月婷婷 | 少妇又紧又爽视频 | 人禽l交视频在线播放 视频 | 久久精品视频2 | 久草在线这里只有精品 | 国产亚洲精品久久久久久无几年桃 | 九九99精品| 亚洲午夜精品久久久久久浪潮 | 精品啪啪 | 蜜臀av免费一区二区三区 | 婷婷久久国产对白刺激五月99 | 天天搞夜夜 | 亚洲成在人线av | mm1313亚洲国产精品无码试看 | 欧美成人久久 | 国产一区二区欧美日韩 | 亚洲一区二区三区日韩 | 国产成人免费9x9x | 国产不卡视频一区二区三区 | 天天av综合网 | 日韩字幕在线观看 | 少妇精品蜜桃偷拍高潮系列 | 国产精品美女久久久久av爽李琼 | 嫩草一线产区和二线产区 | 97久久精品无码一区二区天美 | 91精品一久久香蕉国产线看观看新通道出现 | 亚洲欧洲日产国产 最新 | 亚洲精品久久久久久久久久久久久久 | 欧美极品在线 | 青草青在线视频在线观看 | 亚洲第一在线综合网站 | 在线播放黄色网址 | 亚洲天堂社区 | 国产亚洲网| 久久久久99精品成人片三人毛片 | 日韩av在线播 | 四虎国产精品永久在线国在线 | 日躁夜躁狠狠躁2001 | 999久久久国产999久久久 | 亚洲专区区免费 | 无码人妻精品一区二区三区免费 | 樱花草在线播放免费中文 | 午夜私人影院网站 | 亚洲中文字幕无码久久精品1 | 99精品一级欧美片免费播放 | 国产乱妇乱子视频在播放 | a级片免费播放 | 欧美性xxxx顶级按摩 | 成人激情综合网 | av大帝在线| 日韩伦理一区二区三区 | 狠狠干天天爱 | 高清一级片 | 国产夫妻性生活 | 亚洲精品高潮呻吟久久av | 亚洲免费视频网 | 免费少妇荡乳情欲视频 | 国产成人无码a区在线观看视频 | 久草手机在线播放 | 男人的天堂av女优 | 怡红院怡春院a∨免费十部 怡红院最新网址 | 青草av.久久免费一区 | 亚洲综合一二三 | 二区在线观看 | 日韩精品一区二区三区中文在线 | 久久男人 | 免费看的av网站 | 国产极品粉嫩在线观看的软件 | 三级特黄视频 | 69视频免费观看 | 亚洲午夜精品17c | 日日碰狠狠添天天爽超碰97久久 | 在线看片wwwzzz | 国产成人精品手机在线观看 | 国产伦精品一区二区三区在线观看 | 九九视频在线观看 | 亚洲国产精品影院 | 日本老熟妇乱 | 亚洲视频一区二区三区 | 福利一区三区 | 亚洲天堂国产 | 青青久操| 精品少妇一区二区三区日产乱码 | 成年免费视频黄网站在线观看 | 欧美成人三级在线视频 | 黄色综合网| 亚洲 欧美 激情 小说 另类 | 一区二区视频网站 | 国产曰肥老太婆无遮挡 | 久久久av亚洲男天堂 | 人人爽人人爽人人爽 | 狠狠久 | 24小时日本韩国在线观看 | gav成人网免费免播放器播放 | 无码乱肉视频免费大全合集 | 欧美综合专区 | 老司机午夜福利视频 | 国内精品久久久久久久久久久 | 国产粉嫩av | 女人久久久久 | 4438激情网| 国产精品国产精品国产专区不卡 | 中文字幕在线视频免费视频 | 九色视频自拍 | 欧美成年私人网站 | 老妇肥熟凸凹丰满刺激 | 国产一区导航 | 香蕉久久人人爽人人爽人人片av | 国产欧美一区二区久久性色99 | 尤物av无码色av无码 | 国产女人40精品一区毛片视频 | 国产美女作爱全过程免费视频 | 久久网站免费看 | 国产中文字幕久久 | 中文字幕无码热在线视频 | 国产精品免费视频一区二区三区 | 性色av蜜臀av浪潮av老女人 | 国产精品久久二区二区 | 三级视频在线播放 | 人人插插 | 久久久久北条麻妃免费看 | 亚洲不卡av不卡一区二区 | 久久久久久久久久久久网站 | 天天超碰 | 一国产一级淫片a免费播放口 | 国产丝袜调教 | 欧美国产日韩在线 | 粉嫩在线一区二区三区视频 | av女人的天堂 | 麻豆回家视频区一区二 | 国产av国片精品 | 一级大片视频 | 毛片网| 精品国产九九 | 亚洲免费成人 | 国产午夜福利在线观看视频 | 无遮挡色视频免费观看 | 亚洲综合一区无码精品 | 国精产品一区一区三区mba下载 | 深夜在线免费观看 | 久草精品在线观看 | 免费黄色片网站 | 国产尤物| 全球av集中精品导航福利 | 国产视频一区二区三区在线观看 | 18pao国产精品一区 | 日韩午夜一区二区三区 | 色偷偷噜噜噜亚洲男人 | 97久久国产 | 久久久久成人免费看a含羞草久色 | 一区二区不卡在线 | 免费在线看a | aaa级吃奶摸下免费视频 | 邻居少妇张开腿让我爽了在线观看 | 亚洲宗人网 | 人体写真福利视频 | 天海翼一区二区三区四区在线观看 | 天天干天天干天天干天天 | 亚洲图区欧美 | 欧美日韩在线视频一区二区三区 | 天天摸夜夜添狠狠添婷婷 | 久久福利在线 | 一级黄色大片视频 | 娇小发育未年成性色xxx8 | 欧美寡妇性猛交ⅹxxx | 日本一级少妇免费视频乌克兰裸体 | 91精品视频免费观看 | 99在线观看 | 橘梨纱av一区二区三区在线观看 | 久久国产精品萌白酱免费 | 全国男人的天堂网 | 小明看欧美日韩免费视频 | 狠狠躁18三区二区一区 | 中文日韩欧美 | 亚洲乱妇熟女爽到高潮的片 | 久久影视传媒 | 免费的理伦片在线播放 | 特大黑人巨交吊性xxxxhd | 国产超碰人人模人人爽人人添 | 精品国产乱码久久久久久蜜臀网站 | 蜜臀av午夜一区二区三区 | 欧美日韩国产成人精品 | 一区二区精品在线观看 | 亚洲哺乳偷拍哺乳偷拍 | 91在线最新 | 91性高潮久久久久久久 | 欧美日韩一区二区三区四区 | 护士脱了内裤让我爽了一夜视频 | 老牛嫩草一区二区三区眼镜 | 天天草天天操 | www在线观看国产 | 我们高清中文字幕mv的更新时间 | 国产精品性做久久久久久 | 九九九九九九精品任你躁 | 香港三级日本三级妇三级 | 亚洲成人在线网站 | 久久精品亚洲精品国产欧美kt∨ | 久久亚洲精品国产精品紫薇 | 亚洲精品国偷拍自产在线观看 | 狼人色综合 | 大杳蕉狼人伊人 | 国产无套粉嫩白浆内谢软件 | 久久久国产精品视频 | 成人91免费视频 | 黄瓜污视频 | 久久久精品人妻一区二区三区蜜桃 | 黄网址在线观看 | 国产亚洲日本精品无码 | 91xxx高清在线| 四色最新网址 | 少妇一级淫片aaaaaaa | 不卡视频一区二区三区 | 美女黄色免费网站 | 狠狠操狠狠爱 | 欧美日韩在线精品一区二区 | 国产精品视频色拍拍 | 麻豆视频免费在线 | 在线免费观看成人 | 国产情趣视频 | 不卡的av在线| 国产一区免费视频 | 亚洲国产精品一区二区三区 | 精精国产xxxx视频在线播放 | 日本又白又嫩水又多毛片 | 高h放荡受浪受bl | 玖色视频| 欧美人与禽猛交乱配视频 | 婷婷开心深爱五月天播播 | 亚洲国产一区二区a毛片 | 男女高潮又爽又黄又无遮挡 | 四虎精品永久在线 | 欧美精品一区二区三区一线天视频 | 天天插天天操 | 成人区精品一区二区 | 成人精品一区二区三区在线观看 | 成人做爰69片免费看 | 无码人妻少妇伦在线电影 | 嫩草精品福利视频在线观看 | 国产人人精品 | 成人午夜片av在线看 | 一本色道久久综合亚洲二区三区 | 中文字幕亚洲欧美日韩2019 | 91久久精品人人做人人爽综合 | 久久99精品久久久久久水蜜桃 | 亚洲第九十九页 | 国产综合无码一区二区色蜜蜜 | 91九色偷拍| 国产特黄aaaaa毛片 | 午夜激情黄色 | 香港三级日本三级妇三级 | 男女又爽又黄激情免费视频大 | 国产亚洲欧美精品久久久久久 | 亚洲自拍偷拍综合 | 91嫩草私人成人亚洲影院 | 不卡av在线 | 透视性魅力 | 天天拍天天爽 | 午夜寂寞少妇aaa片毛片 | 日韩免费三级 | 丁香激情六月 | 欧美老人巨大xxxx做受 | 亚洲图片一区 | 久久午夜无码免费 | 国产黄色a级 | 国产αv视频 | 中文字幕无码色综合网 | 欧美日韩一区在线播放 | 欧美激情一区二区三区视频 | 久久综合五月丁香久久激情 | 国产免费一区二区三区四区五区 | 亚洲干 | 久久精品国产精品国产精品污 | 黑人与日本少妇 | 男人的天堂av片 | 18国产一二三精品国产 | 欧美一级性生活视频 | 精品福利在线观看 | 丝袜美腿亚洲一区二区 | 日本高清有码视频 | 精品国产一区二区三区久久狼黑人 | 日日碰狠狠躁久久躁婷婷 | 性爱视频日本 | 国产91一区二区三区 | 欧美日本一区二区 | 97性视频| 精品精品国产高清a毛片 | 一本色道久久综合精品竹菊 | 亚洲狠狠婷婷久久久四季av | av网址在线免费观看 | 亚洲欧美激情小说另类 | 精品一区二区三区免费播放 | 97国产精品一区二区 | 亚洲午夜精品久久 | 国产成人免费 | 久久av免费 | 在线免费看黄色 | 欧美久久久久久久久久久久久久 | 亚洲精品久久久一区二区图片 | 俄罗斯毛片基地 | 欧美在线色 | 国产偷窥女洗浴在线观看 | 丝袜一区二区三区 | 噜噜啪啪| 精品久久久久久久久亚洲 | 狠狠躁日日躁夜夜躁2020 | 91精品亚洲影视在线观看 | 吃奶摸下激烈视频学生软件 | 色人阁五月天 | 亚洲三级毛片 | а√天堂资源8在线官网 | 国产成人精品一区二区三区免费 | 中日韩中文字幕区 | 亚州视频在线 | 娜娜麻豆国产电影 | 极品美女一区二区三区 | 99精品国产99久久久久久97 | 女同另类之国产女同 | 七七婷婷婷婷精品国产 | 日韩专区在线 | 久久久久欧美精品 | 91大神久久 | 亚洲午夜视频在线 | 欧美aa一级| 国产精品嫩草影视久久久 | 西西人体www大胆高清 | 成年女人免费v片 | 国产精品高清一区二区 | 毛片无遮挡高清免费 | 成年人免费黄色 | 一本一道久久a久久精品 | 白嫩少妇激情无码 | 中文字幕精 | 国产三级农村妇女做受 | 久久久久久人妻一区精品 | 国产成人无码av | 免费又黄又爽又猛的毛片 | 福利在线免费 | 国内自拍一二三四2021 | 国内av网站| 老妇肥熟凸凹丰满刺激 | 女人高潮内射99精品 | 天堂网中文在线 | 精品福利在线视频 | 欧美三级少妇高潮 | 久久国产精品成人片免费 | 天堂成人在线 | 国产丰满大乳奶水在线视频 | 伊人春色视频 | 国产日产欧产美一二三区 | 国产一区二区三区乱码在线观看 | 中文字幕一区二区三区中文字幕 | 九九视频免费看 | 午夜精品欧美 | 国产精品桃色 | 国精品人妻无码一区免费视频电影 | 女同一区二区三区 | 亚洲精品国产精品乱码不卡 | 久久精品国产免费 | www.中文字幕在线观看 | 亚洲热久久 | 天天躁夜夜躁天干天干200 | 亚洲精品视频免费观看 | 尤物国产精品 | 二区三区偷拍浴室洗澡视频 | 香蕉大人久久国产成人av | 羞羞午夜福利免费视频 | 欧美极品少妇无套实战 | 欧美猛男性猛交视频 | 精品无码一区二区三区在线 | 91久久视频 | 伦人伦xxx国产对白 亚洲国产精品一区二区成人片国内 | 偷拍各种高潮xxx | 欧美丰满熟妇xxxx | 香蕉久久久久久 | 特一级黄色| 狠狠色丁香婷婷久久综合 | 曰韩内射六十七十老熟女影视 | 日本a级大片 | 天天色亚洲 | 日本三级全黄少妇三2020 | www.青青草| 国内少妇毛片视频 | 色淫网站免费视频 | 久久久亚洲综合 | 亚洲精品久久久久久动漫器材一区 | 亚洲欧美中文日韩在线v日本 | 国产精品丝袜美腿一区二区三区 | 久久999视频| 国产一级免费视频 | 国产成人精品日本亚洲专区61 | 国产精品久久伊人 | 国产成人天天爽高清视频 | 国产精品一品二区三区的使用体验 | 亚洲乱码av| 无遮无挡爽爽免费毛片 | 神马午夜我不卡 | 欧美一级久久 | 午夜美女久久久久爽久久 | 男人搞女人网站 | 少妇人妻偷人精品无码视频新浪 | 国模张文静啪啪私拍150p | 欧美日韩激情 | 一本一道久久综合久久 | 久久人人添人人爽添人人88v | 国产欧美一区二区三区在线 | 中文一区二区在线观看 | 日本网站在线看 | 日本成熟老妇乱 | 日韩一区二区免费播放 | 91色国产| 综合色久 | 亚洲aⅴ天堂av天堂无码麻豆 | 亚洲激情婷婷 | 欧美精品一区二区三区在线 | 一日本道a高清免费播放 | 999国内精品视频免费 | 邻居少妇2中文字幕hd | 久久99精品国产麻豆宅宅 | 一区二区激情日韩五月天 | 91亚洲成人 | 男女啪啪做爰高潮免费看 | 毛片永久新网址首页 | 国产实拍会所女技师在线观看 | 中文字幕在线日亚洲9 | 无码人妻丰满熟妇区毛片 | 免费毛片在线播放 | 中国国语毛片免费观看视频 | 97影院手机版 | 国产一卡二卡在线播放 | 西西午夜无码大胆啪啪国模 | 成人在线视频免费播放 | 日日操夜夜爱 | 午夜色网 | 99久久久无码国产精品不卡 | 色情无码一区二区三区 | 欧美日本韩国一区二区三区 | 日本少妇撒尿com | 91视频进入 | 中国真实的国产乱xxxx | 台湾乡村少妇伦理 | 一级大片免费观看 | 久久久精品视 | 青草青草久热精品视频在线观看 | 国产极品美女高潮无套小趴菜 | 国产精品不卡视频 | 伊人成人免费视频 | 精品久久久免费视频 | 88国产精品视频一区二区三区 | 在线观看毛片视频 | 草青青视频 | 精品无码国产自产拍在线观看 | 91亚洲影院 | 婷婷狠狠干 | 国产伦精品一区二区三区免费视频 | 亚洲福利视频一区 | 精品少妇一区二区视频在线观看 | av免费观看在线 | 欧洲熟妇精品视频 | 中文字幕亚洲综合久久 | 91精品国产日韩91久久久久久360 | 日本视频网址 | 日日操日日干 | 人与动物黄色大片 | 一区二区乱子伦在线播放 | 亚洲精品一区二三区不卡 | 亚洲xxxx视频 | 国产在线麻豆精品入口 | √天堂资源地址在线官网 | 欧美激情区 | 波多野结衣喷潮 | 久久久久免费精品国产 | 越南处破女av免费 | av不卡在线播放 | 欧美爱爱小视频 | 香蕉av一区二区 | 免费小视频在线观看 | 女邻居的大乳中文字幕 | 国产精品美女乱子伦高 | 四虎4hu永久免费深夜福利 | 午夜福利1000集在线观看 | 欧美日韩国产精品 | 国产资源在线视频 | 伊人蕉久中文字幕无码专区 | av片在线观看免费 | 亚洲男女视频 | 黑人粗硬进入过程视频 | 清纯粉嫩极品夜夜嗨av | 精品少妇久久久久久888优播 | 插少妇视频| 97在线观看免费观看 | 香蕉久久夜色精品国产更新时间 | 日本男女激情视频 | 精品国产97 | av免费播放 | 国产超碰在线 | 亚洲国产aⅴ成人精品无吗 欧洲熟妇色xxxx欧美老妇多毛网站 | 久久重口味 | 少妇高潮喷水久久久久久久久久 | 四虎5151久久欧美毛片 | 久久96视频| 国产免费看av | 人妻熟女一区二区aⅴ向井蓝 | 日韩一区二区三区视频 | 精品理论片 | 国产天堂亚洲国产碰碰 | 免费国精产品自偷自偷免费看 | 曰韩精品一区二区 | 国产日产欧产美 | 麻豆入口 | 亚洲成人中文 | 精品免费观看 | 香蕉久久一区二区不卡无毒影院 | 日韩国产亚洲欧美 | 爱爱免费网站 | 又大又黄又粗又爽的免费视频 | 久久亚洲国产成人精品性色 | 天堂资源网在线 | 中文字幕第7页 | 伊人精品一区二区三区 | 国产精品xxxxxx | 国产高潮流白浆喷水视频 | 最近免费中文字幕中文高清百度 | 一级片免费观看 | 男人的天堂av片 | 情趣蕾丝内衣少妇啪啪av | av一区不卡 | 在线成人免费观看www | 日韩新片av | 97色在线观看 | 免费观看成年人视频 | 97在线视频免费 | 亚洲精品国产suv一区 | 国产成人精品免费视频大全最热 | 色婷婷国产精品免费网站 | 国产农村妇女露脸对白视频 | 一本大道无码av天堂 | 94久久国产乱子伦精品免费 | 久热免费 | 伊人伊人网 | 国产在线拍偷自揄拍视频 | a级在线看 | 成人羞羞国产免费网站 | 久久精品三级视频 | 天天干天天干天天干 | h成人在线观看 | 18禁黄网站男男禁片免费观看 | 久久久久无码国产精品一区 | 中文字幕在线精品 | 午夜精品久久久久久久99黑人 | 免费乱码人妻系列无码专区 | 日本大码a∨欧美在线 | 不卡的av | 色欧美亚洲 | 99精品无人区乱码在线观看 | 国产女主播在线观看 | 久久97超碰 | 亚洲日韩中文字幕无码一区 | 久久亚洲免费视频 | 国产乱码一区二区三区 | 天天拍夜夜添久久精品 | 特级毛片在线 | 人人爽久久涩噜噜噜红粉 | 日韩欧美在线观看一区 | 中国极品少妇xxxx做受 | 噼里啪啦免费观看 | 日韩免费在线观看 | 四虎精品在线 | 91精品福利在线观看 | 人妻三级日本三级日本三级极 | 国产精品久久久久久久久久久久久久久久久 | 大学生高潮无套内谢视频 | 亚洲视频在线一区 | 国产999精品久久久影片官网 | videosgratis极品另类灌满高清资源 | 日韩视频在线观看一区 | 理论片午午伦夜理片影院 | 中文字幕永久在线视频 | 国产精品毛片一区二区三区 | 夜夜躁日日躁狠狠久久88av | 日日夜夜艹 | 日韩精品中文字幕一区 | 国产美女一区二区三区 | 东京热无码av一区二区 | 国产v亚洲v天堂a无码99 | 另类第一页 | 国模无码视频一区二区三区 | 欧美xxxx黑人又粗又长精品 | 一边吃奶一边做动态图 | 欧美性第一页 | 亚洲第一极品精品无码 | 日韩毛片在线 | 国产成人精品999在线观看 | 中文字幕在线无码一区二区三区 | 日韩精品在线观看一区 | 国产老熟女伦老熟妇露脸 | 欧美激情猛片xxxⅹ大3 | 日韩 欧美 精品 | 在线看的毛片 | 偷拍中国夫妇高潮视频 | 国产亚洲欧美一区 |