• 4.流程控制&read&函数


    if

    语法

    方式一

    if [ 条件判断式 ];then
    ​ 满足条件做的事情
    fi

    方式二

    if [ 条件判断式 ]
    then
    满足条件做的事情
    fi

    注意事项:

    • [ 条件判断式 ],中括号和条件判断式之间必须有空格
    • if后要有空格

    Demo

    #!/bin/bash
    #输入一个值(read为控制台输入命令,执行脚本后会等待输入)
    read index
    #判断
    if [ $index = 'a' ];then
        echo "输入的为A:"$index
    elif [ $index = 'b' ]
    then
        echo "输入的为B:"$index
    fi
    

    case

    语法

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

    注意事项:

    • case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
    • 双分号“;;”表示命令序列结束,相当于java中的break。
    • 最后的“*)”表示默认模式,相当于java中的default。

    Demo

    #!/bin/bash
    read index
    
    case $index in
            "a")
                    echo "输入的为A:"$index
            ;;
            "b")
                    echo "输入的为B:"$index
            ;;
            *)
            echo "都没匹配上,输入的是"$index
            ;;
    esac
    

    for

    语法

    方式一

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

    方式二

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

    Demo

    #方式一
    #!/bin/bash
    count=0;
    for((i=0;i<10;i++))
            do
                    count=$[$count+1]
                    echo "本次循环值:"$count       
    done
    echo $count
    #***************************
    #方式二(01) 依次打印 a b c 
    #!/bin/bash
    for i in a b c
            do
                    echo $i
    done
    #方式二(02) 依次打印 a b c 
    #!/bin/bash
    arr="a b c"
    for i in $arr
            do
                    echo $i
    done
    

    $*与$@区别

    #  $* 和 $@ 不加引号时,两者一样
    #  $* 和 $@ 加引号时,"$*"会把所有参数当作一个字符串输出,"$@"仍会拆分成数组后循环
    for i in "$*"
            do
                    echo $i
    done
    echo "============="
    for i in "$@"
            do
                    echo $i
    done
    

    while

    语法

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

    Demo

    i=0
    while [ $i -lt 10 ]
            do
            echo "循环第"$i"次" 
            i=$[$i + 1]
            done
    
    echo "跳出while,值为:"$i
    

    read

    语法

    read(选项)(参数)

    选项:

    • p:指定读取值时的提示符;
    • t:指定读取值时等待的时间(秒)。

    参数
    ​ 变量:指定读取值的变量名

    Demo

    #2秒钟未输入自动结束
    #!/bin/bash
    read -p  "请输入" -t 2 inputval
    echo "--"$inputval"--"
    if [  $inputval ]
     then
            echo "输入值为:"$inputval
    fi
    if [ ! $inputval ];then
            echo "超时未输入" 
    fi
    
    

    函数

    basename

    语法

    basename [string / pathname] [suffix]
    #basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来
    #suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
    

    Demo

    basename /application/shell/parameter.sh
    #会输出 parameter.sh
    basename /application/shell/parameter.sh .sh
    #会输出 parameter
    

    dirname

    语法

    dirname 文件绝对路径
    #从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
    

    Demo

    dirname /application/shell/parameter.sh
    #会输出 /application/shell
    

    自定义函数

    语法

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

    • 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
    • 函数返回值,只能通过$?系统变量获得,可以显示加return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)

    Demo

    #!/bin/bash
    function sum()
    {
        val=$[ $1 + $2 ]
        echo "输入两数字之和为:"$val
    }
    
    read -p "输入第一个数字: " n1;
    read -p "输入第二个数字: " n2;
    sum $n1 $n2;
    
    
  • 相关阅读:
    beta版本冲刺七
    beta版本冲刺六
    beta版本冲刺五
    beta版本冲刺四
    beta版本冲刺三
    Beta版本冲刺(二)
    项目评测
    beta版本冲刺(一)
    福大软工 · 最终作业
    福大软工 · 第十二次作业
  • 原文地址:https://www.cnblogs.com/rb2010/p/16062644.html
Copyright © 2020-2023  润新知