zoukankan      html  css  js  c++  java
  • for循环的基础使用

    for循环:
       for 变量名 in 列表;do
              循环体
       done
       执行机制:
              依次将列表中的元素赋值给“变量名”;每次赋值后即执行一次循环体;直到列表中的元素耗尽循环结束
     
    添加10个用户,user1 user2 user3 user4 ...密码同用户名
    #!/bin/bash
    if [ ! $UID -eq 0 ];then
       echo "only root"
       exit1
    fi
    for i in {1..10};do
        if id user$i &> /dev/null;
        else
            useradd user$i
        if [ $? -eq 0 ];then
            echo "user$i"|passwd --stdin user$i &> /dev/null
                 echo "Add user$i finished."
            fi
        fi
    done
     
     这里需要使用到seq命令:
    例:打印1-10的奇数
    [root@station40 ~]# seq 1 2 10              
    1
    3
    5
    7
    9
     
     例:打印1-10
    [root@station40 ~]# seq 1  10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    列表生成方法
    (1)直接给出列表 
    (2)整数列表
           (a){start..end}
             (b)$(seq [start [step]] end)
     (3)返回列表的命令;
             $(COMMAND)
    例:判断var目录下哪些是文件哪些是目录哪些是链接文件    
    #!/bin/bash
        #
         for file in $(ls /var); do
               if [ -f  /var/$file ]; then  给出绝对路径
               echo "command file"   
               elif [ -L /var/$file ];then
               echo "symbolic file"
               echo [ -d /var/$file ];then
               echo "directory"
               else
               echo "other type"
               fi
     done
     
    现在我们打开netstat -tan 查看端口的有哪些状态
    [root@station40 ~]# netstat -tan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address             State     
    tcp        0      0 0.0.0.0:22                  0.0.0.0:*                                            LISTEN     
    tcp        0      0 127.0.0.1:25                0.0.0.0:*                                          LISTEN     
    tcp        0     52 172.16.251.40:22            172.16.252.158:2297                ESTABLISHED
    tcp        0      0 :::22                       :::*                                                         LISTEN     
    tcp        0      0 ::1:25                      :::*                                                        LISTEN     
     
    现在需要统计这几种状态各有出现的次数
     
    例:
    #!/bin/bash
    #
    declare -i estab=0
    declare -i estab=0
    declare -i estab=0
     
    for state in $( netstat -tan | grep "^tcp>" | awk '{print $NF}');do
        if [ "$state" == 'ESTABLISHED' ]; then
        let estab++
        elif [ "$state" == 'LISTEN' ];then
        let listen++
        else
        let other++
        fi
     done
     echo "ESTABLISHED:$estab"
     echo "LISTEN:$listen"
     echo "Unkown:$other"
     
    for ..do ..done 数值处理
     
    for ((初始值;限制值;执行步长))
     
    初始值:某个变量在循环当中的初始值,直接以类似i=1设置好;
    限制值:当变量的值在这和限制的范围内,就连续进行循环,例如i<=1;
    执行步长:每做一次循环时变量的变化量。例如i=i+1
    计算1+2+3+4...+n的值
    [root@localhost ~]# vim nn
     
    #!/bin/bash
    read -p "please input anumber: " nu
    s=0
    for (( i=1; i<=$nu; i=i+1 ))
     
    do
      s=$(($s+$i))
    done
    echo $s
     
    在编辑脚本的过程中最怕的就是出现语法错误,同时bash中的相关参数是可以在脚本编辑完成后可以不执行脚本的情况下进行测试;
     
    [root@localhost ~]# sh [-nvx] scripts.sh
    参数:
    -n : 不要执行scripts,仅查询语法问题
    -v : 在执行scripts前,先将scripts的内容输出到屏幕上;
    -x : 将使用到的scripts内容显示到屏幕上
     
    例:ping192.168.1.1~192.168.100.100的网络状态
    [root@localhost Script]# cat for1.sh
    #!bin/bash
     
     
    network="172.16"
     
    for sitenu in $(seq 1 100)
      do
        ping -c 1 -w ${network}.${sitenu}.${sitenu} &> /dev/null && result=0 || result=1
      if [ "$result" == 0 ];then
        echo "server ${network}.${sitenu}.${sitenu} is up"
      else
        echo "server ${network}.${sitenu}.${sitenu} is down"
      fi
    done
     
     
    例:
     1.请新建一个script,当执行script的时候,该script可以显示你目前的身份(shoami)和你目前所在的目录(用pwd)
    #!bin/bash
     
    k=$(pwd)
    w=$(whoami)
    echo "the system root is:$k"
    echo "the system directories is $w"
     
     
    例:让用户输入一个数字,程序可以由1+2+3+...一直累加到用户输入的数值为止
     
    [root@localhost Script]# cat for3.sh
    #!bin/bash
    s=0
    i=0
    read -p "please input numble: " n
    while [ "$i" != "$n" ]
     do
        i=$((i+1))
        s=$(($s+$i))
     done
    echo "$s"
     
    #!bin/bash
    s=0
    read -p "please input a numble: " n
    for (( i=1; i<=$n; i=i+1 ))
     do
        s=$(($i+$s))
     done
    echo $s
     
    例.编写一个脚本,它的作用是先查看一下/root/test/logical 这个名称是否存在,若不存在,则创建一个文件,
    使用touch来创建,创建完成后离开;如果存在的话,判断该名称是否为文件,若为文件则将之删除后新建一个
    目录,文件名为logical,之后离开;如果存在的话,而且该名称目录,则删除此目录!
     
    #bin/bash
     
    file="/root/test/ll"
    file1="/root/test"
    rm="rm -rf /root/test/ll"
    if [ ! -d "$file1" ];then
      mkdir $file1
    fi
     
    if [ ! -f "$file" ];then
      touch $file
    else
        $rm
    fi
  • 相关阅读:
    20169204,EXP 3:Java object
    20169204,EXP 2:Java object
    20169204,exp1:Familiar with the Java development environment(Linux+IDEA)
    20169204 2016-2017-2 <Mobbile Platform Development and Practice> Learning Summary, Seventh Week
    第一次使用MarkDown写博客
    理解IOC
    .net与技术经理面谈时经常被提问到的相关技术点
    缓存二、HttpRuntime.Cache用法
    缓存一、Asp.net页面缓存
    一次提交涉及两个数据库处理
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/6827042.html
Copyright © 2011-2022 走看看