婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > linux shell循環:for、while、until用法詳解

linux shell循環:for、while、until用法詳解

熱門標簽:同花順電話機器人微信 輝縣市地圖標注 湖北孝感如何辦理 威海電銷外呼系統好用嗎 武漢語音電銷機器人加盟 北京電銷機器人對市場的影響 地圖標注x是啥意思 房產證地圖標注的兩個面積 外呼系統的合法性

學習腳本就是為了方便我們運維工作,而對運維人員從來講,有很多工作也是需要重復執行的,比如我們管理用戶帳戶時就需要批量創建和刪除用戶帳戶。而此時如果使用系統自帶的useradd或者userdel去操作的話,就只能機械式的一個一個創建,一個一個的刪除。那我們是不是就可以考慮寫一個程序,讓它自動化的去創建了。此時,我們的循環執行概念也就出來了。循環就是讓程序按照一定的條件反復的執行相關操作,直到不在滿足循環條件時結束。

循環語句常見分類:

1,for語句
2,while語句
3,until語句

循環體包括兩部分:
1,循環的進入條件
2,循環的退出條件

循環次數:
1,事先已知 for語句
2,事先未知 while、until語句

for循環常見語法格式:

for 變量名 in 列表;do
循環體
done

循環執行機制:依次將列表中的元素賦值給變量名,每次賦值后執行一次循環體,直到列表中的元素耗盡,循環結束

列表生成方式:
(1) 直接給出列表
(2) 整數列表:
(a) {start..end} 如:{1..10}
(b) $(seq [start [step]] end) 如:`seq 1 2 100` 表示1-100之間的所有奇數
(3) 返回列表的命令 $(COMMAND) 如:`ls /etc`
(4) 使用glob,如:*.sh
(5) 變量引用;$@, $*

for循環特殊用法:
雙小括號方法,即((…))格式,也可以用于算術運算
雙小括號方法也可以使bash Shell實現C語言風格的變量操作
#I=10
#((I++))

for循環特殊用法格式:
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式));do
循環體
done

控制變量初始化:僅在運行到循環代碼段時執行一次控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,而后再做條件判斷for循環應用實例:

1,計算1-100之間所有正整數的和

#!/bin/bash
#Author:wangjun
#Contact QQ:183530300
#Version:1.0
#Create time:2016-08-17 16:53:28
#Description:1-100 all positive integer's sum

declare -i sum=0

for I in {1..100};do
 let sum+=$I
done
echo "1-100 all positive integer's sum : $sum"

2,自動掃描1-254網段的所有主機,統計在線主機數與不在線主機數

#!/bin/bash 

#Author:wangjun
#Contact QQ:183530300
#Version:1.0
#Create time:2016-08-17 11:25:37
#Description:ping all hosts and count the number

declare -i online=0
declare -i offline=0
declare -i host=1 

for host in `seq 254`;do
 ping -c 1 -W 1 10.1.250.$host > /dev/null  echo "10.1.250.$host is online"  let online=$online+1 || let offline++
done
echo "Online hosts number : $online"
echo "Offline hosts number : $offline"

3,生成10個隨機數,并找出最大隨機數和最小隨機數

#!/bin/bash

#Author:wangjun
#Contact QQ:183530300
#Version:1.0
#Create time:2016-08-17 17:27:45
#Description:random number comparative

minrandom=$RANDOM
maxrandom=$minrandom

echo $minrandom

for I in {1..9};do
 RD=$RANDOM
 echo $RD
 if [[ $RD -gt $maxrandom ]];then
  maxrandom=$RD
 elif [[ $RD -lt $minrandom ]];then
  minrandom=$RD
 fi
done
echo "Minrandom is : $minrandom"
echo "Maxrandom is : $maxrandom"

4,打印九九乘法表(第一版)

#!/bin/bash
#Author:wangjun
#Contact QQ:18353030
#Version:1.0
#Create time:2016-08-16 13:07:40
#Description:99 multiplication table
for Row in {1..9};do
 for Column in `seq $Row`;do
  echo -ne "${Column}x${Row}=$[$Row*$Column]\t"
 done
 echo
done

5,打印九九乘法表(第二版)——for循環特殊用法

#!/bin/bash

#Author:wangjun
#Contact QQ:183530300
#Version:1.0
#Create time:2016-08-18 11:35:16
#Description:multiplication table 

for ((row=1;row=9;row++));do
 for ((column=1;column=$row;column++));do
  echo -ne "${column}x${row}=$[${column}*${row}]\t"
 done
 echo
done

循環執行 :將某代碼段重復運行多次; 重復運行多少次: 循環次數事先已知 ;循環次數事先未知 ;有進入條件和退出條件。

三種循環體:for、while、until。

再循環前前介紹步進,在循環中經常用到步進。

步進

顯示1-10

[root@centos6mini app]# echo {1..10}
1 2 3 4 5 6 7 8 9 10
[root@centos6mini app]# echo $(seq 1 10)
1 2 3 4 5 6 7 8 9 10

1-10 遞加

[root@centos6mini app]# echo {1..10..2}
1 3 5 7 9
[root@centos6mini app]# echo $(seq 1 2 10)
1 3 5 7 9

1-10 遞減

[root@centos6mini app]# echo {10..1..2}
10 8 6 4 2
[root@centos6mini app]# echo $(seq 10 -2 1)
10 8 6 4 2

1-100間的奇數和偶數

[root@centos6mini app]# echo {1..100..2}
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
[root@centos6mini app]# echo {2..100..2}
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
[root@centos6mini app]# echo {100..1..2}
100 98 96 94 92 90 88 86 84 82 80 78 76 74 72 70 68 66 64 62 60 58 56 54 52 50 48 46 44 42 40 38 36 34 32 30 28 26 24 22 20 18 16 14 12 10 8 6 4 2
[root@centos6mini app]# echo {99..1..2}
99 97 95 93 91 89 87 85 83 81 79 77 75 73 71 69 67 65 63 61 59 57 55 53 51 49 47 45 43 41 39 37 35 33 31 29 27 25 23 21 19 17 15 13 11 9 7 5 3 1

隨機生成16位包含數字、大小寫字母、符號的密碼

cat /dev/urandom |tr -dc '0-9a-zA-Z!@_#?.,' |head -c 16

tr -d 和 tr -dc 的用法

[root@centos6mini app]# echo 12324345 |tr -d 2 #不要數字2
134345
[root@centos6mini app]# echo 12324345 |tr -dc 2 #支取數字2
22

for循環

for 變量名 in 列表;do
循環體
done

執行機制:

依次將列表中的元素賦值給“變量名”; 每次賦值后即執 行一次循環體; 直到列表中的元素耗盡,循環結束

for循環的列表生成方式:

(1) 直接給出列表

(2) 整數列表:

 (a) {start..end}

 (b) $(seq [start [step]] end)

(3) 返回列表的命令 $(COMMAND)

(4) 使用glob,如:*.sh

(5) 變量引用; $@, $*

批量創建user1至user10,要求設置隨機16位密碼,包含數字、大小寫字母、符號。并要求用戶使用密碼首次登錄后,強制設置新密碼。

#!/bin/bash
> /root/user.log
for i in {1..10};do
#創建十個用戶
    useradd user$i  echo user$i is created
#隨機生成密碼
    password=$(cat /dev/urandom |tr -dc '0-9a-zA-Z!@_#?.,' |head -c 16)
#將用戶和密碼導出
    echo user$i:$password >> /root/user.log
#設置密碼
    echo $password |passwd --stdin user$i > /dev/null
#強制下次登錄修改密碼
    passwd -e user$i > /dev/null
done

使用♥,利用for,顯示出一個等腰三角形。

方法一:

for ((i=1;i10;i++))
do
    for ((j=1;j=i;j++))
do
        echo -n "♥"
    done
    echo
done
for ((i=1;i9;i++))
do
    for ((j=9;j>i;j--))
do
        echo -n "♥"
    done
    echo
done

♥
♥♥
♥♥♥
♥♥♥♥
♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥♥♥
♥♥♥♥♥♥♥♥
♥♥♥♥♥♥♥♥♥
♥♥♥♥♥♥♥♥
♥♥♥♥♥♥♥
♥♥♥♥♥♥
♥♥♥♥♥
♥♥♥♥
♥♥♥
♥♥
♥

方法二:

#!/bin/bash2
read -p "請輸入三角形的高度: " num
for i in `seq $num`;do
    for x in `seq 1 $[$num-$i]`;do
        echo -e " \c"
    done
    for n in `seq 1 $[2*$i-1]`;do
        #yanse=`tr -dc '1-6'  /dev/urandom | head -c 1`
        #echo -e "\e[3"$yanse"m♥\e[0m\c"
        echo -e "\e[34m♥\e[0m\c"
    done
    echo 
done
  ♥    
 ♥♥♥
 ♥♥♥♥♥
♥♥♥♥♥♥♥

方法三:

#!/bin/bash
for ((i = 1; i  10; i++))
do
  for ((j = 10; j > i; j--))
  do 
   echo -n " ";
  done
  for ((m = 1; m = i; m++))
  do 
    echo -n "$i "
  done
  echo ""
done
[root@centos7 ~]# ./sjx 
     1 
    2 2 
    3 3 3 
   4 4 4 4 
   5 5 5 5 5 
  6 6 6 6 6 6 
  7 7 7 7 7 7 7 
 8 8 8 8 8 8 8 8 
 9 9 9 9 9 9 9 9 9

方法四:

#!/bin/bash
#彩色閃爍山角形
read -p "請輸入三角形邊長: " w
for (( i=1;i=$w;i++ )); do
    for(( j=$w;j>$i;j-- ));do
        echo -n " "
    done
    for (( m=1;m=i;m++  ));do
        we=`cat /dev/urandom |tr -dc '1-6' |head -c 1 `
        echo -e "\033[3"$we";5m♥\033[0m\c"  #紅色加閃爍
        done
    echo

done

添加10個用戶user1-user10,密碼為8位隨機字符、

#!/bin/bash
> /root/user.log
for i in {1..10};do  
  useradd user$i  echo user$i is created
  pass=$(cat /dev/urandom |tr -dc '0-9a-zA-Z!@_#?.,' |head -c 16)  #生成隨機數
  echo user$i:---pass:$pass >> /root/user.log
  echo $pass |password --stdin user$i > /dev/null
done

/etc/rc.d/rc3.d目錄下分別有多個以K開頭和以S開頭的文件;分別讀取每個文件,以K開頭的輸出為文件加stop,以S開頭的輸出為文件名加start,如K34filename stop S66filename start

#!/bin/bash
for i in $(ls /etc/rc.d/rc3.d/);do  #查看文件內容確定循環次數
    if [[ $i =~ ^K.* ]];then
        echo "$i stop"
    elif [[ $i =~ ^S.* ]];then
        echo "$i start"
    fi
done
[root@centos6mini app]# ./linshi 
K05wdaemon stop
K10saslauthd stop
K15htcacheclean stop
K15httpd stop
K30spice-vdagentd stop
K50dnsmasq stop
K50kdump stop
K73winbind stop
K74ntpd stop
...省略...

編寫腳本,提示輸入正整數n的值,計算1+2+…+n的總和

#!/bin/bash
read -p "請輸入一個正整數" s
w=0
if [[ "$s" =~ ^[0-9]+$ ]] ;then
  for i in $(seq 1 $s) ;do
  w=$[$w+$i]           
  
  done
  echo "整數1到$s的和為$w"
else echo "請輸入正整數"
fi

計算100以內所有能被3整除的整數之和

方法一:

[root@centos6mini app]# echo {3..100..3} |tr " " "+"|bc #進行步進,替換相加
1683

方法二:

#!/bin/bash
for i in {3..100..3};do  #步進,相加
 n=$[$n+$i] > /devnull
 done
echo $n

方法三:

#!/bin/bash
sum=0
for n in $(seq 1 100);do
    i=$[$n/3]  #進行相除
    y=$[3*$i]  #進行相乘 、運算成功則成立
    if [ $y -eq $n ];then
        sum=$[$n+$sum]
    fi
done 
    echo $sum

方法四:

sum=0
for i in {1..100};do
  if [ $[$i%3] -eq 0 ];then #相除取余進行判定
  let sum+=$i  #進行加法運算
  fi 
done
echo $sum

打印九九乘法表

for (( i=1 ;i=9;i++ ));do
    for ((n=1;n=9;n++)) ;do
        w=0
        w=$[$n*$i]
    if [ $n -le $i  ];then
    echo -n " $i*$n=$w "
    fi
    done
echo
done

在/testdir目錄下創建10個html文件,文件名格式為數字N(從1到10)加隨機8個字母,如:1AbCdeFgH.html

方法一:

#!/bin/bash
cd /testdir > /dev/null
if [ ! $(echo $?) -eq 0 ] ;then  #判斷文件是否存在
  mkdir /testdir > /dev/null
fi

for i in $(seq 1 10 );do
  w=$(cat /dev/urandom |tr -dc '0-9a-zA-Z!@_#?.,' |head -c 8)
  touch $i$w.html
done

方法二:

if ! [ -d /testdir ];then  #判斷文件是否存在
 mkdir /testdir > /dev/null  #如果沒有創建文件
fi
for i in {1..10};do 
 touch /testdir/$i`cat /dev/urandom |tr -dc [:alpha:] |head -c 8`.html  #創建文件
done

探測局域網內的主機

172.18.250-254.X

能ping通顯示并保存至/root/ip.log

要求并行探測提高效率。

[root@centos6mini zuoye]# cat 11.sh 
 #!/bin/bash
> /root/ip.log
for i in {250..255};do
  for n in {1..255};do
  {
  ping -c1 -w1 172.18."$i"."$n" > /dev/null
  if [ $? -eq 0 ] ;then
  echo "ping 172.18."$i"."$n" is up" #>> /root/ip.log
  fi
  }
  done
done

[root@centos6mini zuoye]# ./11.sh 
ping 172.18.250.14 is up
ping 172.18.250.26 is up
ping 172.18.250.71 is up
ping 172.18.250.81 is up
ping 172.18.250.112 is up
ping 172.18.250.154 is up
ping 172.18.250.164 is up
ping 172.18.250.166 is up
ping 172.18.250.183 is up
ping 172.18.250.195 is up
ping 172.18.250.212 is up
ping 172.18.250.216 is up
ping 172.18.250.224 is up
ping 172.18.250.249 is up
ping 172.18.250.250 is up
ping 172.18.251.18 is up

打印國際象棋棋盤

方法一:

[root@centos6mini zuoye]# cat qipan.sh 
#!/bin/bash
for n in {1..8};do
  for i in {1..8} ;do
    if [ $[$n%2] -eq 0  ];then
      if [ $[$i%2] -eq 0  ];then
         echo -e "\033[41m \033[0m\c"
      fi
      if [ $[$i%2] -ne 0  ] ;then
         echo -e "\033[47m \033[0m\c"
        
      fi
    else
       if [ $[$i%2] -eq 0  ];then
                 echo -e "\033[47m \033[0m\c"
            fi
            if [ $[$i%2] -ne 0  ] ;then
                 echo -e "\033[41m \033[0m\c"
            
            fi

    fi
  done
  echo 
done

方法二:

#!/bin/bash
for xline in $(seq 1 8);do  #橫向
 for yline in $(seq 1 8);do  #縱向
    if [ $[$[$xline+$yline]%2] -eq 0 ];then  #判斷;橫向與縱向相加,最后相除是否等于0
     echo -e "\033[47m \033[0m\c"
    else
     echo -e "\033[41m \033[0m\c"
    fi
 done
 echo 
done

方法三:(放大版)

#!/bin/bash
for i in {1..8};do
    for x in {1..4};do #控制單行大小。對已有輸出進行放大
        for n in {1..8};do
            a=`echo $[$[$i+$n]%2]`
            if [ $a -eq 0 ];then
                echo -e "\e[43m" "" "" "" "" "" "" "" "\e[0m\c"
            else
                echo -e "\e[42m" "" "" "" "" "" "" "" "\e[0m\c"
            fi
        done
        echo
    done
done

while循環

while CONDITION; do
循環體
done

CONDITION:循環控制條件;進入循環之前,先做一次判 斷;每一次循環之后會再次做判斷;條件為“true”,則執行 一次循環;直到條件測試狀態為“false”終止循環

因此:CONDTION一般應該有循環控制變量;而此變量的值 會在循環體不斷地被修正

進入條件:CONDITION為true

退出條件:CONDITION為false

“:” 和true的返回值都為真

[root@centos6mini zuoye]# true
[root@centos6mini zuoye]# echo $?
0
[root@centos6mini zuoye]# :
[root@centos6mini zuoye]# echo $?
0

判斷/var/目錄下所有文件的類型

[root@centos6mini app]# cat linshi 
#!/bin/bash
dc=0
lc=0
cc=0
bc=0
oc=0
zc=0

ls -l /var |grep -v total >/tmp/var_ftype.txt
while read lines
do
  ftype=`echo $lines |awk '{print $1}' |cut -c 1`
  case $ftype in
    d) dname=`echo $lines |awk '{print $9}'`; echo "$dname is a Directory" ; let dc+=1;;
    l) lname=`echo $lines |awk '{print $9}'`; echo "$lname is a Links of Soft " ;let lc+=1 ;;
    c) cname=`echo $lines |awk '{print $9}'`; echo "$cname is a Character of file" ;let cc+=1;;
    b) bname=`echo $lines |awk '{print $9}'`; echo "$bname is a Block file" ; let bc+=1;;
    -) zname=`echo $lines |awk '{print $9}'`; echo "$zname is a common file" ; let zc+=1;;
    *) echo "Others files"; let oc+=1

  esac

done /tmp/var_ftype.txt
echo '-----------------------------' 
echo -e "var目錄下普通文件數量: $zc\nvar目錄下子目錄數量:$dc\nvar目錄下鏈接文件數量:$lc\nvar目錄下字符類型文件數量: $cc\nvar
目錄下塊設備文件數量:$bc\n其他類型文件數量:$oc"
rm -f /tmp/var_ftype.txt


[root@centos6mini app]# ./linshi 
cache is a Directory
crash is a Directory
cvs is a Directory
db is a Directory
empty is a Directory
games is a Directory
gdm is a Directory
lib is a Directory
local is a Directory
lock is a Directory
log is a Directory
mail is a Links of Soft 
nis is a Directory
opt is a Directory
preserve is a Directory
run is a Directory
spool is a Directory
tmp is a Directory
www is a Directory
yp is a Directory
-----------------------------
var目錄下普通文件數量: 0
var目錄下子目錄數量:19
var目錄下鏈接文件數量:1
var目錄下字符類型文件數量: 0
var
目錄下塊設備文件數量:0
其他類型文件數量:0

編寫腳本,求100以內所有正奇數之和

方法一:

[root@centos6mini zuoye]# echo {1..100..2}
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
[root@centos6mini zuoye]# echo {1..100..2}|tr " " + |bc
2500

方法二:

[root@centos6mini 3.19]# ./1
2500
[root@centos6mini 3.19]# cat 1
#!/bin/bash
u=0 
for i in {1..100..2}; do
  let u+=i
done
echo $u

方法三:

[root@centos6mini 3.19]# ./1
2500
[root@centos6mini 3.19]# cat 1 
#!/bin/bash
u=0 
i=1
while [ $i -le 100 ] ;do

  let u+=i
  let i+=2
done
echo $u

編寫腳本,提示請輸入網絡地址,如192.168.0.0,判斷輸入的網段中主機在線狀態,并統計在線和離線主機各多少

方式一:

#!/bin/bash
w=0
a=0
y=0
for (( d=0;d256;d++ ));do
  for (( f=1;f255;f++ ));do
    {
    ping -c1 -w1 172.18."$d"."$f" > /dev/null
    a=`echo $?`

    if [ $a -eq 0 ] ; then 
      echo "172.18."$d"."$f" up" >> /app/e.txt
      echo "172.18."$d"."$f" up "  
    fi
    if [ $a -ne 0 ] ; then 
            echo "172.18."$d"."$f" down " >> /app/r.txt
      echo "172.18."$d"."$f" down "         
    fi
  }
  done
done 
w=`cat /app/e.txt |wc -l`
echo "通的 : $w"
y=`cat /app/r.txt |wc -l`
echo "不通的 : $y"
rm -rf /app/e.txt
rm -rf /app/w.txt

方式二:

#!/bin/bash
i=1
q=1
w=0
a=0
y=0
while [ $i -lt 255 ];do
  while [ $q -lt 255 ];do
    {
    ping -c1 -w1 172.18."$i"."$q" > /dev/null
    a=`echo $?`
    if [ $a -eq 0 ] ; then 
      echo "172.18."$i"."$q"  up" >> /app/e.txt
      echo "172.18."$i"."$q"  :up"
    fi
    if [ $a -ne 0 ] ; then 
            echo "172.18."$i"."$q" down "  >> /app/w.txt
        
        echo "172.18."$i"."$q" down "

    fi
    }
    let q=q+1

    
  done
  
  let  i=i+1
  q=1   ####將q的變量值從新賦值為1
done 
w=`cat /app/e.txt |wc -l`
echo "通的主機數為 : $w"
y=`cat /app/w.txt |wc -l`
echo "不通的主機數為 : $y"
rm -rf /app/w.txt /app/e.txt

編寫腳本,打印九九乘法表

[root@centos6mini 3.19]# cat 99 
#!/bin/bash
q=1
w=1
while [ $q -le 9 ];do
  while [ $w -le 9 ];do
    e=0
    let e=q*w  
    if [ $w -le $q ];then
    echo -n " $w*$q=$e "
    fi

  let w+=1
  done
  let q+=1
  w=1
  echo
done
[root@centos6mini 3.19]# ./99
 1*1=1 
 1*2=2  2*2=4 
 1*3=3  2*3=6  3*3=9 
 1*4=4  2*4=8  3*4=12  4*4=16 
 1*5=5  2*5=10  3*5=15  4*5=20  5*5=25 
 1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36 
 1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49 
 1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64 
 1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

4、編寫腳本,利用變量RANDOM生成10個隨機數字,輸出這個10數字,并顯示其中的最大值和最小值

[root@centos6mini 3.19]# ./4
25955
25748
16113
19729
8944
19049
16202
20067
30609
4309
最大值: 30609
最小值: 4309
[root@centos6mini 3.19]# cat 4 
#!/bin/bash
q=1
while [ $q -le 10 ] ;do
   echo $[RANDOM] >> /app/o.txt
   #echo $[RAND0M] #每次隨機都是新的值
  let q+=1  
done
cat /app/o.txt
w=`cat /app/o.txt |sort -rn |tail -n1`
e=`cat /app/o.txt |sort -rn | head -n 1`
echo "最大值: $e"
echo "最小值: $w"
rm -rf /app/o.txt

5、編寫腳本,實現打印國際象棋棋盤[

[root@centos6mini 3.19]# cat 5,sh
#!/bin/bash
q=1
w=1
while [ $q -le 8 ] ;do
  while [ $w -le 8 ] ;do
    if [ $[$[$q+$w]%2] -eq 0 ] ;then  ##判斷句中的計算需要$[]括起來:
      echo -e "\033[47m \033[0m\c"
    else
      echo -e "\033[41m \033[0m\c"
    fi
  
  let w+=1
  done
  let q+=1
  w=1
  echo
done

后續六個字符串:efbaf275cd、4be9c40b8b、44b2395c46、f8c8873ce0、b902c16c8b、ad865d2f63是通過對隨機數變量RANDOM隨機執行命令:

echo $RANDOM|md5sum|cut –c1-10

后的結果,請破解這些字符串對應的RANDOM值

方法一:

#!/bin/bash
>6
while true ;do
    while true ;do
        w=`echo $RANDOM ` #定義變量--隨機數隨時在變化,給他賦值一個變量,后邊取值就不在變化了
        q=`echo $w|md5sum|cut -c1-10`
        if [ $q == efbaf275cd ] ;then
            echo "efbaf275cd=$w" #>>6
        elif [ $q == 4be9c40b8b ] ;then
            echo "4be9c40b8b=$w" #>>6
        elif [ $q == 44b2395c46 ] ;then
            echo "44b2395c46=$w" #>>6
        elif [ $q == f8c8873ce0 ] ;then
            echo "f8c8873ce0=$w" #>>6
        elif [ $q == b902c16c8b ] ;then
             echo "b902c16c8b=$w" #>>6
        elif [ $q == ad865d2f63 ] ;then
             echo "ad865d2f63=$w" #>>6
        fi

    done
done
[root@centos6mini ~]# cat 6 |sort|uniq
44b2395c46=9000
4be9c40b8b=12000
ad865d2f63=1000
b902c16c8b=3000
efbaf275cd=15000
f8c8873ce0=6000

方法二:

#!/bin/bash
sum=0
for i in {1..32767};do
    num=`echo $i |md5sum | cut -c1-10`
    case $num in
        efbaf275cd|4be9c40b8b|44b2395c46|f8c8873ce0|b902c16c8b|ad865d2f63)
            echo $i
            let sum++
        ;;
    esac
    if [ $sum -lt 6 ];then
        continue
    else
        break
    fi
done

$#和$*差別

[root@centos6mini 3.19]# ./linshi 1 2 2 3 4
1 2 2 3 4
2 2 3 4
2 3 4
3 4
4
[root@centos6mini 3.19]# cat linshi 
#!/bin/bash
while [ $# -gt 0 ];do  
  echo $*
  shift
done

[root@centos6mini 3.19]# ./linshi 1 2 2 3 4
5
4
3
2
1
[root@centos6mini 3.19]# cat linshi 
#!/bin/bash
while [ $# -gt 0 ];do  
  echo $#
  shift
done

使用一條命令,依次創建指定的用戶。如執行createuser.sh tom bob alice harry

方法1:

[root@centos6mini 3.19]# ./linshi createuser.sh tom bob alice harry 
createuser.sh 用戶創建成功
tom 用戶創建成功
bob 用戶創建成功
alice 用戶創建成功
harry 用戶創建成功
[root@centos6mini 3.19]# cat linshi 
#!/bin/bash
#!/bin/bash
while [ $# -gt 0 ]
do 
    

    id $1 >/dev/null
    if [ $? -eq 0 ];then
        echo $1 is already exsit.
        shift
        continue
    fi
    useradd $1
    echo "$1 用戶創建成功"
    shift

done

刪除用戶
[root@centos6mini 3.19]# ./linshi createuser.sh tom bob alice harry 
createuser.sh 用戶刪除成功
tom 用戶刪除成功
bob 用戶刪除成功
alice 用戶刪除成功
harry 用戶刪除成功
[root@centos6mini 3.19]# cat linshi 
#!/bin/bash
while [ $# -gt 0 ];do 
      userdel -r $1
      echo "$1 用戶刪除成功"
      shift
done

方法2:

#!/bin/bash
while [ $# -gt 0 ];do
    id $1 > /dev/null  { echo $1 is alread exist  shift  continue; }
    useradd $1  echo $1 is created
    shift
done

每隔3秒鐘到系統上獲取已經登錄的用戶的信息;如果發現用戶hacker登錄,則將登錄時間和主機記錄于日志/var/log/login.log中,并退出腳本

#!/bin/bash
while true;do
if $(ps -au |grep "^hacker.*" > /dev/null);then  #監測前臺終端上有沒有用戶登陸信息
    echo $(ps -au |grep "^hacker.*" |tr -s " " |cut -d" " -f1,7,9) >> /var/log/login.log
      #將用戶登陸信息保存到日志文件中/var/log/login.log
    break  #推出監測
else
    sleep 3s  #三秒已監測,防止程序太多占用cpu
fi
done

隨機生成10以內的數字,實現猜字游戲,提示比較大或小,相等則退出

[root@centos6mini 3.19]# ./linshi 
請輸入數值 : 1
錯了 ,小了
請輸入數值 : 9
錯誤,大了
請輸入數值 : 5
猜對了
[root@centos6mini 3.19]# cat linshi 
#!/bin/bash
qe=$( echo $[$RANDOM%10] ) 
while true ;do
read -p "請輸入數值 : " qw
    if [ $qw -gt $qe  ] ;then
        echo "錯誤,大了"

    elif [ $qw -lt $qe  ] ;then
        echo "錯了 ,小了"
    elif [ $qe -eq $qw ];then
        echo "猜對了"
        break
    fi

done

用文件名做為參數,統計所有參數文件的總行數

[root@centos6mini 3.19]# ./linshi /etc/passwd /etc/sysconfig/network-scripts/ifcfg-eth1 /etc/passwd
89
[root@centos6mini 3.19]# cat linshi 
#!/bin/bash
sumhang=0
while [ $# -gt 0 ];do
    hang=$( cat $1 | wc -l )
    let sumhang+=hang
    shift
done
echo $sumhang

4、用二個以上的數字為參數,顯示其中的最大值和最小值

方法一:

#!/bin/bash
min=$1 #最小值等于第一個數值
max=$1 #最大數等于第一個數值

while [ $# -gt 0 ];do  #進行數值數量進行判斷,做循環
    value=$1   #定義變量
    if [ $value -gt $max ];then  #當第二個數大于第一個數時
        max=$value #最大值等于后一個數值,對max從新賦與新的值
    elif [ $value -lt $min ];then  #當第二個數大于第一個數時
        min=$value  #最小值等于后一個數值 對min從新賦與新的值
    fi
    shift #不管前面判斷是否成立,都進行數列左移,
done
echo "min $min"
echo "max $max"

方法二:

#!/bin/bash
if [ $# -lt 2 ];then #對輸入數字數量進行檢測
    echo "type more than two numbers"
    exit 1
fi

small=$(echo $* |xargs -n1 |sort -n |head -n 1)  #進行數值排序
big=$(echo $* |xargs -n1 |sort -n |tail -n 1)
echo "Maximum number is $big"
echo "Minimum number is $small"

[root@localhost ~]# echo 1 -3 -99 46 7 32 43 2133 312 |xargs -n1 #以一數列進行顯示
1
-3
-99
46
7
32
43
2133
312

read 示例:

[root@centos6mini 3.19]# while read -p "type your name: " name ;do echo your is $n$name; done
type your name: zhangsan
your is zhangsan
type your name: lisi
your is lisi
type your name: wangwu
your is wangwu
type your name: ^C

[root@centos6mini 3.19]# read bing  test。txt
[root@centos6mini 3.19]# echo $bing  
hello

^C
[root@centos6mini 3.19]# while read name ; do echo $name ;done # 沒有指定輸入
123   #輸入
123   #輸出
qwe    #輸入
qwe   #輸出
asd   #輸入
asd   #輸出
zxc   #輸入
zxc   #輸出
^C^[[A^C
[root@centos6mini 3.19]# while read name ; do echo $name ;done 6  #name為變量,輸入來自文件文件內容讀取完了,循環停止
hello
qweqew
12341234
asdas
ads
sda
sad
asd
as
asd
as

read 示例:
顯示UID小于1000的為sys user,大于等于1000的為comm user。

[root@centos6mini 3.19]# cat linshi    
#!/bin/bash
while read usline ;do #通過read ,定義變量值usline
    usuid=$( echo $usline |cut -d: -f3 ) ,#引用變量usline ,并定義變量usuid
    usname=$( echo $usline |cut -d: -f1 ) #引用變量usline ,并定義變量usname
    #if [ $usuid -lt 1000 ];then  #進行判斷
    if (( $usuid  1000 )) ;then  #進行判斷(兩種方式均可以)
        echo "$usname is a sys user"
    else 
        echo "$usname is a comm user"
    fi

done  /etc/passwd #每次循環引用文件內容一行,進行操作,引用完了,循環停止。
[root@centos6mini 3.19]# ./linshi  
root is a sys user
bin is a sys user
daemon is a sys user
adm is a sys user
lp is a sys user
sync is a sys user
shutdown is a sys user
halt is a sys user
mail is a sys user
uucp is a sys user
operator is a sys user
games is a sys user
gopher is a sys user
ftp is a sys user
nobody is a sys user
vcsa is a sys user
saslauth is a sys user

找出分區利用率大于10%的分區,并發出警告/dev/sdaX will be full: 15%要求使用while read來實現

答案1:

#!/bin/bash
df |grep /dev/sd > /app/fenqu
while read line;do
    used=$(echo $line |tr -s " " % |cut -d% -f5)
    name=$(echo $line |cut -d" " -f1)
    if (( $used > 10 ));then
        echo "$name will be full:$used%"
    fi
done  /app/fenqu


[root@centos6mini 3.19]# df |grep /dev/sd >/app/zuoye/3.19/6
[root@centos6mini 3.19]# cat /app/zuoye/3.19/6
/dev/sda5   28564480 1872060 25234756 7% /
/dev/sda2   20511356 70276 19392504 1% /app
/dev/sda1    194241 31785  152216 18% /boot
[root@centos6mini 3.19]# while read line ;do
> used=$(echo $line |tr -s " " % |cut -d% -f5)
> name=$(echo $line |cut -d" " -f1)
> if (( $used > 10 ));then
> echo "$name will be full:$used%"
> fi
> done /app/zuoye/3.19/6
/dev/sda1 will be full:18%

答案2:

#!/bin/bash
> df_h
df -h | grep ^/dev/[sh]d* >> df_h
while read disk;do
  a=`echo $disk |grep -o "\[0-9]\{0,3\}%" | cut -d% -f1`
  b=`echo $disk |grep -o "^[^[:space:]]\+\&;"`
  if [ $a -gt 10 ];then
    echo "$b will be full: $a%"
  fi 
done  df_h

答案3:sed實現

#!/bin/bash
df |grep /dev/sd |while read disk;do
    diskused=$(echo $disk |sed -r 's/.* ([0-9]+)%.*/\1/')
    diskname=$(echo $disk |sed -r 's@(/dev/sd[[:lower:]][[:digit:]]).*@\1@')
    if (( $diskused > 10 ));then
        echo "$diskname will be full:$diskused%"
    fi
done

until循環

until CONDITION; do
循環體
done

進入條件: CONDITION 為false

退出條件: CONDITION 為true

循環控制語句continue
用于循環體中

continue [N]:提前結束第N層的本輪循環,而直接進入下一 輪判斷;最內層為第1層

while CONDTIITON1; do
      CMD1
       ...
       if CONDITION2; then
        continue
         fi
       CMDn

循環控制語句break

用于循環體中

break [N]:提前結束第N層循環,最內層為第1層

while CONDTIITON1; do 
  CMD1 
  ... 
  if CONDITION2; then 
      break 
  fi 
   CMDn
   ... 
done

循環控制shift命令

shift [n]

用于將參量列表 list 左移指定次數,缺省為左移一次。

參量列表 list 一旦被移動,最左端的那個參數就從列表中刪 除。while 循環遍歷位置參量列表時,常用到 shift

./doit.sh a b c d e f g h

./shfit.sh a b c d e f g h

特殊用法

1、while循環的特殊用法(遍歷文件的每一行):

while read line; do
        循環體
done /PATH/FROM/SOMEFILE

依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將 行賦值給變量line

2、雙小括號方法,即((…))格式,也可以用于算術運算

雙小括號方法也可以使bash Shell實現C語言風格的變量操作

I=10

((I++))

for循環的特殊格式: for ((控制變量初始化;條件判斷表達式;控制變量的修正表達 式))
do
循環體
done

控制變量初始化:僅在運行到循環代碼段時執行一次

控制變量的修正表達式:每輪循環結束會先進行控制變量修 正運算,而后再做條件判斷

select循環與菜單

select variable in list
    do
        循環體命令
    done

select 循環主要用于創建菜單,按數字順序排列的 菜單項將顯示在標準錯誤上,并顯示 PS3 提示符, 等待用戶輸入
用戶輸入菜單列表中的某個數字,執行相應的命令
用戶輸入被保存在內置變量 REPLY 中
select與case

select 是個無限循環,因此要記住用 break 命令退 出循環,或用 exit 命令終止腳本。也可以按 ctrl+c 退出循環
select 經常和 case 聯合使用
與 for 循環類似,可以省略 in list,此時使用位置 參量

信號捕捉trap

trap '觸發指令' 信號
            自定義進程收到系統發出的指定信號后,將執行觸發指令 ,而不會執行原操作
trap '' 信號
            忽略信號的操作
trap '-' 信號
            恢復原信號的操作
trap -p
            列出自定義信號操作

文件測試

-z string 測試指定字符是否為空,空著真,非空為假
-n string 測試指定字符串是否為不空,空為假 非空為真 -e FILE 測試文件是否存在 -f file 測試文件是否為普通文件 -d file 測試指定路徑是否為目錄
-r file 測試文件對當前用戶是否可讀
-w file 測試文件對當前用戶是否可寫
-x file 測試文件對當前用戶是都可執行
-z 是否為空 為空則為真 -a 是否不空
-u file :是否存在且擁有suid權限
-g file :是否存在且擁有sgid權限
-k file :是否存在且擁有sticky權限

[root@centos6mini 3.19]# [ -n "" ] echo true #空為假
[root@centos6mini 3.19]# [ -n "1" ] echo true #非空為真
true
[root@centos6mini 3.19]# [ -n " " ] echo true #非空為真
true
[root@centos6mini 3.19]# [ -n ] echo true #非空為真
true
[root@centos6mini 3.19]# [ -z ] echo true #空為真
true
[root@centos6mini 3.19]# [ -z "" ]echo true #空為真
true
[root@centos6mini 3.19]# [ -z "1" ] echo true "#非空為假
[root@centos6mini 3.19]# [ -z " " ] echo true #非空為假

掃描/etc/passwd文件每一行,如發現GECOS字段為空,則填充用戶名和單位電話為62985600,并提示該用戶的GECOS信息修改成功。

#!/bin/bash
cat /etc/passwd |while read userline;do #用管道實現給循環while賦值
    if [ -n "$(echo $userline |cut -d: -f5)" ];then  #-n "1" 非空為真
        continue   #為真時啥都不做
    else
        username=$(echo $userline|cut -d: -f1)
        usermod -c $username-62985600 $username
        echo $username\'s gecos already changed!
    fi
done

特殊用法

雙小括號方法,即((…))格式,也可以用于算術運算

雙小括號方法也可以使bash Shell實現C語言風格的變量操作

I=10

((I++))

for循環的特殊格式:

for ((控制變量初始化;條件判斷表達式;控制變量的修正表達 式))

do

循環體

done

控制變量初始化:僅在運行到循環代碼段時執行一次

控制變量的修正表達式:每輪循環結束會先進行控制變量修 正運算,而后再做條件判斷

練習:計算從1加到100的和。

#!/bin/bash
sum=0
for ((i=1;i=100;i++));do
    let sum+=i
done
echo sum=$sum
unset sum i
 
sum=0
i=1
while [ $i -le 100 ];do
    let sum+=i
    let i++
done
echo sum=$sum

select循環與菜單
select variable in list

do

循環體命令

done

select 循環主要用于創建菜單,按數字順序排列的 菜單項將顯示在標準錯誤上,并顯示 PS3 提示符, 等待用戶輸入

PS3="Please choose your menu: "

用戶輸入菜單列表中的某個數字,執行相應的命令

用戶輸入被保存在內置變量 REPLY 中

[root@centos6mini 3.19]# ./linshi   
1) huangmenji
2) huimian
3) hulatang
4) roujiamo
Please choose your menu: 1
The price is $15
Please choose your menu: 2
The price is $10
Please choose your menu: 3
The price is $8
Please choose your menu: 4
The price is $6
Please choose your menu: 5
get out

[root@centos6mini 3.19]# cat ./linshi  
#!/bin/bash

select menu in huangmenji huimian hulatang roujiamo;do 
    case $REPLY in
        1) echo "The price is \$15";;
        2) echo "The price is \$10";;
        3) echo "The price is \$8";;
        4) echo "The price is \$6";;
        *) echo "get out";break;;
    esac
done

信號捕捉trap

trap '觸發指令' 信號

自定義進程收到系統發出的指定信號后,將執行觸發指令 ,而不會執行原操作

trap '' 信號 忽略信號的操作

rap '-' 信號 恢復原信號的操作

trap -p 列出自定義信號操作

trap 所有可選項

[root@centos6mini 3.19]# trap -l 
 1) SIGHUP    2) SIGINT    3) SIGQUIT   4) SIGILL    5) SIGTRAP
 6) SIGABRT   7) SIGBUS    8) SIGFPE    9) SIGKILL   10) SIGUSR1
11) SIGSEGV   12) SIGUSR2   13) SIGPIPE   14) SIGALRM   15) SIGTERM
16) SIGSTKFLT  17) SIGCHLD   18) SIGCONT   19) SIGSTOP   20) SIGTSTP
21) SIGTTIN   22) SIGTTOU   23) SIGURG   24) SIGXCPU   25) SIGXFSZ
26) SIGVTALRM  27) SIGPROF   28) SIGWINCH  29) SIGIO    30) SIGPWR
31) SIGSYS   34) SIGRTMIN  35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

#!/bin/bash 
trap 'echo “signal:SIGINT"' int   # int 相當與Ctrl+c
trap -p 
for((i=0;i=10;i++)) 
do 
sleep 1
echo $i 
done
trap '' int #trap '' 信號 忽略信號的操作 
trap -p 
for((i=11;i=20;i++)
do 
sleep 1
echo $i 
done 
trap '-' int  #rap '-' 信號 恢復原信號的操作 
trap -p 
for((i=21;i=30;i++)
do 
sleep 1 
echo $i
done

忽略kill -15 ,操作可以成功

忽略kill -9操作 ,不成功,無法忽略kill -9

trap -l,把所有信號打印出來

查看kill -9 和kill -15 對應的信號選項

select與case

select 是個無限循環,因此要記住用 break 命令退 出循環,或用 exit 命令終止腳本。也可以按 ctrl+c 退出循環

select 經常和 case 聯合使用

與 for 循環類似,可以省略 in list,此時使用位置

您可能感興趣的文章:
  • shell中的for循環用法詳解
  • linux shell常用循環與判斷語句(for,while,until,if)使用方法
  • Shell腳本用for循環遍歷參數的方法技巧
  • shell for循環、循環變量值付給其他shell腳本的方法
  • 基于Shell中for循環的幾個常用寫法分享
  • Shell中的for和while循環詳細總結
  • Shell中的for循環總結
  • Shell中的循環語句for、while、until實例講解
  • Shell兩種for循環對應實現方法解析

標簽:西寧 武威 迪慶 安康 蚌埠 紹興 日喀則 麗江

巨人網絡通訊聲明:本文標題《linux shell循環:for、while、until用法詳解》,本文關鍵詞  linux,shell,循環,for,while,until,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《linux shell循環:for、while、until用法詳解》相關的同類信息!
  • 本頁收集關于linux shell循環:for、while、until用法詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日本va欧美va精品发布| 国产a级毛片一区| 欧美性生交片4| 波多野结衣在线一区| 韩国女主播一区| 五月天久久比比资源色| 国产精品久久久久久久久快鸭| 91福利视频网站| 欧美日韩美少妇| 日韩一区二区三| 制服丝袜亚洲网站| 日韩欧美一区在线观看| 精品乱码亚洲一区二区不卡| 91精品国产综合久久福利| 欧美伊人久久久久久久久影院| 91九色02白丝porn| 欧美午夜影院一区| 欧美日韩和欧美的一区二区| 日韩欧美成人午夜| 国产亚洲成年网址在线观看| 久久精子c满五个校花| 亚洲欧洲成人自拍| 欧美aaa在线| 国产成人三级在线观看| 成人国产亚洲欧美成人综合网| 欧美午夜精品久久久久久超碰| 69成人精品免费视频| 日韩一区二区三区免费看| 久久久影视传媒| 精品国精品国产尤物美女| 中文文精品字幕一区二区| 亚洲色欲色欲www| 婷婷夜色潮精品综合在线| 经典一区二区三区| 波多野结衣91| 制服丝袜亚洲播放| 久久久久久久av麻豆果冻| 国产日韩欧美a| 久久成人免费网站| 国产91露脸合集magnet | 国产亚洲成aⅴ人片在线观看| **性色生活片久久毛片| 国产成人av电影免费在线观看| 色哟哟日韩精品| 亚洲午夜影视影院在线观看| www.66久久| 亚洲精品videosex极品| 91在线精品一区二区| 日韩三级伦理片妻子的秘密按摩| 免费日本视频一区| 欧美大胆人体bbbb| 精品午夜一区二区三区在线观看| 国产a久久麻豆| 久久久久久影视| 91免费看`日韩一区二区| 在线不卡免费欧美| 日韩 欧美一区二区三区| 91影视在线播放| 亚洲精品一卡二卡| 欧美福利视频一区| 成人夜色视频网站在线观看| 自拍偷拍亚洲欧美日韩| 99re这里都是精品| 亚洲国产aⅴ天堂久久| 日韩欧美国产三级电影视频| 国产精品1024| 日韩电影免费一区| 国产日韩视频一区二区三区| 在线免费观看日韩欧美| 亚洲成人av资源| 6080yy午夜一二三区久久| 在线观看av不卡| 国产精品一区二区在线观看网站| 亚洲欧美电影院| 久久夜色精品国产噜噜av| 91免费小视频| 精品污污网站免费看| 91麻豆视频网站| 日本道精品一区二区三区| 99久久精品国产精品久久| 97se亚洲国产综合自在线不卡 | 国产精品不卡视频| 国产精品美女久久久久高潮| 2023国产精品视频| 正在播放亚洲一区| 久久亚洲私人国产精品va媚药| 日韩精品一区国产麻豆| 538prom精品视频线放| 欧美mv日韩mv| 久久久无码精品亚洲日韩按摩| 久久久精品蜜桃| 亚洲欧美国产毛片在线| 日韩精彩视频在线观看| 国产美女精品在线| 欧美综合在线视频| 精品国产乱码久久久久久老虎 | 九九**精品视频免费播放| 蜜桃视频一区二区三区 | 天天操天天干天天综合网| 国产中文字幕精品| 一本一道久久a久久精品 | 国产精品国产三级国产普通话蜜臀 | 欧美日韩精品一区二区天天拍小说 | 欧美精品一卡二卡| 中文字幕av在线一区二区三区| 18成人在线观看| 美女任你摸久久| 欧美性色欧美a在线播放| 91精品麻豆日日躁夜夜躁| 中文字幕佐山爱一区二区免费| 日韩精品免费专区| 9i看片成人免费高清| 久久久亚洲精品一区二区三区| 亚洲国产精品欧美一二99| 国产99久久久精品| 国产精品欧美经典| 99精品视频中文字幕| 亚洲欧洲精品一区二区三区| 国产精品一二三区在线| 日韩欧美在线不卡| 极品少妇一区二区三区精品视频| 日韩女优av电影在线观看| 日韩精品电影在线观看| 精品国产网站在线观看| 理论电影国产精品| 久久精品亚洲乱码伦伦中文 | 国产精品性做久久久久久| 日本一区二区三区电影| 色激情天天射综合网| 亚洲成人精品一区二区| 91精品国产综合久久精品性色| 久久福利视频一区二区| 精品日韩在线观看| www.亚洲精品| 无码av中文一区二区三区桃花岛| 欧美一区永久视频免费观看| 国产在线不卡一卡二卡三卡四卡| 国产精品青草久久| 日韩精品在线网站| 91色porny在线视频| 韩国一区二区视频| 亚洲激情图片一区| 国产精品你懂的在线| 欧美日韩亚洲国产综合| 99久久国产综合精品色伊| 婷婷久久综合九色综合绿巨人 | 色婷婷久久综合| 波多野结衣中文字幕一区二区三区 | 艳妇臀荡乳欲伦亚洲一区| 91久久精品网| 99天天综合性| 国产精品影视在线观看| 国产在线麻豆精品观看| 美日韩一区二区三区| 日韩中文字幕区一区有砖一区 | 粉嫩嫩av羞羞动漫久久久 | 国产福利视频一区二区三区| 亚洲高清视频在线| 亚洲一区二区三区影院| 欧美国产一区二区| 国产精品久久看| 一区二区三区蜜桃| 偷拍自拍另类欧美| 久久99精品一区二区三区| 国产麻豆一精品一av一免费| 韩国三级中文字幕hd久久精品| 免费高清在线一区| 福利电影一区二区| 色偷偷一区二区三区| 欧美理论电影在线| 久久久午夜精品| 一区二区三区**美女毛片| 日本午夜一本久久久综合| 免费人成在线不卡| 99久久免费视频.com| 一本色道久久加勒比精品| 这里只有精品99re| 国产亚洲成av人在线观看导航| 亚洲嫩草精品久久| 国产精品一区二区在线看| 欧洲视频一区二区| 久久久蜜桃精品| 午夜日韩在线电影| 99在线精品观看| 中文字幕乱码日本亚洲一区二区| 水野朝阳av一区二区三区| 丁香亚洲综合激情啪啪综合| 日韩午夜在线观看| 五月综合激情婷婷六月色窝| 韩国理伦片一区二区三区在线播放| 91美女福利视频| 亚洲欧美中日韩| 成人性生交大合| 国产午夜精品一区二区三区嫩草| 蜜桃精品在线观看| 欧美一区二区三级| 日本大胆欧美人术艺术动态| 欧洲在线/亚洲| 喷水一区二区三区| 久久婷婷国产综合精品青草|