美文网首页
shell脚本语法小记

shell脚本语法小记

作者: 凌福义 | 来源:发表于2019-05-14 20:24 被阅读0次

    • 1、变量:字符串、数字、环境变量和参数
    • 2、条件:shell中的布尔值
    • 3、程序控制:if、elif、for、while、until、case
    • 4、命令列表
    • 5、函数
    • 6、shell内置命令
    • 7、获取命令执行结果
    • 8、 here文档

    1、变量

    如果一个$变量表达式放在双引号""中,则程序执行到此处会替换成变量值,如果放在单引号'',则不会发生替换现象,如果加上转椅字符\,则会原文输出取消其特殊含义

    #!/bin/sh
    var ="hello"
    echo $val
    echo "$var"
    echo '$var'
    echo \$var
    echo enter some test
    read var
    echo '$var' now equals $var
    

    输出结果如下图所示

    ./bash.sh
    hello
    hello
    $var
    $var
    enter some test
    hello world
    $var now equals hello world
    

    1.2、环境变量


    $HOME:当前bash用户家目录
    $PATH:以冒号分隔用来搜索命令的目录列表
    $PS1:命令提示符,通常是字符,但在bash中可以使用更加复杂的值,比如字符串[\u@\h\W]就是一个流行的默认值,它给出了用户名、机器名以及当前目录名、也包括一个$字符

    $PS2:二级提示符,提示后续输入,通常为>字符
    $IFS:输入域分隔符,当shell提示输入时,给出用来分隔单词的一组字符
    $0:shell脚本名称
    $#:shell参数个数
    $$:shell脚本进程号,脚本程序通常用其生成一个临时唯一文件,比如/tmp/tmpfiles_$$
    $1,$2,$3:脚本第一个 第二个 第三个参数
    $*:脚本所有参数,使用IFS将其分隔,如果IFS为空,则参数会挤在一起
    $@:脚本所有参数,跟IFS无关(推荐使用)


    2、条件

    使用test或者[命令
    条件测试分为3类:

    • 字符串比较
    #字符串相同则结果为真
    string1 = string2      
    #字符串不同则结果为真
    string != string2     
    #字符串不为空则结果为真
    -n string                    
    #字符串为null则结果为真
    -z string                    
    
    • 算数比较
    #表达式结果相等则结果为真
    val1 -eq var2
    #表达式不相等则结果为真
    var1 -ne var2
    #var1 大于var2则结果为真
    var1 -gt var2
    #var1 大于或等于var2则结果为真
    var1 -ge var2
    #var1 小于var2则结果为真
    var1 -lt var2
    #var1 小于或等于var2则结果为真
    var1 -le var2
    #表达式为假则结果为真
    ! expression
    
    • 文件条件测试
    #文件为目录
    -d file
    #文件存在则结果为真
    -f file
    #文件group id为真
    -g file
    #文件的user id为真
    -u file
    #文件可读
    -r file
    #文件可写
    -w file
    #文件大小不为0
    -s file
    #文件可执行
    -x file
    

    3、控制结构

    • if语句
    if condition
    then
      statements
    else
    statements
    fi
    
    • for语句
      遍历输出a b c
    #!/bin/bash
    for val in a b c 
    do 
    echo $var
    done
    

    遍历输出/home下的所有.sh文件

    #!/bin/bash
    for file in $(ls /home/*.sh) 
    do 
    echo $file 
    done
    
    • while语句和until语句
    while condition
    do
    statements
    done
    ############
    until condition
    do 
    statements
    done
    
    • case语句
    #!/bin/bash
    #单一匹配case
    echo "please input yes or no'
    read var
    case "$var" in
    yes) echo "var is $var";;
    no) echo "var is $var";;
    y) echo "var is $var";;
    n) echo "var is $var";;
    esac
    
    ##合并匹配case
    case "$var" in
    yes | y | Yes | YES) echo "var is $var";;
    no |n | No | NO) echo "var is $var";;
    esac
    
    • AND列表
      statements1 && statements2 && statements3
      从左到右执行命令列表,只有前面命令执行成功才执行下一条命令
    if [ -f file1 ] && [ -f file2 ] && [ -f file3 ]
    then
    echo "file 1 2 3 is exist"
    fi
    
    • OR列表
      statements1 || statements2 || statements3
      从左到右执行命令列表,只要一条命令成功为止,其后命令不在执行
    if [ -f file1 ] || [ -f file2 ] || [ -f file3 ]
    then
    echo "file 1 2 3 someone is exist"
    fi
    

    4、函数

    基本shell函数如下:

    #!/bin/bash
    foo(){
    return 0
    }
    echo start
    foo
    echo end
    

    5、命令

    • break:跳出for while until循环
    • (:):空命令
    • continue命令:直接跳到for while until下一次循环开始地方执行
    • (.)命令:用于当前shell执行命令
    • echo命令:shell的printf命令 ;echo -e去掉换行符
    • eval命令:对参数进行求值
    • exec命令:将当前shell替换成其他命令,且exec后续命令不再执行
    • exit n命令:退出脚本程序以退出码n结束运行
    • export命令:导出参数到子shell中,并使之咋子shell有效
    • expr命令:将命令作为表达式求值,较新的shell使用$((....))
    x =`expr $x+1` 
    

    相关文章

      网友评论

          本文标题:shell脚本语法小记

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