• shell 的语法


    SHELL 的语法

    n  变量:字符串,数字,环境和参数

    n  条件:shell中的布尔值

    n  程序控制:if, elif, for, while until, case

    n  命令列表

    n  函数

    n  shell 内置命令

    n  获取命令执行结果

    n  here文档

    变量

    变量不需要事先为它声明。默认情况下所有的变量都被看作字符串来存储。

    区分大小写

    名字前加$字符提取变量

    如果字符串包含空格,必须用引号把他们括起来。等号两边不能有空格。

    可以用read命令将用户的输入赋给一个变量。

    使用引号

    脚本参数以空白符分隔(空格,制表,换行)。如果参数中有空白符,必须加上引号

    如果$变量在双引号中,会取其值。如果单引号不会发生替换。

    环境变量
    $HOME, $PATH $PS1 命令提示符,通常是$. $PS2,二级提示符通常是>字符。 $IFS 输入域分隔符。 $S0 脚本的名字。$#传递给脚本的参数个数。 $$脚本的进程号

    参数变量

    $1,$2,... 脚本程序的参数

    $* 所有参数,用IFS分隔。 $@, 一中变体,不使用IFS分隔

    条件 test 或 [

    if test -f fred.c

    then

    ...

    fi

    if [ -f red.c]

    then

    ...

    fi

    字符串比较

    string1 = string2

    string1 != string2

    -n string 如果字符串不为空则结果为真

    -z string 如果字符串为null 则结果为真

    算术比较

    expression1 -eq expression2 相等

    expression1 -ne expression2

    expression1 -gt expression2 大于

    expression1 -ge expression2 大于等于

     expression1 -lt expression2 小于

    expression1 -le expression2 小于等于

    !expression 取反

    文件测试

    -d file 文件是目录为真

    -e file 文件存在 通常使用-f

    -f file 普通文件

    -g file set-group-id 被设置

    -r file 可读

    -s file 大小不为0

    -u file set-user-id 被设置

    -w file 可写

    -x file 可执行

    控制结构

    if 语境

    if condition

    then

             satements

    else

             statements

    fi

    if condition

    then

             satements

    else

             statements

    elif condition; then

             statements

    then

             statements

    fi

    For 语句

    for variable in values

    do

             statements

    done

    for与通配符联合使用

    for file in $(ls f*.sh); do

             lpr $file

    done

    请记住,shell脚本程序中所有的变量扩展都是在脚本程序执行时被执行的,而不是在编写时完成对。所以变量中的语法错误只有在执行时才会被发现。

    while 语句

    while condition do

             statements

    done

    whle ["$trythis" != "secret" ]; do

             echo "sorry, try again"

             read trythis

    done

    until 语句

    until condition

    do

             statements

    done

    until who | grep "$1" > /dev/null

    do

             sleep 60

    done

    你设置一个报警,当某个特定用户登录,该报警就会启动。

    case 语句

    case variable in

             patten [ | patten] ...) statements;;

             patten [ | patten] ...) statements;;

    ...

    esac

    #! /bin/sh

    echo "Is it morning? Please answer yes or no"

    read timeofday

    case "$timeofday" in

             yes ) echo "Good morning";;

             no ) echo "Good Afternoon";;

             * ) echo "Sorry, answer not recognized";;

    esac

    exit 0

    case "$timeofday" in

             yes | y | YES | Yes ) echo "Good morning";;

             no | n* | N* ) echo "Good Afternoon";;

             * ) echo "Sorry, answer not recognized";;

    esac

    And 列表

    statement1 && statement2 && statement3&& ...

    Or 列表

    statement1 || statement2 || statement3 || ...

    语句块

    {}

    函数

    function_name(){

             statements

    }

    命令

    break;

    : 空命令。偶尔被用于简化条件逻辑,相当于true的一个别名。while : 无限循环

    也会用于条件设置中 : ${var := value}

    continue

    (.)命令用于在当前shell 中执行命令

    . ./shell_script

    eval 命令 运行你对参数进行求值

    exec 命令 有两种不同的用法,典型的用法是将当前shell替换为一个不同的程序。

    exec wall "Thanks for all the fish"

    exec 第二种用法,修改当前文件描述符

    exec 3 < afile。 使文件描述符3被打开,以便从afile 读取数据

    exit n

       126 文件不可执行

       127 命令未找到

       128 以上 出现一个信号。

    export 命令

    export 将作为它的参数的变量到处到子shell中。 并使之在子shell中有效。默认情况下在shell中创建的变量在这个shell调用的下级(子)shell中是不可用的。

    set -a 或 set -allexport 命令将导出它之后声明的所有变量。

    expr命令

    将它的参数当作一个表达式求值。

    x = 'expr $x + 1'

    x = $(expr $x + 1)

    表达式求值

    expr1 | expr2 expr1非0 则等于expr1 ,否则expr2

    expr1 & expr2 有一个表达式为0则0,否则等于expr1

    expr1 = expr2 等于

    expr1 > expr2 大于

    >  >=  <  <=  !=  +  -  *  /  %

    Set 命令 为shell设置参数变量

    Shift 命令 把所有参数变量左移一个位置

    trap 命令 指定接收到信号后将要采取的行动。

    unset 命令, 从环境中删除变量或函数

    find grep

  • 相关阅读:
    详解prototype、proto和constructor的关系
    BFC
    transition(动画属性)
    React组件生命周期
    正则限制input只能输入大于0的数字
    msbuild编译
    python 在头文件添加 #include "stdafx.h"
    2017年感想
    chVsprintf
    富文本测试
  • 原文地址:https://www.cnblogs.com/zhoug2020/p/5877556.html
Copyright © 2020-2023  润新知