日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

shell编程快速入门(一)

發(fā)布時間:2024/1/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell编程快速入门(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

shell腳本書寫規(guī)范

shell腳本編程規(guī)范與書寫習(xí)慣

1.開頭加腳本解釋器 2.附帶作者及版權(quán)信息 3.腳本擴(kuò)展名為 *.sh 4.腳本存放在固定的目錄下 5.腳本盡量不使用中文 6.成對的符號 一次性書寫完成 7.循環(huán)格式一次輸入完成 8.中括號首尾要有一個空格

shell腳本的注釋

# 后面的的內(nèi)容一般為注釋,可以使用vim 命令模式ctrl+v 可視化模塊添加。也可以使用如下方法: :<<EOF 需要注釋的內(nèi)容 EOF注:結(jié)尾的EOF必須從行首寫,不能有空格, :冒號在shell中也是命令,表示深度不做。例如: #!/bin/bash echo "123" :<<EOF echo "234" echo "345" EOF

shell腳本的執(zhí)行

1.當(dāng)腳本每可執(zhí)行權(quán)限或腳本開頭文件沒有指定解釋器時推薦使用: bash script_name sh script_name2.指定當(dāng)前路徑下執(zhí)行腳本(腳本需要有執(zhí)行權(quán)限) chmod +x script_name 再執(zhí)行 /path/script_name ./script_name3.其他 cat script_name | sh source script_name sh < script_name . script_name

父shell和子shell的概念

在A腳本運(yùn)行b腳本,那么可以稱b為A的子shell,A為父shell。 父shell和子shell之間是不能調(diào)用的,若需要調(diào)用變量需要使用source或 . 點。例如: [root@m01 scripts]# cat 2.sh #!/bin/bash user=`whoami` [root@m01 scripts]# sh 2.sh [root@m01 scripts]# echo $user [root@m01 scripts]# user=`whoami` [root@m01 scripts]# echo $user root [root@m01 scripts]# unset user [root@m01 scripts]# echo $user[root@m01 scripts]# # 使用source調(diào)用是可以讀取到變量的 [root@m01 scripts]# source 2.sh [root@m01 scripts]# echo $user root總結(jié): 使用source 和 . 點來執(zhí)行腳本,相當(dāng)于在shell下面執(zhí)行腳本,變量互相可以調(diào)用。 bash和sh執(zhí)行腳本,等于開啟了一個新的shell,或者說開啟了一個子shell,無法讀取父定義的變量。

declare命令

聲明變量,設(shè)置或顯示變量的值和屬性

例: 聲明變量 [root@m01 scripts]# declare B=aaa [root@m01 scripts]# echo $B aaa

unset命令

刪除指定shell變量或函數(shù)

參數(shù): -f 僅刪除函數(shù) -v 僅山粗變量(不包括只讀變量) -n 刪除具有引用屬性的變量名(如果該選項存在)案例: [root@m01 scripts]# a=123 [root@m01 scripts]# echo $a 123 [root@m01 scripts]# unset a #刪除指定shell變量 [root@m01 scripts]# echo $a[root@m01 scripts]#

set命令

顯示或設(shè)置特殊及shell變量。

set命令注意作用是顯示系統(tǒng)中已經(jīng)存在的shell變量,以及設(shè)置shell變量的新變量值。set命令不能定義新的shel變量,如有要定義新的變量可以使用declare命令以 “變量名=值” 的格式定義。參數(shù): -a 標(biāo)示以修改的變量,以供輸出值環(huán)境變量 -f 取消使用通配符 -n 只讀指令,而不實際執(zhí)行例: [root@m01 scripts]# set |grep LANG LANG=en_US.UTF-8

env命令

顯示系統(tǒng)中已存在的環(huán)境變量

例: 過濾系統(tǒng)環(huán)境變量 [root@m01 scripts]# env |grep LANG LANG=en_US.UTF-8

tee命令

從標(biāo)注輸入讀取數(shù)據(jù)并重定向到標(biāo)準(zhǔn)輸出和文件;要食醋胡的文件可以是一個或多個。

參數(shù): -a 追加到文件中而不是覆蓋案例: 將信息通過管道符輸出到標(biāo)準(zhǔn)輸出并覆蓋寫入到文件中,加-a參數(shù)是追加而不是覆蓋 [root@m01 scripts]# cat 2.sh | tee 2.txt #!/bin/bash user=`whoami` [root@m01 scripts]# cat 2.txt #!/bin/bash user=`whoami`

readonly命令

標(biāo)記shell變量或函數(shù)為只讀

主要用途: 定義一個到多個變量并設(shè)置為只讀屬性 顯示全部包含只讀屬性的變量/函數(shù)參數(shù): -a 指向數(shù)組 -A 指向關(guān)聯(lián)數(shù)組 -f 指向函數(shù) -p 顯示全部只讀變量 -- 在它之后的選項無效只讀變量:是指不能被清除或重新賦值的變量。declare無法去除只讀屬性,unset不能刪除只讀變量。案例: 標(biāo)記變量為只讀變量 [root@m01 scripts]# A=XXX [root@m01 scripts]# readonly A [root@m01 scripts]# A=yyy -bash: A: readonly variable [root@m01 scripts]# unset A=yyy -bash: unset: `A=yyy': not a valid identifier刪除只讀變量 cat << EOF| gdb attach $$ call unbind_variable("變量名") detach EOF

變量知識

什么是變量

變量源自數(shù)學(xué),是計算機(jī)語言中能存儲計算結(jié)果或能表示值的抽象概念。

shell變量特性

默認(rèn)情況下,在bash shell中是不會區(qū)分變量是什么類型的,如:常見的變量類型為整數(shù),字符串,小數(shù)等。

shell變量分類

變量可以分為兩類: 環(huán)境變量(全局變量):可以在創(chuàng)建他們的shell及其派生出來的任意子進(jìn)程中使用,環(huán)境變量又可以分為自定義環(huán)境變量和bash內(nèi)置環(huán)境變量。 普通變量(局部變量):只能在創(chuàng)建他們的shell函數(shù)或shell腳本中使用,普通變量一般由開發(fā)者在開發(fā)腳本程序是創(chuàng)建。

定義環(huán)境變量

如:PS1;PATH;HOME;UID等系統(tǒng)固有的,默認(rèn)就表示一定的意義。系統(tǒng)級:/etc/profile /etc/bashrc 用戶級:~/.bash_profile ~/.bashrc ~/.bash_logout ~/.bash_history設(shè)置環(huán)境變量有三種方法: 第一種: export A=1 第二種: B=2 export B 第三種: declare -x C=3總結(jié): 定義環(huán)境變量盡量大寫; 使環(huán)境變量全局生效,可以寫入/etc/profile文件中。 顯示環(huán)境變量使用env和set命令 取消環(huán)境變量是 unset + 變量名1 變量名2 ...

定義永久變量

本地變量:用戶私有變量,只有本用戶可以使用,保存在家目錄下的.bash_profile,.bashrc文件中 全局變量:所有用戶都可以使用,保存在/etc/profile,/etc/bashrc文件中例如: 本地變量 [root@www ~]# tail -1 ~/.bash_profile name='ccc'全局變量 [root@www ~]# tail -1 /etc/profile export age=18

環(huán)境變量初始化與對于文件生效順序

先加載/etc/profile;然后加載~/.bash_profile;再加載~/.bashrc;最后加載/etc/bashrc

普通變量(局部變量)

當(dāng)前用戶或腳本種生效,離開當(dāng)前用戶或腳本失效。

變量名: 規(guī)則:字母,數(shù)字,下劃線,三種組合,以字母開頭,中間不能有空格,不能使用數(shù)字開頭。 要求:見名知意 駝峰語法:首個單詞字母小寫,其余單詞首字母大寫。 例如: MyAge=18 my_age=18 myAge=18變量內(nèi)容: 字符串: 變量名=value #不加引號,解析變量或者命令,然后輸出,出數(shù)字選擇不加引號,value 值。 變量名='value' #加單引號,所見即所得 變量="value" #加雙引號,解析變量或命令,然后輸出,字符串默認(rèn)選擇雙引號,可以把要定義的內(nèi)容作為一個整體。命令變量: 變量名=`ls` 變量名=$(ls)普通變量定義及輸出小結(jié): 變量名: 1)變量名定義要有一定的命令規(guī)范,并且要見名知意,推薦使用駝峰語法,myAge=18 2)變量名僅能使用字母,數(shù)字,下劃線中的任意多個字符,并且盡量以字母開頭變量內(nèi)容: 在腳本中定義普通字符串變量,盡量把變量的內(nèi)容用雙引號括起來 單純數(shù)字的變量內(nèi)容可以不加引號 希望變量的內(nèi)容原樣輸出加單引號 希望變量值引用命令并且獲取命令結(jié)果使用反引號或$()賦值符號: 變量定義是賦值符號(=),賦值符號兩端不要有空格變量輸出: 使用或輸出變量的內(nèi)容可以使用$變量名,例:echo $變量名 若變量名后面有其他字符連接的時候,就必須給變量加上大括號{};例如:$db_t 就要改寫成${db}_

特殊重要變量

特殊位置參數(shù)變量

符號作用說明
$0獲取當(dāng)前執(zhí)行shell腳本的文件名,如果執(zhí)行腳本帶路徑,那么就包括腳本路徑
$n獲取當(dāng)前執(zhí)行的shell腳本的第n個參數(shù)值,n=1…9,當(dāng)n為0時如上;如果n>9,則大括號括起來,如${10},這樣才能代表第10個參數(shù)
$#獲取當(dāng)前執(zhí)行的shell腳本后面接的參數(shù)的總個數(shù)
$*獲取當(dāng)前shell腳本所有傳參的參數(shù),不加引號同 @ ; 如 果 給 @;如果給 @*加上雙引號,例如: "$*",則表示將所有的參數(shù)視為單個字符串,相當(dāng)于"$1 $2 $3"
$@獲取當(dāng)前shell腳本所有傳參的參數(shù),不加引號同 ? , 如 果 給 * ,如果給 ?@加上雙引號,例如:"$@",則表示將所有的參數(shù)視為不同的獨(dú)立字符串,相當(dāng)于"$1" “$2” “ 3 " " . . . " , 這 是 將 多 參 數(shù) 傳 遞 給 其 他 程 序 的 最 佳 方 式 , 因 為 它 會 保 留 所 有 內(nèi) 嵌 的 每 個 參 數(shù) 里 的 任 何 空 白 。 當(dāng) " 3" "...",這是將多參數(shù)傳遞給其他程序的最佳方式,因為它會保留所有內(nèi)嵌的每個參數(shù)里的任何空白。當(dāng)" 3""..."數(shù)內(nèi)數(shù)當(dāng)"@“和”$*” 都加上雙引號時,二者有區(qū)別,都不加雙引號,二者無區(qū)別。
案例: 1. $0,輸出當(dāng)前執(zhí)行腳本文件名,如果有路徑則輸出腳本路徑[root@m01 scripts]# cat test.sh #!/bin/bash echo $0 [root@m01 scripts]# sh test.sh yyy test.sh [root@m01 scripts]# sh /scripts/test.sh /scripts/test.sh2.$1,$2,...$10,$11...$n,獲取當(dāng)前執(zhí)行腳本的第n個參數(shù) $1,$2腳本后面接的第1,2個參數(shù) [root@m01 scripts]# sh test.sh pp qq pp qq大于9的,如$10需要加大括號 不加括號,$10成了識別成了$1+0的組合,也就是a0 [root@m01 scripts]# cat test.sh #!/bin/bash echo $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 [root@m01 scripts]# bash test.sh {a..z} a b c d e f g h i a0 a1 a2 a3 a4 a5 加大括號后取到了12個字母 echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} [root@m01 scripts]# bash test.sh {a..z} a b c d e f g h i j k l3.$#示例,表示當(dāng)前shell腳本后面接的參數(shù)的總和 [root@m01 scripts]# cat test.sh #!/bin/bash echo $# [root@m01 scripts]# sh test.sh gg 1 [root@m01 scripts]# sh test.sh {1..100} 1004.$*$@,當(dāng)需要接收腳本后面所有參數(shù)時, 但是又不知道參數(shù)個數(shù)或參數(shù)太多就可以使用這兩個變量 不加引號,二者無區(qū)別,用來獲取腳本后所有參數(shù) 加引號,二者區(qū)別如下: [root@m01 scripts]# cat test.sh #!/bin/bas for arg in "$*" doecho $arg doneecho ------------for arg1 in "$@" doecho $arg1 done [root@m01 scripts]# sh test.sh "i love" linux and python. i love linux and python. ------------ i love linux and python. # 可以看出 "$*"輸出結(jié)果是 "$1 $2 $3 ... $n" # 而"$@" 輸出結(jié)果是 "$1" "#2" "$3" ... "$n"

shell變量字串知識及實踐

表達(dá)式說明
${parameter}返回變量$parametert的內(nèi)容
${#parameter}返回變量$parameter內(nèi)容的長度(按字符),也適合特殊變量
${parameter:offset}在變量${parameter}中,從位置offset之后開始提取子串到結(jié)尾
${parameter:offset:length}在變量${parameter}中,從位置offset之后開始提取長度未length的子串
${parameter#word}從變量${parameter}開頭開始刪除最短匹配的word子串
${parameter##word}從變量${parameter}開頭開始刪除最長匹配的word子串
${parameter%word}從變量${parameter}結(jié)尾開始刪除最短匹配的word子串
${parameter%%word}從變量${parameter}結(jié)尾開始刪除最長匹配的word子串
${parameter/pattern/string}使用string代替第一個匹配的pattern
${parameter//pattern/string}使用string代替所有匹配的pattern

變量內(nèi)容"子串"的刪除和替換(重點)

====內(nèi)容的刪除==== [root@m01 ~]# url=www.sina.com.cn 1.${parameter}案例:獲取變量內(nèi)容 [root@m01 ~]# echo ${url} www.sina.com.cn2.${#parameter}案例:獲取變量值的長度 [root@m01 ~]# echo ${#url} 15====索引切片==== 3.${parameter:offset}案例:在變量${parameter}中,從位置offset之后開始提取子串到結(jié)尾 [root@m01 ~]# echo ${url:2} w.sina.com.cn [root@m01 ~]# echo ${url:3} .sina.com.cn4.${parameter:offset:length}案例:從變量${parameter}中從位置offset之后開始提取長度未length的子串 [root@m01 ~]# echo ${url:3:4} .sin [root@m01 ~]# echo ${url:1:3} ww.5.${parameter#word}案例:從變量${parameter}開頭刪除最短匹配的word子串 [root@m01 ~]# echo ${url#*.} sina.com.cn [root@m01 ~]# echo ${url#*c} om.cn6.${parameter##word}案例:${parameter}開頭刪除最長匹配的word子串 [root@m01 ~]# echo ${url##*.} cn [root@m01 ~]# echo ${url##*c} n#發(fā)現(xiàn)沒有刪除內(nèi)容,是因為從前往后,a.之前還有內(nèi)容,寫法錯誤,所以無法刪除 [root@m1 ~]$ echo ${url#a.} www.sina.com.cn [root@m1 ~]$ echo ${url#*a.} 這樣寫就可以了 com.cn7.${parameter%word}案例:從變量${parameter}`結(jié)尾`開始刪除`最短`匹配的word子串 [root@m01 ~]# echo ${url%cn} www.sina.com. [root@m01 ~]# echo ${url%.*} www.sina.com [root@m01 ~]# echo ${url%m.cn} www.sina.co8.${parameter%%word}案例:從變量${parameter}`結(jié)尾`開始刪除`最長`匹配的word子串 [root@m01 ~]# echo ${url%%.*} www對比 [root@m01 ~]# a=tianyun.1000phone.com [root@m01 ~]# echo ${a%.*} #匹配最短 tianyun.1000phone [root@m01 ~]# echo ${a%%.*} #匹配最長 tianyun===變量替換=== 9.${parameter/pattern/string}案例:使用string代替第一個匹配的pattern [root@m01 ~]# echo ${url/n/N} www.siNa.com.cn [root@m01 ~]# echo ${url/w/W} Www.sina.com.cn10.${parameter//pattern/string}案例:使用string代替所有匹配的pattern [root@m01 ~]# echo ${url//n/N} www.siNa.com.cN [root@m01 ~]# echo ${url//w/W} WWW.sina.com.cn

shell特殊變量擴(kuò)展知識

${parameter:-word} 如果parameter變量值為空或未賦值,就返回word字符串替代變量的值。冒號是可以省略的。 用途:如果變量為定義,則返回備用值,防止變量為空值或未定義而導(dǎo)致異常。 例: [root@m01 ~]# result=${test:-test1} [root@m01 ~]# echo $test [root@m01 ~]# echo $result test1 [root@m01 ~]# echo $test [root@m01 ~]# #以上說明短橫線的作用:當(dāng)變量值為空時,短橫線后面的值會賦值給變量,當(dāng)不為空時,不能覆蓋原來的值 ${變量名-新的變量名} 變量沒有被賦值:會使用“新的變量值”替代 變量有被賦值(包括空值):不會被替代企業(yè)應(yīng)用:防止變量為空從根刪起--造成誤刪 find ${path:-/tmp} -name "*.log" -mtime +7|xargs rm -f [root@m01 ~]# find ${path:-/tmp} -name "*.log" /tmp/glances.log [root@m01 ~]# path=/opt [root@m01 ~]# find ${path:-/tmp} -name "*.log" [root@m01 ~]# touch /opt/c.log [root@m01 ~]# find ${path:-/tmp} -name "*.log" /opt/c.log${parameter:=word} 如果parameter變量值為空或未賦值,就設(shè)置這個變量值為word,并返回其值。位置變量和特殊變量不適用。 用途:基本同上一個${parameter:-word} ,但是又額外給parameter變量賦值了。 例: [root@m01 ~]# echo $test[root@m01 ~]# result=${test:=test1} [root@m01 ~]# echo $result test1 [root@m01 ~]# echo $test test1 #當(dāng)test值為空,test1的值不但會賦值給test還會賦值給result.${parameter:?word} 如果parameter變量值為空或未賦值,word字符串將被作為標(biāo)準(zhǔn)錯誤輸出,否則輸出變量的值。用途:用于捕捉由于變量未定義而導(dǎo)致的錯誤,并退出程序。 例如: [root@m01 ~]# result=${test2:?變量內(nèi)容為空} -bash: test2: 變量內(nèi)容為空 [root@m01 ~]# test2=xxx [root@m01 ~]# echo $test2 xxx [root@m01 ~]# result=${test2:?變量內(nèi)容為空} [root@m01 ~]# result=${test2:?變量內(nèi)容為空} #如果parameter值為空,就報錯,否則就輸出變量的值${parameter:+word}如果parameter變量值為空或未賦值,則什么都不做,否則word字符串替代變量的值。 例如: [root@m01 ~]# result1=${test3:+heihei} [root@m01 ~]# echo $result1[root@m01 ~]# echo $test3[root@m01 ~]# test3=333 [root@m01 ~]# result1=${test3:+heihei} [root@m01 ~]# echo $result1 heihei [root@m01 ~]# echo $test3 333 #意思就是test3值為空時,什么都不做,否則將值賦值給result1

shell進(jìn)程特殊狀態(tài)變量

狀態(tài)變量作用說明
$?獲取執(zhí)行上一個指令的執(zhí)行狀態(tài),返回值為0是成功,非0為失敗
$$或者當(dāng)前執(zhí)行的shell腳本的進(jìn)程號(PID)。(后面三個,了解即可)
$!獲取上一個在后臺工作的進(jìn)程的進(jìn)程號(PID)
$__獲取在此之前執(zhí)行的命令或腳本的最后一個參數(shù)
案例: [root@m01 ~]# pwd /root [root@m01 ~]# echo $? 0 [root@m01 ~]# pww -bash: pww: command not found [root@m01 ~]# echo $? 127

shell變量的數(shù)值計算實踐

expr命令

expr是一款便打算計算工具,使用它完成表達(dá)式的求值操作

expr的常用運(yùn)算:加減乘除,求模也就是取余運(yùn)算%。 更多用法參考:man expr1.在shell編程中,常用來判斷一個數(shù)是否為整數(shù)。 [root@m01 scripts]# cat test2.sh #!/bin/bash expr 2 + $1 &>/dev/null if [ $? -eq 0 ] thenecho "$1 is integer" elseecho "$1 is noninteger" fi [root@m01 scripts]# sh test2.sh 1 1 is integer [root@m01 scripts]# sh test2.sh 1.1 1.1 is noninteger2.通過expr判斷文件擴(kuò)展名 [root@m01 scripts]# cat expr1.sh #!/bin/bash expr "$1" : ".*\.txt" &>/dev/null if [ $? -eq 0 ] thenecho "$1 是文本" elseecho "$1 不是文本" fi [root@m01 scripts]# sh expr1.sh hh.txt hh.txt 是文本 [root@m01 scripts]# sh expr1.sh hh.html hh.html 不是文本3.通過expr計算字符串的長度 [root@m01 scripts]# char="I love linux and python" [root@m01 scripts]# expr length "$char" 23其他計算字符串長度的方法: [root@m01 scripts]# echo ${#char} 23 [root@m01 scripts]# echo ${char} |wc -L 23 # -L 打印最長行的長度[root@m01 scripts]# echo ${char} |awk '{print length(($0))}' 23[root@m01 scripts]# echo ${char} |awk '{print length}' 23

算數(shù)運(yùn)算

算數(shù)運(yùn)算符意義
+ -加法或正號;減法或負(fù)號
* / %乘法;除法;取余(取模)
**冪運(yùn)算
++ –增加及減少,可以前置也可以放在變量結(jié)尾,默認(rèn)步長為1
! && ||邏輯非(取反);邏輯與(and);邏輯或(or)
< <= > >=比較符號,小于,小于等于,大于,大于等于
== != =比較符號,相等,不相等,對于字符串"="也可以表示相等
<< >>向左位移,向右位移
~ | & ^按位取反;按位異或;按位與;按位或
= += -= *= /= %=賦值運(yùn)算,例如a+=1等同a=a+1,a-=1等同a=a-1

bash編程常見運(yùn)算命令匯總

運(yùn)算操作符與運(yùn)算命令解釋
(())用于整數(shù)運(yùn)算的常用運(yùn)算符,效率很高
let用于整數(shù)運(yùn)算,類似(())
expr可以用于整數(shù)運(yùn)算,還有其他的額外功能,如判斷是否為整數(shù)
bcLinux下的一個計算器程序(適合整數(shù)以及小數(shù)運(yùn)算)
$[]用于整數(shù)運(yùn)算
awk即可用于整數(shù)運(yùn)算,也可以用于小數(shù)運(yùn)算
declare定義變量值和屬性,-參數(shù)可以用于定義整形變量,做運(yùn)算
案例: (()) [root@m01 scripts]# c=$((2*3)) [root@m01 scripts]# echo $c 6 [root@m01 scripts]# echo $((1+2*3-4/2)) 5let [root@m01 scripts]# let i=2+2 [root@m01 scripts]# echo $i 4expr [root@m01 scripts]# expr 2 + 2 4 [root@m01 scripts]# expr2 + 2 -bash: expr2: command not found [root@m01 scripts]# expr 2+ 2 expr: syntax error [root@m01 scripts]# expr 2 +2 expr: syntax error #前后必須有空格,使用稱號時需要加反斜線,拼特定含義$[] [root@m01 scripts]# echo $[2+2] 4bc [root@m01 scripts]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 5.5-1.2 4.3 [root@m01 scripts]# echo 1.2*3|bc 3.6awk [root@m01 scripts]# echo 1.1 0.9 |awk '{print $1 - $2}' 0.2 [root@m01 scripts]# echo 3.3 1.1 |awk '{print $1 / $2}' 3 [root@m01 scripts]# echo 3.3 1 |awk '{print $1 / $2}' 3.3

特殊內(nèi)置命令read

從鍵盤讀取變量值,通常在shell腳本中與用戶交互的場合使用。該命令可以一次性讀取多個變量的值,變量和輸入的值都需要使用空格隔開。在read命令后面,如果沒有指定變量名,讀取的數(shù)據(jù)將被自動賦值給特定的變量REPLY。

參數(shù): -p 指定讀取值時的提示符 -t 指定讀取值時等待的時間,默認(rèn)單位秒 -s 不回顯 -n 輸入字符個數(shù)案例: [root@m01 scripts]# read -t 5 -p "請輸入一個數(shù)值:" a 請輸入一個數(shù)值:20 [root@m01 scripts]# echo $a 20shell案例 通過read方式讀入整數(shù)變量,計算兩個數(shù)的加減乘除冪模運(yùn)算 [root@m01 scripts]# cat read.sh #!/bin/bash read -p "請輸入兩個整數(shù):" a b echo "a+b=$(($a+$b))" echo "a+b=$(($a-$b))" echo "a+b=$(($a*$b))" echo "a+b=$(($a/$b))" echo "a+b=$(($a**$b))" echo "a+b=$(($a%$b))" [root@m01 scripts]# sh read.sh 請輸入兩個整數(shù):2 2 a+b=4 a+b=0 a+b=4 a+b=1 a+b=4 a+b=0也可以通過傳參的方式 [root@m01 scripts]# cat read1.sh #!/bin/bash a=$1 b=$2 echo "a+b=$(($a+$b))" echo "a+b=$(($a-$b))" echo "a+b=$(($a*$b))" echo "a+b=$(($a/$b))" echo "a+b=$(($a**$b))" echo "a+b=$(($a%$b))" [root@m01 scripts]# sh read1.sh 2 2 a+b=4 a+b=0 a+b=4 a+b=1 a+b=4 a+b=0擴(kuò)展1 [root@m01 scripts]# cat read.sh #!/bin/bash read -p "請輸入兩個整數(shù):" a b c if [ -z $a ] thenecho "error1:必須是兩個整數(shù)"exit elif [ -z $b ] thenecho "error2:必須是兩個整數(shù)"exit fiif [ -z $c ] thenexpr $a + $b + 3 &>/dev/nullif [ $? -eq 0 ]thenecho "a+b=$(($a+$b))"echo "a+b=$(($a-$b))"echo "a+b=$(($a*$b))"echo "a+b=$(($a/$b))"echo "a+b=$(($a**$b))"echo "a+b=$(($a%$b))"elseecho "輸入的不是整數(shù)"exitfi elseecho "error3:必須是兩個整數(shù)" fi [root@m01 scripts]# sh read.sh 請輸入兩個整數(shù):1 2 a+b=3 a+b=-1 a+b=2 a+b=0 a+b=1 a+b=1 [root@m01 scripts]# sh read.sh 請輸入兩個整數(shù):w 1 輸入的不是整數(shù) [root@m01 scripts]# sh read.sh 請輸入兩個整數(shù):2 e 輸入的不是整數(shù) [root@m01 scripts]# sh read.sh 請輸入兩個整數(shù):33 3 3 error3:必須是兩個整數(shù) [root@m01 scripts]# sh read.sh 請輸入兩個整數(shù):1 2 3 4 read.sh: line 13: [: 3: binary operator expected error3:必須是兩個整數(shù) [root@m01 scripts]# sh read.sh 請輸入兩個整數(shù):1 1.1 輸入的不是整數(shù)# 當(dāng)腳本較為繁雜時,就不適合使用read,但是read和用戶交互性較好。擴(kuò)展2,使用傳參的方式 [root@m01 scripts]# cat test.sh #!/bin/bash a=$1 b=$2 if [ $# -ne 2 ] thenecho "只能輸出兩個整數(shù)"exit 1 elseexpr $a + $b + 3 &>/dev/nullif [ $? -eq 0 ]thenecho "a+b=$(($a+$b))"echo "a+b=$(($a-$b))"echo "a+b=$(($a*$b))"echo "a+b=$(($a/$b))"echo "a+b=$(($a**$b))"echo "a+b=$(($a%$b))"elseecho "輸入的不是整數(shù)"exit 2fi fi [root@m01 scripts]# sh test.sh 1 2 a+b=3 a+b=-1 a+b=2 a+b=0 a+b=1 a+b=1 [root@m01 scripts]# sh test.sh 1 2 3 只能輸出兩個整數(shù) [root@m01 scripts]# sh test.sh w 2 3 只能輸出兩個整數(shù) [root@m01 scripts]# sh test.sh 1 w 3 只能輸出兩個整數(shù) [root@m01 scripts]# sh test.sh 1 2 e 只能輸出兩個整數(shù) [root@m01 scripts]# sh test.sh 1.1 2 輸入的不是整數(shù)

關(guān)于cat<<EOF的使用方法

cat<<EOF是從標(biāo)準(zhǔn)輸入設(shè)備(一般為鍵盤)獲取輸入,在第二個EOF處結(jié)束輸入,同時輸出到輸出設(shè)備(一般為顯示器)。 例如: [root@m01 scripts]# [root@m01 scripts]# cat <<EOF > This is test file! > EOF This is test file! #結(jié)束的EOF必須是行首,否則被視為標(biāo)準(zhǔn)輸入而不是結(jié)束分解符。

shell腳本的條件測試與比較

通常,在bash的各種條件結(jié)構(gòu)和流程控制中都要進(jìn)行各種測試,然后根據(jù)測試結(jié)果執(zhí)行不同的操作,有時也會與if等條件語句相結(jié)合,來完成測試判斷,減少程序運(yùn)行的錯誤,執(zhí)行測試條件表達(dá)式后通常會返回真或假,就像執(zhí)行命令后的返回值為0和非0表示真假一樣。

test命令

執(zhí)行條件表達(dá)式

參數(shù): 文件操作符 常用: -a FILE 如果文件存在,則為true -d FILE 如果文件是目錄,則為true -e FILE 如果文件存在,則為true -f FILE 如果文件存在且為普通文件,則為true -L FILE 如果文件是鏈接文件,則為true -r FILE 如果文件可以讀取,則為true -s FILE 如果文件存在且不為空(大小不為0),則為true -w FILE 如果文件可寫,則為true -x FILE 如果文件可以執(zhí)行,則為true常用字符串運(yùn)算符: -z STRING 如果字符串為空,則為true -n STRING 如果字符串不為空,則為true STRING 如果字符串不為空,則為true STRING1 = STRINFG2 如果字符串相等,則為true STRING != STRING2 如果字符串不相等,則為true文件比較: FILE1 -nt FILE2 根據(jù)修改日期,如果file1 比 file2 新,則為true FILE1 -ot FILE2 根據(jù)修改日期,如果file1 比 file2 舊,則為true FILE1 -ef FILE2 如果file1 為 file2的硬連接,則為true返回值:如果表達(dá)式執(zhí)行結(jié)果為成功時返回0,當(dāng)表達(dá)式執(zhí)行結(jié)果為失敗或給出非法參數(shù)時返回1。其他了解即可: 可參考:https://wangchujiang.com/linux-command/c/test.html 或者其他參考man 手冊案例: [root@m01 scripts]# test -a /etc/passwd [root@m01 scripts]# echo $? 0 [root@m01 scripts]# test -a /etc/passddd [root@m01 scripts]# echo $? 1

六種條件測試語法

條件測試語法說明
test <測試表達(dá)式>test命令和 "<測試表達(dá)式>"之間至少有一個空格
[ <測試表達(dá)式> ]單中括號邊界和內(nèi)容至少有一個空格
[[ <測試表達(dá)式> ]]雙中括號邊界和內(nèi)容之間至少有一個空格,比[]更新的語法格式;推薦使用
((<測試表達(dá)式>))雙小括號一般用于if語句中,雙小括號兩端不需要有空格
(<測試表達(dá)式>)小括號應(yīng)用較少,了解即可
`<測試表達(dá)式>```通過反引號實現(xiàn)測試條件表達(dá)式,應(yīng)用較少,了解即可
案例: [root@m01 scripts]# [ -e /etc/passwd ] && echo 1 || echo 0 1 [root@m01 scripts]# [ -e /etc/psss ] && echo 1 || echo 0 0[root@m01 scripts]# [[ 1 -ne 2 ]] && echo 1 || echo 0 1 [root@m01 scripts]# [[ 2 -ne 2 ]] && echo 1 || echo 0 0

條件表達(dá)式的編程語法

[ <測試表達(dá)式> ] && 命令 如果前面的表達(dá)式成立,那么就執(zhí)行后面的命令[ <測試表達(dá)式> ] || 命令 如果前面的表達(dá)式不成立,那么就執(zhí)行后面的命令[ <測試表達(dá)式> ] && { 命令1 命令2 命令3 } 如果前面的表達(dá)式成立,那么就執(zhí)行后面的命令[ <測試表達(dá)式> ] && 命令1 ||命令2 如果前面的表達(dá)式成立,那么就執(zhí)行命令1,否則就執(zhí)行命令2[ <測試表達(dá)式> ] && { 命令1 命令2 } || { 命令3 命令4 } 如果表達(dá)式成立,那么就執(zhí)行命令1,2否則執(zhí)行命令3,4

整數(shù)測試表達(dá)式

在[]以及test中使用的比較符號在(())和[[]]中使用的比較符號說明
-eq==或=相等全拼equal
-ne!=不相等全拼not equal
-gt>大于 greater than
-ge>=大于等于,greater equal
-lt<小于,less than
-le<=小于等于,less equal

邏輯測試表達(dá)式

在[]和test中使用操作符在[[]]和(())使用操作符說明
-a&&and,與,兩端都為真則真
-o||or,或,兩端有一個為真則真
!not 非,相反則為真

條件表達(dá)式符號的語法對比

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-ielgGMYT-1614393493074)(https://i.loli.net/2021/02/20/hyTE6tzMZdkFWln.png)]

vim編程環(huán)境配置

[root@m01 ~]# pwd /root[root@m01 ~]# cat .vimrc set nocompatible set history=100 filetype on filetype plugin on filetype indent on set autoread set mouse=c syntax enable set cursorline hi cursorline guibg=#00ff00 hi CursorColumn guibg=#00ff00 set foldenable set foldmethod=manual set foldcolumn=0 setlocal foldlevel=3 set foldclose=all nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR> set expandtab set tabstop=4 set shiftwidth=4 set softtabstop=4 set smarttab set ai set si set wrap set sw=4 set wildmenu set ruler set cmdheight=1 set lz set backspace=eol,start,indent set whichwrap+=<,>,h,l set magic set noerrorbells set novisualbell set showmatch set mat=4 set hlsearch set ignorecase set encoding=utf-8 set fileencodings=utf-8 set termencoding=utf-8 set smartindent set cin set showmatch set guioptions-=T set guioptions-=m set vb t_vb= set laststatus=4 set pastetoggle=<F9> set background=dark set t_ti= t_te= highlight Search ctermbg=black ctermfg=white guifg=white guibg=black autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" func SetTitle() if expand("%:e") == 'sh' call setline(1, "#!/bin/bash")call setline(2, "##############################################################") call setline(3, "# File Name: ".expand("%"))call setline(4, "# Version: V1.0")call setline(5, "# Author: daveorff")call setline(6, "# Organization:")call setline(7, "# Created Time : ".strftime("%F %T"))call setline(8, "# Description:")call setline(9, "##############################################################")endif endfunc

shell腳本調(diào)試之sh命令

shell命令解釋器

參數(shù): -c string 命令從-c后的字符串讀取 -i 實現(xiàn)腳本交互 -n 進(jìn)行shell腳本的語法檢查 -x 實現(xiàn)shell腳本的逐條語句的跟蹤應(yīng)用 sh -n filename.sh 僅調(diào)試 sh -vx filename.sh 以調(diào)試的方式執(zhí)行,查詢整個執(zhí)行過程 使用-x參數(shù)跟蹤腳本調(diào)試shell腳本,能打印除所執(zhí)行的每一行命令以及當(dāng)前狀態(tài)

if結(jié)構(gòu)條件語句知識與實踐

簡單理解:如果…那么…否則…

單分支

if <條件表達(dá)式> then指令 fi

雙分支

if <條件表達(dá)式> then指令 else指令2 fi

多分支

if條件多分枝結(jié)構(gòu)主體為 "如果...,那么...,否則如果,那么,否則如果...那么...,...,否則..."if <條件表達(dá)式1> then指令1 elif <條件表達(dá)式2> then指令2 elif <條件表達(dá)式3> then指令3 else指令4 fi

嵌套if

if <條件表達(dá)式1> then指令1 else指令2if <條件表達(dá)式2>then指令3fi fi 邏輯不清晰,不推薦使用,可以使用多個if分支。

實踐

例1:如果不存在/backop目錄就創(chuàng)建,存在則打印exist [root@m01 scripts]# vim 01_01.sh #!/bin/bash path="/backup" if [[ -d $path ]] thenecho "eixst" elsemkdir $path -p fi執(zhí)行 [root@m01 scripts]# sh 01_01.sh [root@m01 scripts]# sh 01_01.sh eixst案例2:開發(fā)shell腳本判斷系統(tǒng)剩余內(nèi)存的大小,如果低于100MB就提示內(nèi)存不足,否則提示內(nèi)存充足 分析:先取內(nèi)存 [root@m01 ~]# free -mtotal used free shared buff/cache available Mem: 3773 124 3488 11 160 3429 Swap: 1999 0 1999 字段結(jié)束: total 內(nèi)存總數(shù) used 已經(jīng)使用的內(nèi)數(shù) free 空閑的內(nèi)存數(shù) shared 是指共享的 buffes 是指緩沖內(nèi)存數(shù) cached 是指緩存內(nèi)存數(shù),單位是kb 關(guān)系:total=used+free使用awk取值 [root@m01 ~]# free -m | awk 'NR==2{print $4}' 3475再寫if語句 [root@m01 scripts]# vim 02.sh #!/bin/bash mem=`free -m | awk 'NR==2{print $4}'` if [[ $mem -le 100 ]] thenecho "內(nèi)存不足" elseecho "內(nèi)存充足" fi#測試 [root@m01 scripts]# sh 02.sh 內(nèi)存充足 [root@m01 scripts]# sh 02.sh 內(nèi)存充足#改到4000測試 [root@m01 scripts]# sh 02.sh 內(nèi)存不足案例3: 分別使用變量定義,read讀入及腳本傳參方式實現(xiàn)比較兩個整數(shù)的大小 1.read讀入方式: 解析:可以在傳入的時候設(shè)置3個參數(shù),以達(dá)到判斷是否多出兩個整數(shù)的目的 先使用rend讀入兩個整數(shù) read -p "請讀入兩個整數(shù):" a b c 判斷輸入整數(shù)個數(shù)是否小于2 方法:判斷b是否為空 只有不為空繼續(xù)下一步,否則退出 判斷輸入整數(shù)個數(shù)是否大于2,判斷c是否為空,只有為空才進(jìn)行下一步,否則退出 如果是再判斷是否是兩個整數(shù) :如果兩個數(shù)都是整數(shù)則進(jìn)行下一步,否則退出 expr $a + $b + 3 &>/dev/null 如果都滿足則比較大小 [root@m01 scripts]# cat 03_01.sh #!/bin/bash read -p "請輸入兩個整數(shù):" a b c if [[ -z $b ]] thenecho "缺失一個數(shù),請輸入兩個整數(shù)"exit 1 fiif [[ -n $c ]] thenecho "參數(shù)個數(shù)大于2,請輸入兩個整數(shù)"exit 2 fiexpr $a + $b + 1 &>/dev/null if [[ $? -ne 0 ]] thenecho "只能比較整數(shù)"exit 3 fiif [[ $a -lt $b ]] thenecho "$a < $b" elif [[ $a -gt $b ]] thenecho "$a > $b" elseecho "$a = $b" fi使用傳參的方式: [root@m01 scripts]# cat 03_02.sh #!/bin/bash a=$1 b=$2 if [[ $# -ne 2 ]] thenecho "參數(shù)個數(shù)不對,請輸入兩個整數(shù)"exit 1 fiexpr $a + $b + 3 &>/dev/null if [[ $? -ne 0 ]] thenecho "只能比較整數(shù)"exit 2 fiif [[ $a -lt $b ]] thenecho "$a < $b" elif [[ $a -gt $b ]] thenecho "$a > $b" elseecho "$a = $b" fi案例4: 打印一個菜單如下,當(dāng)用戶選擇對應(yīng)的數(shù)字時,就執(zhí)行對應(yīng)項目的應(yīng)用 1.install lamp 2.install lnmp 3.exit[root@m01 scripts]# cat 04.sh #!/bin/bash cat<<EOF 1.install lamp 2.install lnmp 3.exit EOF read -p "請選擇序號1|2|3:" num expr $num + 2 &>/dev/null if [[ $? -ne 0 ]] thenecho "error1:請輸入整數(shù)"exit fiif [[ $num -eq 1 ]] thenecho "install lamp..." elif [[ $num -eq 2 ]] thenecho "instahll lnmp..." elif [[ $num -eq 3 ]] thenecho "exit"exit elseecho "請選擇序號1~3" fi嵌套if寫法: [root@m01 scripts]# cat 04_01.sh #!/bin/bash cat<<EOF 1.install lamp 2.install lnmp 3.exit EOF read -p "請選擇序號1|2|3:" num expr $num + 2 &>/dev/null if [[ $? -ne 0 ]] thenecho "error1:請輸入整數(shù)"exit elseif [[ $num -eq 1 ]]thenecho "install lamp..."elif [[ $num -eq 2 ]]thenecho "instahll lnmp..."elif [[ $num -eq 3 ]]thenecho "exit"exitelseecho "請選擇序號1~3"fi fi

shell函數(shù)的概念與作用及語法介紹

函數(shù)的概念與作用

簡單來說,函數(shù)的作用就是將程序多次被調(diào)用的相同代碼組合成函數(shù)體,并且為其取名,即函數(shù)名。當(dāng)其他所有重復(fù)調(diào)用這部分代碼的地方只需要用這個名字即可,當(dāng)需要修改這部分重復(fù)代碼時,也只需要改變函數(shù)體內(nèi)的一部分代碼即可實現(xiàn)所有調(diào)用的修改,也可以把函數(shù)單獨(dú)的寫入文件中,當(dāng)需要調(diào)用函數(shù)時,再加載來使用。
使用shell函數(shù)的優(yōu)勢
- 把相同的程序段定義成函數(shù),可以減少整個程序的代碼里,提升開發(fā)效率
- 增加函數(shù)的可讀性,易讀性,提升管理效率
- 可以實現(xiàn)程序功能模塊化,使得程序具備通用性,也就是可移植性
- 對應(yīng)shell來說,Linux系統(tǒng)里近2000個命令都可以說是shell函數(shù)

**函數(shù)的多種語法 **

第一種語法: function 函數(shù)名() {指令集...return n }第二種語法: function 函數(shù)名 {指令集return n }第三種語法:(推薦) 函數(shù)名() {指令集...return n }注意空格,return 函數(shù)返回值

函數(shù)的執(zhí)行

不帶參數(shù)的函數(shù)執(zhí)行時,直接輸入函數(shù)名即可(注意不帶小括號)。(–簡單函數(shù)執(zhí)行)

案例: [root@m01 scripts]# vim func1.sh #!/bin/bash function test_1() {echo "i am function_t1" }function test_2 {echo "hello t2" }test_3() {echo "hei t3" } test_1 test_2 test_3 總結(jié):;定義完函數(shù)后,直接使用其名字即可調(diào)用。

有關(guān)函數(shù)執(zhí)行的重要說明

--執(zhí)行shell函數(shù)時,函數(shù)名前的function和函數(shù)的小括號都不要帶 --函數(shù)的定必須在執(zhí)行前面定義或加載 --shell執(zhí)行系統(tǒng)中各種程序的順序為:系統(tǒng)別名-> 函數(shù)->系統(tǒng)命令->可執(zhí)行文件 --函數(shù)執(zhí)行時,會和調(diào)用它的腳本共用變量(相當(dāng)于腳本的參數(shù)與函數(shù)共用),也可以為函數(shù)設(shè)定局部變量以及特殊位置參數(shù) --在shell函數(shù)中,return命令功能與exit類似,作用是從函數(shù)中退出并返回函數(shù)值,而exit是退出腳本文件 --return語句會返回有關(guān)退出值(即返回值)給調(diào)用函數(shù)的當(dāng)前程序,而exit會返回有關(guān)退出值(即返回值)給執(zhí)行程序當(dāng)前shell --如果函數(shù)存放在單獨(dú)的文件中,被腳本加載使用時,需要source或 . 點來加載 --在函數(shù)內(nèi)一般使用local定義局部變量,這些變量離開函數(shù)即消失,不用local可以在腳本外調(diào)用。

**帶參數(shù)的函數(shù)的執(zhí)行方法格式如下: ** (–函數(shù)傳參)

[root@m01 scripts]# cat func2.sh #!/bin/bash function test_1() {echo "i am $1" }function test_2 {echo "$2" }test_3() {echo "$3" } test_1 我是函數(shù)傳參1 test_2 4 5 6 test_3 7 8 9 [root@m01 scripts]# sh func2.sh i am 我是函數(shù)傳參1 5 9

帶參數(shù)的函數(shù)執(zhí)行格式:

函數(shù) 參數(shù)1 參數(shù)2 ...

函數(shù)后接的參數(shù)說明

shell位置參數(shù)($1,$2,$3,...$#,$*,$?以及$@等)都可以作為函數(shù)的參數(shù)使用 此時父腳本的參數(shù)臨時的被函數(shù)所掩蓋或隱蔽 $0比較頁數(shù),它仍然是父腳本的名稱 當(dāng)函數(shù)執(zhí)行完成時,原來的命令腳本參數(shù)即恢復(fù) 函數(shù)參數(shù)變量是函數(shù)體里面定義的#理解: #比如$?的使用;可以查看函數(shù)的執(zhí)行狀態(tài),狀態(tài)碼范圍是0-255,且$?取值是腳本的最后一條命令的狀態(tài)碼 [root@m01 scripts]# cat func3.sh #!/bin/bash function gg {echo "hello gg"return 110 } gg [root@m01 scripts]# sh func3.sh hello gg [root@m01 scripts]# echo $? 110#local的使用; [root@m01 scripts]# cat func4.sh #!/bin/bash function test_1 {local i="xiaoming"echo "i am $i" } test_1 echo $i [root@m01 scripts]# sh func4.sh i am xiaoming#從此輸出為空,在函數(shù)內(nèi)一般使用local定義局部變量,這些變量離開函數(shù)后即消失 [root@m01 scripts]# #總結(jié): #使用local后在函數(shù)之外是無法調(diào)用函數(shù)體內(nèi)的變量,把local去掉就是腳本變量是可以生效的。 #建議多個函數(shù)間定義同一個變量時使用local,這樣多個函數(shù)間的同名變量便不會發(fā)生沖突。

將函數(shù)傳參轉(zhuǎn)為腳本傳參 (–腳本傳參)

[root@m01 scripts]# cat func6.sh #!/bin/bash daveff() {echo "i am $1" } daveff $1 [root@m01 scripts]# sh func6.sh superman i am superman

將函數(shù)體和函數(shù)執(zhí)行分成不同的文件

1.將函數(shù)寫入系統(tǒng)函數(shù),/etc/init.d/functions 寫入此文件最后兩行上面 例: ...fi fifunction daveorff() {echo " I am $1" }2.使用點 . 或source調(diào)用,地址為 /etc/init.d/functions [root@m01 scripts]# cat func5.sh #!/bin/bash source /etc/init.d/functions daveorff $13.測試,腳本鏈接什么參數(shù),就輸出什么內(nèi)容 [root@m01 scripts]# sh func5.sh abcI am abc [root@m01 scripts]# sh func5.sh cbaI am cba查看shell /etc/init.d/functios文件中所有的函數(shù)名grep -E "[a-zA-Z]+\(\)" /etc/init.d/functions -o

總結(jié):
函數(shù)總共有四種執(zhí)行方式

1.簡單函數(shù)與執(zhí)行 2.帶參數(shù)的函數(shù)編寫執(zhí)行 3.將函數(shù)傳參轉(zhuǎn)為腳本傳參 4.將函數(shù)體和函數(shù)執(zhí)行分成不同的文件,詳見上文

函數(shù)案例

案例: 1.通過腳本傳參的方式,檢查web網(wǎng)站URL是否正常 解析: wget命令 --spider 不下載任何大小;模擬爬蟲 -q 安靜訪問 --quiet 安靜模式(沒有輸出) -o 把記錄寫的file文件中,加/dev/null表示不輸出 -T 超時時間,設(shè)定響應(yīng)超時的秒數(shù) -t 重試,設(shè)定最大嘗試連接次數(shù)(0表示無限制) [root@m01 ~]# wget --spider -T 5 -q -o /dev/null -t 2 www.baidu.com [root@m01 ~]# echo $? 0curl 命令 -l 值顯示請求頭信息 -s 靜默模式,不輸出任何東西 -S 顯示錯誤 -o 把輸出寫到文件,加/dev/null表示不輸出 -w % {http_code} 返回狀態(tài)碼,200為正常 -m 設(shè)置最大傳輸時間[root@m01 ~]# curl www.baidu.com -s &>/dev/null [root@m01 ~]# echo $? 0 [root@m01 ~]# curl -l -m 5 -s -w "%{http_code}\n" -o /dev/bull www.baidu.com 200不用函數(shù)的的寫法 [root@m01 scripts]# cat checkurl.sh #!/bin/bash wget --spider -T 5 -q -o /dev/null -t 2 $1 if [[ $? -eq 0 ]] thenecho "$1 is ok" elseecho "$1 is fail" fi [root@m01 scripts]# sh checkurl.sh www.baidu.com www.baidu.com is ok [root@m01 scripts]# sh checkurl.sh www.baidu.co www.baidu.co is fail使用函數(shù)寫法 [root@m01 scripts]# cat checkurl_01.sh #!/bin/bash usage(){echo "Usage: $0 url"exit 1 }checkurl(){wget --spider -T 5 -q -o /dev/null -t 2 $1if [[ $? -eq 0 ]]thenecho "is ok"elseecho "is fail"fi }main(){if [[ $# -ne 1 ]]thenusageficheckurl $1 } main $* [root@m01 scripts]# sh checkurl_01.sh www.baidu.co is fail [root@m01 scripts]# sh checkurl_01.sh www.baidu.com is ok

case結(jié)構(gòu)條件語句

case結(jié)構(gòu)條件語句相等于多分支的if/elif/else條件語句,但是它比這條件語句看起來更加規(guī)范工整,常被用于實現(xiàn)系統(tǒng)服務(wù)啟動腳本等。

case 語法: case "變量" in值1)指令1...;;值2)指令2...;;值3)指令3...;;*)指令4... esac

case條件語句的執(zhí)行流程邏輯圖

case條件語句的使用總結(jié)

1.case語句和if條件語句的適用性 case語句比較適合變量較少且為固定的數(shù)字或字符串集合的情況,而非不確定的的內(nèi)容,如范圍。如果便的值是已知固定的start/stop/restart等元素,那么采用case語句實現(xiàn)比較合適。2.case語句和if條件語句的常見應(yīng)用場景 - case主要寫服務(wù)的啟動腳本,一般情況下,傳參不同且具有少量的字符串,使用范圍較窄 - if就是取值判斷,比較,應(yīng)用比case更廣,幾乎所有的case語句都可以使用if條件語句實現(xiàn)3.case語句的特定及優(yōu)勢 case語句就相當(dāng)于多分支if/elif/else語句,單case語句的優(yōu)勢更規(guī)范,易讀。

案例:

執(zhí)行shell腳本,打印一個如下的水果菜單 1.apple 2.pear 3.banana 4.cherry 當(dāng)用戶輸入對應(yīng)的數(shù)字選擇水果是,告訴他選擇的水果是什么,并給水果單詞加上一種顏色,使用case語句實現(xiàn)。[root@m01 scripts]# cat 06.sh #!/bin/bash cat << EOF 1.apple 2.pear 3.banana 4.cherry EOFread -p "請選擇序號:" num case "$num" in1)echo -e "\033[31m apple \033[0m";;2)echo -e "\033[32m pear \033[0m" ;;3)echo -e "\033[33m banana \033[0m";;4)echo -e "\033[34m cherry \033[0m";;*)echo -e "\033[36m 請選擇1~4 \033[0m"exit esac

顏色代碼

腳本中echo顯示內(nèi)容帶顏色顯示,echo顯示帶顏色,需要使用參數(shù)-e格式如下: echo -e “\033[字背景顏色;文字顏色m字符串\033[0m”例如: echo -e “\033[41;36m good \033[0m” 其中41的位置代表底色, 36的位置是代表字的顏色 1、字背景顏色和文字顏色之間是英文的冒號 ";" 2、文字顏色后面有個m 3、字符串前后可以沒有空格,如果有的話,輸出也是同樣有空格內(nèi)容的顏色用數(shù)字表示,范圍為30-37,每個數(shù)字代表一種顏色。代碼如下: echo -e "\033[30m 黑色字 \033[0m" #<==30m表示黑色字。 echo -e "\033[31m 紅色字 \033[0m" #<==31m表示紅色字。 echo -e "\033[32m 綠色字 \033[0m" #<==32m表示綠色字。 echo -e "\033[33m 棕色字 \033[0m" #<==33m表示棕色字(brown),和黃色字相近。 echo -e "\033[34m 藍(lán)色字 \033[0m" #<==34m表示藍(lán)色字。 echo -e "\033[35m 洋紅字 \033[0m" #<==35m表示洋紅色字(magenta),和紫色字相近。 echo -e "\033[36m 藍(lán)綠色 \033[0m" #<==36m表示藍(lán)綠色字(cyan),和淺藍(lán)色字相近。 echo -e "\033[37m 白色字 \033[0m" #<==37m表示白色字。給輸出的字符串加不同的背景顏色: 字的背景顏色對應(yīng)的數(shù)字范圍為40-47,代碼如下。 echo -e "\033[40;37m 黑底白字\033[0m" #<==40m表示黑色背景。 echo -e "\033[41;37m 紅底白\033[0m" #<==41m表示紅色背景。 echo -e "\033[42;37m 綠底白字\033[0m" #<==42m表示綠色背景。 echo -e "\033[43;37m 棕底白字\033[0m" #<==43m表示棕色背景(brown),和黃色背景相近。 echo -e "\033[44;37m 藍(lán)底白字\033[0m" #<==44m表示藍(lán)色背景。 echo -e "\033[45;37m 洋紅底白字\033[0m" #<==45m表示洋紅色背景(magenta),和紫色背景相近。 echo -e "\033[46;37m 藍(lán)綠底白字\033[0m" #<==46m表示藍(lán)綠色背景(cyan),和淺藍(lán)色背景相近。 echo -e "\033[47;30m 白底黑字\033[0m" #<==47m表示白色背景。最后面控制選項說明 \033[0m 關(guān)閉所有屬性 \033[1m 設(shè)置高亮度 \033[4m 下劃線 \033[5m 閃爍 \033[7m 反顯 \033[8m 消隱 \033[30m — \33[37m 設(shè)置前景色 \033[40m — \33[47m 設(shè)置背景色 \033[nA 光標(biāo)上移n行 \033[nB 光標(biāo)下移n行 \033[nC 光標(biāo)右移n行 \033[nD 光標(biāo)左移n行 \033[y;xH設(shè)置光標(biāo)位置 \033[2J 清屏 \033[K 清除從光標(biāo)到行尾的內(nèi)容 \33[s 保存光標(biāo)位置 \033[u 恢復(fù)光標(biāo)位置 \033[?25l 隱藏光標(biāo)   \033[?25h 顯示光標(biāo) ;; 3)echo -e "\033[33m banana \033[0m";; 4)echo -e "\033[34m cherry \033[0m";; *)echo -e "\033[36m 請選擇1~4 \033[0m"exit

esac

### 顏色代碼

腳本中echo顯示內(nèi)容帶顏色顯示,echo顯示帶顏色,需要使用參數(shù)-e

格式如下:
echo -e “\033[字背景顏色;文字顏色m字符串\033[0m”

例如:
echo -e “\033[41;36m good \033[0m”
其中41的位置代表底色, 36的位置是代表字的顏色
1、字背景顏色和文字顏色之間是英文的冒號 “;”
2、文字顏色后面有個m
3、字符串前后可以沒有空格,如果有的話,輸出也是同樣有空格

內(nèi)容的顏色用數(shù)字表示,范圍為30-37,每個數(shù)字代表一種顏色。代碼如下:
echo -e “\033[30m 黑色字 \033[0m” #<==30m表示黑色字。
echo -e “\033[31m 紅色字 \033[0m” #<==31m表示紅色字。
echo -e “\033[32m 綠色字 \033[0m” #<==32m表示綠色字。
echo -e “\033[33m 棕色字 \033[0m” #<==33m表示棕色字(brown),和黃色字相近。
echo -e “\033[34m 藍(lán)色字 \033[0m” #<==34m表示藍(lán)色字。
echo -e “\033[35m 洋紅字 \033[0m” #<==35m表示洋紅色字(magenta),和紫色字相近。
echo -e “\033[36m 藍(lán)綠色 \033[0m” #<==36m表示藍(lán)綠色字(cyan),和淺藍(lán)色字相近。
echo -e “\033[37m 白色字 \033[0m” #<==37m表示白色字。

給輸出的字符串加不同的背景顏色:
字的背景顏色對應(yīng)的數(shù)字范圍為40-47,代碼如下。
echo -e “\033[40;37m 黑底白字\033[0m” #<==40m表示黑色背景。
echo -e “\033[41;37m 紅底白\033[0m” #<==41m表示紅色背景。
echo -e “\033[42;37m 綠底白字\033[0m” #<==42m表示綠色背景。
echo -e “\033[43;37m 棕底白字\033[0m” #<==43m表示棕色背景(brown),和黃色背景相近。
echo -e “\033[44;37m 藍(lán)底白字\033[0m” #<==44m表示藍(lán)色背景。
echo -e “\033[45;37m 洋紅底白字\033[0m” #<==45m表示洋紅色背景(magenta),和紫色背景相近。
echo -e “\033[46;37m 藍(lán)綠底白字\033[0m” #<==46m表示藍(lán)綠色背景(cyan),和淺藍(lán)色背景相近。
echo -e “\033[47;30m 白底黑字\033[0m” #<==47m表示白色背景。

最后面控制選項說明
\033[0m 關(guān)閉所有屬性
\033[1m 設(shè)置高亮度
\033[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m — \33[37m

設(shè)置前景色
\033[40m — \33[47m 設(shè)置背景色
\033[nA 光標(biāo)上移n行
\033[nB 光標(biāo)下移n行
\033[nC 光標(biāo)右移n行
\033[nD 光標(biāo)左移n行
\033[y;xH設(shè)置光標(biāo)位置
\033[2J 清屏
\033[K 清除從光標(biāo)到行尾的內(nèi)容
\33[s 保存光標(biāo)位置
\033[u 恢復(fù)光標(biāo)位置
\033[?25l 隱藏光標(biāo)  
\033[?25h 顯示光標(biāo)

總結(jié)

以上是生活随笔為你收集整理的shell编程快速入门(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

成人黄色片在线播放 | 在线观看视频你懂的 | 91完整视频| 亚洲国产手机在线 | 在线中文字母电影观看 | 久久九九久久精品 | 欧美日韩首页 | 777视频在线观看 | 欧美日韩中文国产一区发布 | 久久久高清视频 | 亚洲精品视频在线观看免费视频 | 99久久久成人国产精品 | 久久久久久毛片精品免费不卡 | 91资源在线| 中文字幕在线观看免费高清完整版 | 免费下载高清毛片 | 狠狠色狠狠色综合日日小说 | 日本久久久久久久久久久 | 日韩大片在线免费观看 | 91精品国产欧美一区二区 | 色狠狠狠| 黄色软件大全网站 | 日韩欧美在线免费观看 | 九月婷婷人人澡人人添人人爽 | 首页av在线| 97热视频 | 丁香六月婷婷激情 | 亚洲影音先锋 | 久久国产综合视频 | 国产黄网站在线观看 | 日韩精品资源 | 亚洲综合欧美激情 | 久久国产精品99久久久久 | 久久午夜国产 | 99久久久久久国产精品 | 国产精品免费一区二区 | 人人爽人人爽人人爽学生一级 | 日韩欧美高清一区二区三区 | 久久精品国产99 | 日韩免费一级电影 | 免费高清在线一区 | 亚洲国产精品va在线看黑人动漫 | 欧美一区二区三区在线 | 日韩91精品 | 91精品视频观看 | 久久久高清一区二区三区 | 国产日韩欧美在线影视 | 狠狠色丁香婷婷综合最新地址 | 国产精品免费久久久 | 日韩二级毛片 | 成年人视频免费在线 | 天天射天天干天天插 | 久久首页 | 97超碰在线久草超碰在线观看 | 少妇bbbb搡bbbb搡bbbb | 成人91视频| 丁香六月婷婷综合 | 夜夜狠狠 | 成年人国产精品 | 狠狠干五月天 | 中文字幕在线观看一区二区 | 日日麻批40分钟视频免费观看 | 国产一级二级av | 99久久网站 | 男女拍拍免费视频 | 91成人免费| 在线成人看片 | 免费a网址| 国产成人精品福利 | 色婷婷综合久久久久中文字幕1 | 狠狠色狠狠色合久久伊人 | 在线观看福利网站 | 天天综合网~永久入口 | 精品在线99 | 国产美腿白丝袜足在线av | 精品国产a | 色吊丝av中文字幕 | 久久99久久99精品 | 一级久久久 | 婷婷婷国产在线视频 | 国产麻豆传媒 | 日本精品视频在线播放 | 黄色一级大片免费看 | 91一区在线观看 | 亚洲精品久久视频 | japanesexxx乱女另类 | 亚洲三级国产 | 国产小视频免费在线观看 | 青青草国产免费 | 手机在线黄色网址 | 日韩在线免费播放 | 久久国产精品久久国产精品 | 国产久草在线观看 | 99国产一区二区三精品乱码 | 看毛片网站 | 久久人人爽人人片 | 欧美国产精品久久久久久免费 | 久久蜜桃av | 国产999视频在线观看 | 成人a视频在线观看 | 91在线看免费 | 亚洲精品在线播放视频 | 丁香婷婷激情网 | 丁香在线观看完整电影视频 | 日韩一区在线播放 | 人人看人人草 | 国产成人黄色网址 | 在线观看国产中文字幕 | 九色视频网站 | 国产一性一爱一乱一交 | 高潮毛片无遮挡高清免费 | 久久久久欧美精品999 | 亚洲电影av在线 | 97在线观看视频国产 | 精品国产综合区久久久久久 | 欧美资源 | 久草香蕉在线视频 | 成人久久18免费网站麻豆 | 丁香综合五月 | 日韩中文在线电影 | 国产成人亚洲精品自产在线 | 日韩一级成人av | 97超碰精品 | 69视频在线| 在线免费观看黄色大片 | 亚洲在线a| 久久九九九九 | 在线你懂 | 欧美日韩国产在线一区 | 天天艹日日干 | 国产a级片免费观看 | 日韩久久久久久久久久 | 久久综合国产伦精品免费 | 国产精品久久久久久一区二区 | 国内精品亚洲 | 午夜精品一区二区三区免费视频 | 亚洲国产精品500在线观看 | 黄色片免费在线 | 国产成人免费高清 | 亚洲不卡在线 | 久久女同性恋中文字幕 | 久久久免费毛片 | 婷婷国产v亚洲v欧美久久 | 久久免费精彩视频 | 国产精品亚洲精品 | av大全在线 | 国产一级片网站 | 国产精品免费在线观看视频 | 三上悠亚一区二区在线观看 | 免费看麻豆 | 精品国产人成亚洲区 | 国产精品一区专区欧美日韩 | 国产在线91在线电影 | av电影av在线 | 丁香六月中文字幕 | 国产欧美精品一区二区三区四区 | 爱爱av网| 欧美午夜理伦三级在线观看 | 色姑娘综合天天 | 免费高清在线一区 | 99爱视频在线观看 | 97视频免费在线看 | 日韩在线免费视频 | 日韩视频一区二区在线观看 | 国产中文字幕一区二区 | 黄色一级在线观看 | av大全在线看 | 精品久久久久久久久久国产 | 成人网中文字幕 | 日韩综合一区二区 | 五月婷婷伊人网 | 97人人模人人爽人人喊中文字 | 911精品美国片911久久久 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 国产午夜小视频 | 免费看一级 | 探花视频在线观看+在线播放 | 国产成人精品久久久久 | 欧美日本不卡 | 日韩最新在线 | 91一区二区三区久久久久国产乱 | 日本99久久 | 99亚洲国产精品 | 欧美日韩免费一区二区三区 | 国产综合香蕉五月婷在线 | 国产黄色免费看 | 欧美乱码精品一区二区 | 最近最新中文字幕 | 久章草在线观看 | 色多多污污在线观看 | 911在线 | 欧美激情h| 免费成人av在线看 | 久久人人添人人爽添人人88v | 国产精选在线观看 | 国产精品免费久久久久 | 懂色av一区二区在线播放 | 色九九影院 | 99精品区| 91九色最新地址 | 麻豆国产网站 | 久久激情片 | 超碰在线1| 精品久久精品 | 日韩免费一级a毛片在线播放一级 | 久久久免费看视频 | 国产精品69久久久久 | 制服丝袜在线 | 中文字幕有码在线播放 | 在线观看黄色av | 中文字幕电影高清在线观看 | a级片网站| 三级a毛片 | 亚洲成人动漫在线观看 | 精品国产电影一区二区 | 国产精品成人av电影 | 中文字幕一区二区三 | 不卡的av电影 | 免费男女羞羞的视频网站中文字幕 | 亚洲视频高清 | 色成人亚洲 | 国产韩国日本高清视频 | 五月婷在线视频 | 久久视频这里有久久精品视频11 | 欧美日韩电影在线播放 | 亚洲日本成人网 | 欧美日韩视频观看 | 久久久久久久久久久免费视频 | 麻花天美星空视频 | 丁香六月婷 | 亚洲精品中文字幕视频 | 日韩精品中文字幕一区二区 | 久久免费电影网 | 国产999精品久久久久久绿帽 | 国产精品成人一区 | a黄色片在线观看 | 一本一道波多野毛片中文在线 | 国产亚洲字幕 | 色开心| 超级碰碰碰视频 | 亚洲欧美精品一区 | 久久dvd| av福利电影 | 国产精品一区二区三区免费视频 | 久久精品一区二区 | 欧美91精品国产自产 | 九九日九九操 | 五月天婷亚洲天综合网鲁鲁鲁 | 欧美做受69 | 国产手机在线播放 | 成人av电影免费 | 日本久久久影视 | 国产精品国产三级国产aⅴ无密码 | 免费视频一区二区 | 亚洲乱码中文字幕综合 | 超碰公开97| 久久国产一区二区三区 | 色片网站在线观看 | 在线观看成人国产 | 高清国产午夜精品久久久久久 | www.伊人色.com | 97国产精品亚洲精品 | 欧美精品一区在线 | 日韩黄色软件 | 国产精品午夜在线 | 国产黄 | 婷婷 综合 色 | 亚州国产精品视频 | 欧美一级片 | 在线观看亚洲精品 | 91av免费看 | 亚州免费视频 | 国产精品爽爽久久久久久蜜臀 | 日韩1级片 | 久久综合久久综合久久综合 | 在线精品亚洲一区二区 | 97超碰在线播放 | 亚洲天天摸日日摸天天欢 | 一区二区精品在线视频 | 成人午夜精品福利免费 | 国产美女精品人人做人人爽 | 日韩在线视频在线观看 | 欧美黑吊大战白妞欧美 | 国产视频在线观看一区 | 国产精品久久婷婷六月丁香 | 激情久久综合网 | 97精品国自产拍在线观看 | 日韩高清不卡一区二区三区 | 国产精品观看在线亚洲人成网 | 一级片免费观看视频 | 国产成人av网 | 亚洲精品国产电影 | 国产精品精品视频 | 日韩成人免费在线观看 | 91热视频在线观看 | 天天综合网久久综合网 | av网站在线免费观看 | 国产一区福利 | 久久国产精品二国产精品中国洋人 | 一区二区三区久久精品 | 国产一区免费 | 国内精品在线看 | 国产精品福利在线观看 | 亚洲精品视频一二三 | 国产成人黄色网址 | 久久综合网色—综合色88 | 国内视频 | 国产精品九九久久99视频 | 成人av影院在线观看 | 黄色片免费电影 | 超黄视频网站 | 亚洲精品成人 | 五月婷香蕉久色在线看 | 在线观影网站 | 久久综合狠狠综合久久激情 | www.黄色| 99久久99久久 | 97福利 | 亚洲免费a| 依人成人综合网 | 欧美日韩三区二区 | 91免费高清在线观看 | 一区二区三区免费网站 | 国产精品欧美 | 99亚洲精品在线 | 亚洲精品一区中文字幕乱码 | 亚洲精品乱码白浆高清久久久久久 | 一区精品在线 | 国产精品麻豆99久久久久久 | 国产亚洲精品成人av久久影院 | 中文字幕之中文字幕 | 97色视频在线| 午夜精品一区二区三区视频免费看 | 精品国产诱惑 | 国产亚洲精品成人av久久影院 | 91免费版在线 | 热久久电影| 国模视频一区二区 | 午夜精品视频免费在线观看 | 亚洲一级片免费观看 | 91在线精品秘密一区二区 | 国产精品爽爽久久久久久蜜臀 | 97精品国产91久久久久久 | 日韩二区三区在线 | 91av欧美| 999久久久久久久久久久 | 天堂av免费在线 | 精品一二三四视频 | h视频日本 | 午夜精品一二三区 | 91porny九色在线播放 | 久久精选| 亚洲精品国产品国语在线 | 亚洲免费公开视频 | а天堂中文最新一区二区三区 | 久久综合婷婷综合 | 中文字幕在线播放一区二区 | 国产一级精品视频 | 国产一区二区精品久久91 | 日韩黄色大片在线观看 | 欧美日韩三级在线观看 | 91视频免费视频 | 免费视频黄色 | 在线观看www91 | 日韩高清免费无专码区 | 中文字幕视频一区 | 欧美性生活一级片 | 午夜体验区 | 黄网站污 | 精品自拍sae8—视频 | 91av社区 | 91伊人久久大香线蕉蜜芽人口 | 中文字幕电影高清在线观看 | 国产精品二区在线观看 | 午夜黄色 | 69久久久久久久 | 精品国产一区二区三区日日嗨 | 午夜久久美女 | 少妇av片 | 国产精品一二 | 久久视频免费看 | 69国产精品视频 | 91精彩视频在线观看 | 国产亚洲成av片在线观看 | 国产精品免费成人 | 久久久精品午夜 | 日韩啪啪小视频 | 国产精品原创av片国产免费 | 久久久久国产一区二区三区四区 | 免费观看第二部31集 | 不卡视频一区二区三区 | 亚洲精品视频在线播放 | 少妇精品久久久一区二区免费 | 丁香六月av | 国产精品欧美日韩 | 日韩黄色免费在线观看 | 亚洲日本中文字幕在线观看 | 欧美精品久久人人躁人人爽 | 九九综合九九综合 | 国产精品高清在线 | 黄色免费国产 | 国内精品久久久久久中文字幕 | 人人爽人人射 | 日韩欧美第二页 | 国产99自拍 | 国产亚洲精品女人久久久久久 | 精品免费观看视频 | 久草视频一区 | 久久草 | 综合网在线视频 | 日本夜夜草视频网站 | 亚洲一区二区三区四区精品 | 久久99久久精品 | www.玖玖玖| 啪啪av在线 | 青青河边草观看完整版高清 | 亚洲黄色免费电影 | 在线成人一区二区 | 麻豆成人在线观看 | 日韩高清毛片 | 国产成人精品av | 国产精品手机在线观看 | 国产原创在线 | 久久精品免费 | 色综合久久久久 | 超碰在线天天 | 午夜色大片在线观看 | 亚洲区精品视频 | 成人a视频| 国产精品一区二区免费在线观看 | 国产v在线观看 | 国产精品视频内 | 国产系列在线观看 | 99久久精品国产系列 | 丰满少妇对白在线偷拍 | 国产黄色视 | 欧美日韩一区二区三区在线免费观看 | 中文不卡视频 | 日韩网站一区二区 | 精品福利网站 | 一级欧美日韩 | 国产亚洲亚洲 | 国产1区2区3区精品美女 | 在线观看你懂的网址 | 中文字幕在线观看国产 | 国产精品毛片完整版 | 久草在线免费电影 | 中国黄色一级大片 | 91在线免费观看网站 | 人人爽人人爽人人爽学生一级 | 91视频在线播放视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 深爱激情开心 | 欧美日产在线观看 | 日韩国产精品久久久久久亚洲 | 97精品国产一二三产区 | 国产精品99精品 | 亚洲高清国产视频 | 国产色拍拍拍拍在线精品 | 成人香蕉视频 | 国产精品第2页 | 欧美韩国日本在线 | 成人免费在线观看av | 久久精品艹 | 日本性动态图 | 开心激情五月网 | 国产在线高清精品 | 国产精品免费看 | 国产在线探花 | 国产 视频 久久 | 插插插色综合 | 看黄色.com | 91在线免费公开视频 | zzijzzij亚洲成熟少妇 | 国产三级精品在线 | 免费在线播放av电影 | 福利片免费看 | 中文在线字幕观看电影 | 亚洲jizzjizz日本少妇 | 日韩在线观看你懂的 | 久久久久亚洲最大xxxx | 国产永久免费高清在线观看视频 | 最新av在线网站 | 久久免费视频3 | 999免费视频 | 国产99久久久国产精品免费二区 | 九九视频免费观看视频精品 | 亚洲精品成人网 | 亚洲天天摸日日摸天天欢 | www.久久久 | 天天射天天操天天色 | a级国产乱理论片在线观看 特级毛片在线观看 | 激情综合中文娱乐网 | 黄色毛片在线观看 | 91最新国产 | 97色视频在线 | 西西www4444大胆视频 | 青青草国产精品 | 最近中文字幕免费视频 | 天天爱天天操天天干 | 久久99亚洲精品 | 99精品电影| a在线观看免费视频 | 最近中文字幕免费大全 | 91成人免费看片 | 久久久精品久久日韩一区综合 | 久久高清国产视频 | av在线一| 波多野结衣在线观看一区 | 中文字幕一区二区在线播放 | 免费成人在线视频网站 | 最近2019好看的中文字幕免费 | 69国产成人综合久久精品欧美 | 毛片网在线观看 | 免费网站在线观看成人 | 91精品电影 | 中文字幕麻豆 | 久久国产精品久久精品国产演员表 | 青青啪 | 日本黄色a级大片 | 欧美精品中文在线免费观看 | 91在线精品观看 | 中文字幕人成人 | 色婷婷综合久久久久中文字幕1 | 久久国产精品系列 | 韩日精品在线观看 | 日韩欧美综合在线视频 | 亚洲另类视频在线观看 | 久久亚洲日本 | 福利视频一二区 | 日韩精品一区在线观看 | 九九热视频在线 | 婷香五月 | 免费a v观看| 天天五月天色 | 日韩高清精品免费观看 | 色妞色视频一区二区三区四区 | 99视频在线精品国自产拍免费观看 | 色综合色综合久久综合频道88 | 黄a网站 | 欧美综合色 | 日韩区欠美精品av视频 | av免费网站 | 2019天天干夜夜操 | 国产中文字幕一区 | 日韩a级免费视频 | 最新日韩视频在线观看 | 日韩免费中文 | 免费黄色在线网址 | 超碰人人av | 国产一级久久久 | 日本在线观看视频一区 | 成人资源站 | 久草| 亚洲精品乱码久久久久久久久久 | 国产精品免费小视频 | 欧美日韩91| 欧美一级电影 | 国产精品aⅴ | 在线v| 在线 成人 | 成人黄色在线观看视频 | 亚洲三级影院 | 玖玖在线播放 | 国产一区二区三区免费观看视频 | 超碰在线成人 | 国产一区精品在线 | 亚洲婷婷在线 | 草久久影院 | 精品一二三区 | 国产精品国产三级国产aⅴ9色 | 免费在线观看中文字幕 | 99精品视频在线观看视频 | 五月婷婷在线视频观看 | 999精品视频 | 成人黄色在线观看视频 | 特级西西444www大胆高清无视频 | 麻豆91在线看 | 在线观看免费av片 | 免费成人结看片 | 韩日视频在线 | 一区二区三区手机在线观看 | 亚洲精品456在线播放 | 一区二区三区在线观看免费 | 欧美精品久久久久久久久久久 | 婷婷免费在线视频 | 欧美日韩在线播放一区 | 亚洲精品天天 | 五月天婷婷丁香花 | 99爱在线观看 | 久久69av| 日韩最新av在线 | 99免费精品 | av看片网址 | 爱爱av网| 黄网站a| 国产最新精品视频 | 午夜视频日本 | 亚洲激情国产精品 | 国产视频精选 | 日韩视频精品在线 | 国产99色 | 91视频在线观看下载 | 久久短视频 | 在线影院av | 免费av在线播放 | 韩国视频一区二区三区 | 亚洲小视频在线 | 国产高清免费视频 | 国产午夜一级毛片 | 国产精品麻豆果冻传媒在线播放 | 最近中文字幕mv免费高清在线 | 97碰在线视频 | 天天爱天天射天天干天天 | 91精品啪在线观看国产81旧版 | 天天综合网 天天综合色 | 免费成人av在线 | 最新日韩在线观看视频 | 日本久久不卡视频 | 久久久网站 | 亚洲伊人av| 天天躁日日躁狠狠躁av麻豆 | 久久精品79国产精品 | 国产一区二区高清视频 | 特级西西444www大胆高清无视频 | 欧美另类激情 | 00av视频| 欧美午夜久久 | 久久久精品国产免费观看同学 | 西西大胆免费视频 | 丝袜美腿亚洲 | 91精品国自产在线观看欧美 | 日日综合 | 中文日韩在线视频 | 91精品久久久久久久久久入口 | 日韩天天操| 国产69精品久久久久久久久久 | 国产日产高清dvd碟片 | 性日韩欧美在线视频 | 国产午夜在线观看视频 | 久久久久久久久久网 | 日韩a在线观看 | 久久免费视频在线观看6 | 国产精品成人一区二区三区 | 日韩在线不卡 | 成人在线黄色电影 | 中文字幕av一区二区三区四区 | 亚洲永久精品在线观看 | 日韩成人精品一区二区三区 | 国产精品久久久久久久久久久免费 | 免费视频一二三区 | 永久免费视频国产 | 蜜臀久久99精品久久久酒店新书 | 久久99精品久久久久久久久久久久 | 91日本在线播放 | 在线免费性生活片 | 国产你懂的在线 | 一本一本久久a久久精品综合妖精 | 国产成人久久精品77777综合 | 激情影院在线观看 | 在线观看免费国产小视频 | 成人在线小视频 | 日韩91精品 | 天天撸夜夜操 | 久久 地址 | 色综合久久久久综合体桃花网 | av不卡免费看 | 成人免费一级 | 91精品综合在线观看 | 狠狠综合| 黄色精品免费 | 一区二区亚洲精品 | 国产最新福利 | 色综合色综合久久综合频道88 | 午夜18视频在线观看 | 国产精品一区二区三区在线看 | 免费视频你懂的 | 成人手机在线视频 | 国产视频在线观看一区 | 五月婷婷激情五月 | 视频一区在线免费观看 | 黄色大全在线观看 | 性色在线视频 | 国产精品v a免费视频 | 亚洲免费av网站 | av字幕在线 | 九九九九九国产 | 亚洲特级毛片 | 国产精品毛片久久久 | 国产日韩视频在线观看 | 国产精品 欧美 日韩 | a在线观看国产 | 国产精品18久久久久久首页狼 | 日韩三级视频在线观看 | www免费网站在线观看 | 91手机在线看片 | 欧美日韩视频免费看 | 女人18片 | 欧美日韩国产在线观看 | 人人藻人人澡人人爽 | 免费一级特黄毛大片 | 91在线播放视频 | 免费视频a | 精品久久一 | 91 在线视频播放 | 婷婷五综合| 国产成人av | 久久福利在线 | 美女精品久久 | 中文字幕观看视频 | 婷婷性综合 | 在线观看中文字幕网站 | 少妇自拍av | 久久9999久久免费精品国产 | 一区二三国产 | 99视频在线看 | 9999精品| 久久久美女 | 亚洲成av人影院 | 成人a视频 | 2021av在线| 日日爽日日操 | 97视频免费看 | 色婷丁香 | 粉嫩av一区二区三区四区五区 | 国产欧美日韩精品一区二区免费 | 激情五月婷婷激情 | 精品国产视频在线 | 亚洲日本成人 | 激情在线网站 | 国产亚洲激情视频在线 | 久热电影 | 日韩成人免费电影 | 日韩欧美在线观看一区二区三区 | 91成人精品国产刺激国语对白 | 亚洲精品免费看 | 麻豆网站免费观看 | 在线视频免费观看 | 日韩和的一区二在线 | 国内精品免费久久影院 | 亚洲黄色在线播放 | 久久久久久久久国产 | 天天玩天天干天天操 | 国产在线观看91 | 色综合久久久 | 国产一级在线 | 欧美日韩国产一区二区在线观看 | av午夜电影 | 一二三精品视频 | 狠狠色丁香久久婷婷综合五月 | 美女视频是黄的免费观看 | 91观看视频 | 97人人添人澡人人爽超碰动图 | 日av免费 | 97人人视频| 日日干综合 | 国产视频九色蝌蚪 | 久草电影在线 | 国产精品一区二区在线观看 | 国产午夜精品福利视频 | 色国产精品 | 免费一级片观看 | 五月天综合网站 | 久久一区二区三区日韩 | 久久五月婷婷综合 | 中文字幕av全部资源www中文字幕在线观看 | 久操伊人 | 中午字幕在线 | 久久免费中文视频 | 国产一级片网站 | 最近最新中文字幕视频 | 最近中文国产在线视频 | 91在线免费看片 | 中文字幕在线免费看线人 | 欧美激情操 | 国产免费观看久久 | 香蕉影院在线播放 | 欧美一级性生活片 | 久久久久二区 | 99re视频在线观看 | 在线观看视频在线观看 | 在线观看日韩中文字幕 | 人人添人人澡 | 在线电影91 | av字幕在线 | 日韩最新av在线 | 五月婷婷视频在线 | 亚洲成年人在线播放 | 国产精品99在线观看 | 久久狠狠亚洲综合 | 丁香花在线视频观看免费 | 白丝av在线 | 亚洲欧美日韩国产一区二区三区 | www.福利 | 99久久精品国产欧美主题曲 | 久久99久国产精品黄毛片入口 | 亚洲视频免费在线观看 | 欧洲精品一区二区 | 毛片精品免费在线观看 | 国产免费av一区二区三区 | 国产女人40精品一区毛片视频 | 亚洲少妇激情 | 日韩中文字幕第一页 | 欧美日韩色婷婷 | 91在线免费公开视频 | 国产一区二区日本 | 久久欧美综合 | 超碰激情在线 | 欧美最爽乱淫视频播放 | 亚洲国产精品成人av | 五月激情av| 久久久久久久99精品免费观看 | 国产精品中文在线 | 成人久久 | 99久久这里只有精品 | 日韩电影在线观看中文字幕 | 99c视频在线 | 国内精品免费久久影院 | 五月天久久综合网 | 精品日韩中文字幕 | 天天射天天干 | 视频高清 | 日韩在线免费小视频 | 97视频精品| 超碰com| 丰满少妇在线观看网站 | 免费97视频 | 网站免费黄 | 性色av一区二区三区在线观看 | 丁香六月综合网 | 久草网站在线观看 | 国产高清视频免费最新在线 | 麻豆影视网站 | 国产福利91精品 | 久久这里只有精品视频99 | 91成熟丰满女人少妇 | 9999精品视频 | 久久草av| av在线网站大全 | 波多野结依在线观看 | 人人搞人人干 | 日韩在线播放欧美字幕 | 久久超级碰视频 | 激情久久伊人 | www.天天成人国产电影 | 永久免费视频国产 | 天天鲁一鲁摸一摸爽一爽 | 国产另类xxxxhd高清 | 精品国产一区二区三区久久久蜜月 | 久久久久综合精品福利啪啪 | 亚洲国产字幕 | 国产精品欧美 | 日韩在线激情 | 亚洲精品国偷拍自产在线观看蜜桃 | 日韩一级精品 | 美女免费视频观看网站 | 91精品电影 | 色噜噜日韩精品一区二区三区视频 | 日韩二区三区在线观看 | 国产精品九九九 | 91麻豆免费看| 免费成人黄色 | 一本—道久久a久久精品蜜桃 | 在线观看视频一区二区三区 | 午夜精品福利在线 | 亚洲最大免费成人网 | 国产黄色免费观看 | 狠狠综合网 | 婷婷九九 | 五月天婷亚洲天综合网精品偷 | 亚洲女在线 | 91久久久久久国产精品 | 国产精品theporn | 久久综合久久伊人 | 日日爽| 色综合久久久久综合99 | 亚洲 欧洲 国产 精品 | 美女中文字幕 | 亚洲欧美国产精品 | 在线观看一区二区视频 | 午夜的福利| 欧美日韩天堂 | 国产一级在线观看视频 | 精品久久久久久久久久久久久久久久 | 成人av在线一区二区 | 免费高清在线观看成人 | 日本久久精品视频 | 性色av免费在线观看 | 国产精品一区二区在线播放 | 久久另类小说 | 日韩三级在线观看 | 国产首页 | 91最新在线视频 | 在线播放国产一区二区三区 | 在线国产欧美 | 97在线观看免费高清完整版在线观看 | 成人在线播放网站 | 日韩精品网址 | 日韩精品免费一区二区在线观看 | 日韩精品一区二区三区视频播放 | 国产精品美女免费看 | 日韩黄色av网站 | 国产黄色免费 | 日韩视频在线不卡 | 中文字幕在线观看网址 | 欧美吞精 | 久久无码av一区二区三区电影网 | 日日摸日日碰 | 久久久久久黄 | 国产视频中文字幕在线观看 | 性色va | 九九九国产 | 九九色视频 | 欧美最猛性xxxxx亚洲精品 | 成人免费看视频 | 成人一区二区在线观看 | 久久艹精品 | 国产在线观| 在线高清| 成人免费视频播放 | 国产视频二 | 欧美孕妇与黑人孕交 | 日日夜夜天天久久 | av在线进入 | 六月丁香六月婷婷 | 国产亚洲精品电影 | 看国产黄色片 | 日韩欧美精品在线 | 国产精久久| 88av网站| 天天综合亚洲 | 麻豆传媒视频观看 | 久久久久久久久久影院 | 天天操天天玩 | 九色精品免费永久在线 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 天天爽夜夜爽人人爽曰av | 国产一级黄色免费看 | 丁香花在线视频观看免费 | 日本高清中文字幕有码在线 | 亚洲在线精品 | 精品黄色在线 | 亚洲免费在线观看视频 | 一二三精品视频 | 国产亚洲精品久久久久久移动网络 | 久久精品99视频 | 高清视频一区 | 国语麻豆 | 日韩有码中文字幕在线 | 国产精品亚州 | 黄色免费在线看 | 国产破处精品 | 日本xxxx裸体xxxx17 | 92国产精品久久久久首页 | 香蕉视频色 | 久久成人国产精品入口 | 最新av在线播放 | 日本中文字幕在线电影 | 国产精品区二区三区日本 | 波多野结衣资源 | 伊人五月天.com | 日本黄色免费观看 | 亚洲视频www | 99色人| 欧美日韩精品网站 | 91亚洲激情 | 久久久国产精品一区二区三区 | 四虎在线视频免费观看 | 国产精品影音先锋 | 亚洲精品美女久久久 | 国产传媒中文字幕 | 天天综合在线观看 | 六月丁香婷婷网 | 精品国产一区二区三区蜜臀 | 久久男人中文字幕资源站 | 97超碰人人澡 | 久久久久久综合网天天 | 一区二区三区在线观看 | 国产99久久久精品 | 99999精品| 欧美九九九 | 免费在线观看av的网站 | 久久视频在线视频 | 免费在线日韩 | 欧美小视频在线 | 天天爽人人爽 | 狠狠操天天干 | 激情六月婷婷久久 | 免费亚洲电影 | 中文字幕视频网 | 超碰在线94 | 中文资源在线播放 | 国产精品理论片在线播放 | av成人资源| 国产亚洲欧美精品久久久久久 | 国产高清免费 | 天天操夜操 | 日日操日日插 |