美文网首页
shell script语法基础

shell script语法基础

作者: begonia_rich | 来源:发表于2018-08-02 01:33 被阅读12次

    记录基础语法格式以及举例

    #!/bin/bash

    声明script使用bash名称

    $((计算式))

    可以用这种格式进行计算式

    script执行方式的区别
    1直接执行:在子进程执行,变量等执行完毕即结束
    2通过source执行:在父进程中执行,定义的变量依然可用

    && 与 ||

    cmd1 && cmd2 cmd1返回结果为真,cmd2才执行
    cmd1 || cmd2 cmd1返回结果为假,cmd2才执行

    判断符号[]

    [口”$HOME”口==口”/root"口]
    口代表空格,注意四个空格位置,必须严格遵守语法
    注意内部的变量和常亮都需要用””引起来,因为被替换之后可能有问题

    script的默认变量
    $0:执行脚本的文件名
    $#:全部参数个数
    $@:全部参数,空格分开
    $1,$2…:第一个参数/第二个参数

    条件判断式if…then

    if [条件判断式]; then
        执行语句
    elif [条件判断式]; then
        执行语句
    else
        执行语句
    fi
    

    case条件判断

    case $变量名称 in
        “case1” )
            执行语句
            ;;
        “case2” )
            执行语句
            ;;
        *)
            兜底执行
            ;;
    esac
    

    函数function

    函数内的参数是通过1,2来取得,也就是函数内是取不到脚本的参数的

    function fname(){
        echo “first param is $1"
    }
    

    while和until 条件循环

    while [条件]
    do
        执行语句
    done
    

    满足条件就循环

    until [条件]
    do
        执行语句
    done
    

    不满足条件就循环

    for循环

    for..in循环

    for var in $(seq 1 10)
    do
        执行语句
    done
    

    for…do…done数值处理

    for ((i=0;i<10;i++)
    do
        执行语句
    done
    

    追踪与调试

    sh [-nvx] scripts.sh
    -n:不执行,仅检查语法问题
    -v:执行前将内容输出到屏幕
    -x:将使用到的script内容输出到屏幕,调试时这是很有价值的信息

    举例:sh -n scripts.sh(检查语法通过则无任何内容输出), sh -x scripts.sh(将使用的每一步scripts内容输出到屏幕,这是很有价值的信息哦)

    条件测试附录(常用的参数有:-e(文件存在),-f(存在且为文件),-d(存在且为目录),-a(等价&&),-o(等价||),!(等价非))

    条件测试附录1 条件测试附录2 条件测试附录3

    简单的demo附录

    if

    yn="$1"
    
    if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then
        echo 'OK continue.'
        exit 0
    elif [ "$yn" == "n" ] || [ "$yn" == "N" ]; then
        echo 'oh interrupt'
        exit 0
    else
        echo "I don't know what you fuck say"
    fi
    

    参数

    #!/bin/bash
    
    echo -e 'script name $0:'$0
    echo -e 'total script parameter $#:'$#
    [ "$#" -lt 2 ] && echo 'total less than 2' && exit 0
    echo 'whole parameter $@:'$@
    echo 'first parameter $1:'$1
    echo 'second parameter $2:'$2
    

    case

    case $1 in
        "hi" )
            echo "fucking hi?"
            ;;
        "" )
            echo "must input fucking what!"
            ;;
        * )
            echo "what you fucking say : $1"
            ;;
    esac
    

    while,until

    # -a == && , -o == ||
    
    while [ "$yn" != "yes" -a "$yn" != "YES" ]
    do
        read -p 'please input yes to exit while training:' yn
    done
    echo "OK exit while training..."
    
    until [ "$yna" == "yes" ] || [ "$yna" == "YES" ]
    do
        read -p 'please input yes to exit until training:' yna
    done
    echo "OK exit until training..."
    

    for

    user=$(cut -d ":" -f 1 /etc/passwd)
    for var in $user
    do
        echo "name:$var"
    done
    
    for var in $(seq 1 10)
    do
        echo "seq:$var"
    done
    
    s=0
    for ((i=0;i<5;i++))
    do
        s=$(($s+$i))
    done
    echo "s:$s"
    

    相关文章

      网友评论

          本文标题:shell script语法基础

          本文链接:https://www.haomeiwen.com/subject/kwwdvftx.html