zoukankan      html  css  js  c++  java
  • 【shell 判断循环语句 02】

    一、流程控制

    1、if判断

    1.基本语法
    if [ 条件判断式 ];then 
      程序 
    fi 
    或者 
    if [ 条件判断式 ] 
      then 
        程序 
    fi

    注意:

    if后面要有空格

    条件判断语句和中括号之间要有空格

    举例:输入一个数字,如果是1,返回“testing...” 如果是2,返回“TESTING...” 如果是3,不返回结果

    [root@localhost data]# cat if.sh 
    #!/bin/bash
    
    if [ $1 -eq "1" ]
    then
        echo "testing..."
    elif [ $1 -eq "2" ]
    then
        echo "TESTING..."
    fi
    [root@localhost data]# sh if.sh 1
    testing...
    [root@localhost data]# sh if.sh 2
    TESTING...
    [root@localhost data]# sh if.sh 3

    备注:$1 -eq "1"   -->  $1:第一个数字,-eq:判断是否相等

    2、case语句

    case $变量名 in 
      "值1") 
        如果变量的值等于值1,则执行程序1 
        ;; 
      "值2") 
        如果变量的值等于值2,则执行程序2 
        ;; 
      …省略其他分支… 
      *) 
        如果变量的值都不是以上的值,则执行此程序 
        ;; 
    esac

    注意:

    1)case行尾必须为单词“in”,每一个模式匹配必须已右括号结束

    2);; 表示命令结束,相当于Java的break

    3)最后的 *) 表示默认模式,相当于Java中的default

    举例:输入数字1,返回“zly” 输入2,返回“cjk” 输入3,返回“mxt”

    [root@localhost data]# cat case.sh 
    #!/bin/bash
    
    case $1 in
    "1")
        echo "zly"
    ;;
    "2")
        echo "cjk"
    ;;
    *)
        echo "mxt"
    ;;
    esac
        
    
    [root@localhost data]# sh case.sh 1
    zly
    [root@localhost data]# sh case.sh 2
    cjk
    [root@localhost data]# sh case.sh 4
    mxt
    [root@localhost data]# 

    3、for循环

    基本语法1:

    for (( 初始值;循环控制条件;变量变化 )) 
      do 
        程序 
      done

    注意:for后面是双层小括号; do...done相当于Java的{}

    举例:1~100的和

    [root@localhost data]# cat for.sh 
    #!/bin/bash
    
    sum=0
    for((i=0;i<=100;i++))
    do
        sum=$[ $sum+$i ]
    done
    
    echo $sum
    [root@localhost data]# sh for.sh 
    5050

    基本语法2:

    for 变量 in 值1 值2 值3… 
      do 
        程序 
      done

    举例:打印所有输入的参数

    [root@localhost data]# cat for.sh 
    #!/bin/bash
    
    sum=0
    for((i=0;i<=100;i++))
    do
        sum=$[ $sum+$i ]
    done
    
    echo $sum
    
    for i in "$*"
    do
        echo "zly $i"
    done
    
    for i in "$@"
    do
        echo "ym $i"
    done
        
    [root@localhost data]# sh for.sh cls xz bd
    5050
    zly cls xz bd
    ym cls
    ym xz
    ym bd

    注意:$*  和$@都是输出所有内容,如果两个都不加双引号,则输出的是$1,$2,$3...这样的内容,如果加了双引号,$*会按照一个整体输出($1......$3)$@任然会按照$1,$2,$3...这样分开输出

    4、while循环

     基本语法

    while [ 条件判断式 ] 
      do 
        程序
      done

    注意:while和[之间有空格,[和条件判断式之间也有空格

    举例:1~100相加

    [root@localhost data]# cat while.sh 
    #!/bin/bash
    
    sum=0
    i=1
    while [ $i -le 100 ]
    do
        sum=$[$sum+$i]
        i=$[$i+1]
    done
    
    echo $sum
    [root@localhost data]# sh while.sh 
    5050

    备注:-le  小于等于的意思 

    二、read读取控制台的输入

    基本语法:

    read(选项)(参数)

    选项:

    -p  指定读取值时的提示符

    -t  指定读取时等待的时间(s)

    参数:

    变量:指定读取值的变量名

    举例:提示7秒内,读取控制台输入的名字

     

     三、函数

    1、系统函数

    basename[string/pathname][suffix]   删除所有路径,只保留文件

    [root@localhost data]# basename /home/data/helloword.sh 
    helloword.sh

    dirname 去除文件名,只保留路径

    [root@localhost data]# dirname /home/data/helloword.sh 
    /home/data

    2、自定义函数

    语法:

    [ function ] funname[()]
    {
            Action;
            [return int;]
    
    }
    
    funname

    方括号括起来的是非必要填的

    注意点:

    1、必须在函数调用之前先声明函数,shell脚本时逐行运行的,并且不需要编译,直接运行

    2、函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将已最后一条命令运行结果,作为返回值,return后跟数值n(0~255)

    举例:

    [root@localhost data]# cat sum.sh 
    #!/bin/bash
    function sum()
    {
        s=0
        s=$[ $1 + $2 ]
        echo "$s"
        
    }
    
    read -p "Please input first num:" n1;
    read -p "Please input secoune num:" n2;
    
    sum $n1 $n2;
    [root@localhost data]# sh sum.sh 
    Please input first num:1
    Please input secoune num:5
    6
  • 相关阅读:
    实测好用的awvs批量添加任务脚本
    SQL注入漏洞
    CTF-WEB-信息泄露题目总结
    Awvs+nessus docker版本
    禅道12.4.2后台管理员权限Getshell复现
    子域名工具,使用必应搜索引擎
    i春秋第二届春秋欢乐赛-Web-Hello World
    百度杯CTF比赛 九月场-WEB-题目名称:SQL
    文件上传漏洞
    CVE-2019-17625漏洞复现(Rambox 0.6.9版本存储型XSS)
  • 原文地址:https://www.cnblogs.com/frankruby/p/14361428.html
Copyright © 2011-2022 走看看