zoukankan      html  css  js  c++  java
  • shell编程基础

    shell逻辑判断

    (1)字符串操作符 用于计算字符串表达式
    test命令 | 含义
    -----------------------------------------
    Str1 = str2 | 当str1与str2相同时,返回True
    Str1! = str2| 当str1与str2不同时,返回True
    Str | 当str不是空字符时,返回True
    -n str | 当str的长度大于0时,返回True
    -z str | 当str的长度是0时,返回True
    -----------------------------------------
    (2)整数操作符具有和字符操作符类似的功能.只是他们的操作是针对整数
    test表达式 | 含义
    ---------------------------------------------
    Int1 -eq int2|当int1等于int2时,返回True
    Int1 -ge int2|当int1大于/等于int2时,返回True
    Int1 -le int2|当int1小于/等于int2时,返回True
    Int1 -gt int2|当int1大于int2时,返回True
    Int1 -ne int2|当int1不等于int2时,返回True
    -----------------------------------------
    (3)用于文件操作的操作符,他们能检查:文件是否存在,文件类型等
    test表达式 | 含义
    ------------------------------------------------
    -d file |当file是一个目录时,返回 True
    -f file |当file是一个普通文件时,返回 True
    -r file |当file是一个刻读文件时,返回 True
    -s file |当file文件长度大于0时,返回 True
    -w file |当file是一个可写文件时,返回 True
    -x file |当file是一个可执行文件时,返回 True
    ------------------------------------------------
    (4)shell的逻辑操作符用于修饰/连接包含整数,字符串,文件操作符的表达式
    test表达式 | 含义
    ----------------------------------------------------------
    ! expr |当expr的值是False时,返回True
    Expr1 -a expr2|当expr1,expr2值同为True时,返回True
    Expr1 -o expr2|当expr1,expr2的值至少有一个为True时,返回True
    -----------------------------------------------------------
    注意:
    tcsh shell 不使用test命令,但是tcsh中的表达式同样能承担相同的功能.tcsh
    支持的表达式于C中的表达式相同.通常使用在if和while命令中.
    tcsh表达式 | 含义
    -------------------------------------------------------
    Int1 <= int2 |当int1小于/等于int2时,返回True
    Int1 >= int2 |当int1大于/等于int2时,返回True
    Int1 < int2 |当int1小于int2时,返回True
    Int1 > int2 |当int1大于int2时,返回True
    Str1 == str2 |当str1与str2相同时,返回True
    Str1 != str2 |当str1与str2不同时,返回True
    -r file |当file是一个可读文件时,返回True
    -w file |当file是一个可写文件时,返回True
    -x file |当file是一个可执行文件时,返回True
    -e file |当file存在时,返回True
    -o file |当file文件的所有者是当前用户时,返回True
    -z file |当file长度为0时,返回True
    -f file |当file是一个普通文件时,返回True
    -d file |当file是一个目录时,返回True
    Exp1 || exp2 |当exp1和exp2的值至少一个为True时,返回True
    Exp1 && exp2 |当exp1和exp2的值同为True时,返回True
    ! exp |当exp的值为False时,返回True


    内置变量
    1.$BASH Bash的二进制程序文件的路径(脚本解释器的路径)
    2.$FUNCNAME 当前函数的名字
    3.$IFS 内部域分隔符,这个变量用来决定 Bash 在解释字符串时如何识别域,或者单词边界。$IFS默认为空白(空格,制表符,和换行符),但这是可以修改的,比如,在分析逗号分隔的数据文件时,就可以设置为逗号,注意 $* 使用的是保存在$IFS中的第一个字符。
    4.$REPLY 当没有参数变量提供给 read 命令的时候,这个变量会作为默认变量提供给 read 命令。也可以用于 select 菜单,但是只提供所选择变量的编号,而不是变量本身的值。在个别版本的bash中,并不支持内置变量$REPLY。
    5.通过$*和$@列出所有的参数
    "$*" 所有的位置参数都被看作为一个单词。
    $@与 $* 相同,但是每个参数都是一个独立的引用字符串,这就意味着,参数是被完整
    传递的,并没有被解释或扩展。这也意味着,参数列表中每个参数都被看作为单独的单词。
    操作字符串
    ${#parameter} 输出变量长度
    ${parameter-default} 如果变量 parameter 没被声明,那么就使用默认值。
    ${parameter:-default} 如果变量 parameter 没被设置,那么就使用默认值。
    ${parameter=default} 如果变量parameter没声明,那么就把它的值设为default。
    ${parameter:=default} 如果变量parameter没设置,那么就把它的值设为default。
    ${parameter+alt_value} 如果变量parameter被声明了,那么就使用alt_value,否则就使用null字符串。
    ${parameter:+alt_value} 如果变量parameter被设置了,那么就使用alt_value,否则就使用null字符串。
    ${parameter?err_msg} 如果parameter已经被声明,那么就使用设置的值,否则打印err_msg错误消息。
    ${parameter:?err_msg} 如果parameter已经被设置,那么就使用设置的值,否则打印err_msg错误消息。
    ${var:pos} 变量var从位置pos开始扩展, 也就是pos之前的字符都丢弃。
    ${var:pos:len} 变量var从位置pos开始,并扩展len个字符。
    ${var/Pattern/Replacement} 使用Replacement来替换变量var中第一个匹配Pattern的字符串。
    ${var//Pattern/Replacement} 全局替换。所有在变量var匹配Pattern的字符串,都会被替换为Replacement。
    ${var/#Pattern/Replacement} 如果变量var的前缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串。
    ${var/%Pattern/Replacement} 如果变量var的后缀匹配Pattern,那么就使用Replacement来替换匹配到Pattern的字符串。

    1、env显示当前的环境变量
    2、PS1='[u@h w A] $' 可以设置bash的命令与提示符。
    3、echo $$ 显示当前bash的PID号
    4、echo $?显示上一条指令的回传值(指令成功回传值为0,其他为非零)
    5、unset name 取消变量的定义
    6、定义变量语法: 变量名=变量值
    [注]:等号两边不能留空格,否则代表变量包含空格;若变量本身就包含空格,则整个字符串都要用双引号括起来。
    7、引用变量:$变量名 ${变量名}(强调变量)
    为了区分变量名与命令名,建议所有的变量名都用大写字母表示
    8、export命令可以将一个局部变量提供给shell执行的其他命令使用:
    export 变量名
    export 变量名=变量值
    9、内部变量
    $?:命令执行后返回的状态(0为正确执行;非0为出错) 可用于检查上一个命令执行是否正确
    $$:当前进程的进程号
    $!:最近后台进程号
    $#:位置参数的数量,$1表示第一个自变量
    $0:当前执行的进程名
    $1-$9:脚本参数
    $*:所有位置参数的内容
    10、条件测试:
    –格式:test conditions 也可以写作 [ conditions ]
    test在以下4种情况下使用:
    –字符比较
    –两个数值的比较
    –文件操作,例如文件是否存在及文件的状态等
    –逻辑操作,可以进行and/or,与其他条件联合使用
    test用于计算一个条件表达式的值,经常在条件语句和循环语句中用来判断某些条件是否满足,可以使用很多shell的内部操作符。
    11、字符串操作符
    常用字符串属性条件判断
    string_1=string_2
    如果string_1和string_2两个字符串相等则返回真,否则返回假;
    string_1!= string_2
    如果string_1和string_2两个字符串不相等则返回真,否则返回假;
    -z string
    如果字符串string的长度为0则返回真,否则返回假;
    -n string
    如果字符串string长度不为0则返回真,否则返回假;
    string
    如果字符串string非空返回真,否则返回假。
    通常与test结合使用,如:

    #!?bin/bash
    string_1=a string_2=b
    test string_1 = string_2
    echo $?
    运行应该返回 1
    12、整数操作符:计算整数表达式

    常用的整数关系条件判断
    mum_1 –eq num_2
    如果num_1和num_2相等则返回真,否则返回假;
    mum_1 –ne num_2
    如果num_1不等于num_2则返回真,否则返回假;
    mum_1 –gt num_2
    如果num_1大于num_2则返回真,否则返回假;
    mum_1 –lt num_2
    如果num_1小于num_2则返回真,否则返回假;
    mum_1 –le num_2
    如果num_1小于等于num_2则返回真,否则返回假;
    mum_1 –ge num_2
    如果num_1大于等于num_2则返回真,否则返回假;

    13、文件操作符

    常用的文件属性条件判断
    -f fn
    如果fn存在且fn为普通文件则返回真,否则返回假。
    -b fn
    如果fn存在且fn为块设备则返回真,否则返回假。
    -e fn
    如果fn存在则返回真,否则返回假。
    -d fn
    如果fn 存在且fn为目录则返回真,否则返回假。
    -r fn
    如果fn存在且fn可读则返回真,否则返回假。
    -w fn
    如果fn存在且fn可写则返回真,否则返回假。
    -x fn
    如果fn存在且fn可执行则返回真,否则返回假。
    -O fn
    如果fn存在且被当前用户拥有则返回真,否则返回假。
    -L fn
    如果fn存在且fn为符号链接则返回真,否则返回假。

    14、逻辑操作符

    常用的逻辑操作符属性条件判断
    -a (逻辑与)格式为”condition1 –a condition2”,若两个条件都为真,则结果为真
    -o (逻辑或):格式为”condition1 –o condition2”,若两个条件中有一个为真,则结果为真
    ! (逻辑非):格式为”!condition”.当condition为真时,结果为假,当condition为假时,结果为真

    15、shell中的引号:

    1、单引号(‘):单引号括起来的字符(包括特殊字符)都作为普通字符。
    2、双引号:由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能,其余字符仍作为普通字符对待。

    [注]:
    $:用其后指定的变量值来代替这个变量
    :转义字符,其后面的字符为普通字符。通常需要加的只有4个字符, $、、’、和”。
    对于”号,如果没加,则与前一个“号匹配
    3、反引号(`): 与键盘上的~同一个键上的符号。反引号括起来的字符串被shell解释为命令行,执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号部分。
    16、通配符
    *:代表任何字符串。例:f*匹配以f打头的任意字符串。
    文件名前的圆点(.)和路径名中的的斜线(/)必须显式匹配。
    例:”*”不能匹配.file,只有”.*”才可以匹配.file。
    ?:代表任何单个字符。
    [ ]:代表指定的一个字符范围,只要文件名中[ ]位置处的字符在[ ]中指定的范围之内,那么这个文件名就与这个模式串匹配。

    17、调试执行 sh -x abc.sh 调试执行abc.sh 。sh -n abc.sh 不执行脚本,只检测语法错误。
    18、exit 退出程序执行。正常退出,返回值为0;非0表示非正常退出。例如:exit 0
    19、awk命令文件内容提取 例如:检测提取root用户 awk -F: '$3==0 {print $1}' /etc/passwd 其中-F更改分隔符
    20、sh执行脚本的权限:对脚本有-r的权限,并且对脚本所在目录有-rx权限。
    直接执行脚本的权限:对脚本有-rx的权限,并且对脚本所在目录有-rx权限

  • 相关阅读:
    LCA算法
    poj1364(差分约束系统)
    dij算法为什么不能处理负权,以及dij算法变种
    差分约束系统
    最短路专辑
    LightOJ1348 树链剖分
    FZU2082树链剖分
    HYSBZ1036 树链剖分
    poj3237 树链剖分 暴力
    poj2763 树链剖分(线段树)
  • 原文地址:https://www.cnblogs.com/smallfishy/p/12917147.html
Copyright © 2011-2022 走看看