IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    shell脚本的while/for循环

    一根稻草发表于 2013-12-31 00:00:00
    love 0

    任务:写一个shell脚本,调用nmap命令,实现对一个主机的循环扫描。

    问题:shell脚本中如何使用while , for循环

    一、使用while循环实现

    #!/bin/sh
    n=1
    while [$n -le 10 ]
    do 
        nmap -A -v 192.168.0.1
        let n+= 1
    done
    
    echo "scan done at".`date`

    1、比较语句

    -le less equal小于等于
    -lt less than小于
    -gt greater than大于
    -ge greater equal大于等于
    

    k=1 while [ $k -le 10 ]

    可以循环10次

    2、赋值语句

    1).let

    let k+=1 let k-=1

    2).expr k=expr $k + 1 k=expr $k – 1

    注意“是Tab键上面的反引号,作用是获得引号内的语句在终端的执行结果。

    3).1对方括号[]

    k=$[$k+1]

    等号两边不能有任何空格

    4).两对圆括号()

    k=$(($k+1))

    等号两边不能有任何空格

    3、由于缺少空格引起的问题

    1).如果第5行写成 while [$n -le 10 ] ‘[' 和 $n之间没有空格 提示错误:./loopscan.sh: 行 5: [1: 未找到命令

    2).如果第5行写成 while [ $n -le 10 ] ‘]和 10 之间没有空格 提示错误./loopscan.sh: 第 5 行: [: 缺少 `]‘

    3).如果$k、1和减号之间没有空格 k=’10-1′

    可以在终端尝试 k=10 expr $k-1

    使用man expr查看expr用法

    二、使用for循环实现

    1、两对圆括号

    for((k=1;k<=10;k++)) do echo $k done

    2、seq

    for k in $(seq 10) do echo $k done

    seq是一个bash命令,可在终端用man seq查询用法

    seq生成一个序列,用法如下

    1).当后面只跟一个整数时,默认起始值为1, 步幅间隔为1

    如seq 10生成一个1-10的数列

    2).指定序列的初始值

    seq 5 10生成一个5,6,7,8,9,10的数列

    3).指定序列的间隔

    seq 10 5 50生成一个5,15,20,…,50的序列

    4).可以负数,可以逆序

    seq 10 -2 -10生成10,8,6,…,-6,-8,-10的序列



沪ICP备19023445号-2号
友情链接