zoukankan      html  css  js  c++  java
  • Shell编程——bash基础知识

    # Bash中自动补全时忽略大小写
    # 编辑~/.inputrc(没有的话,就新建一个),在最后加一行:
        set completion-ignore-case on
    # 若要用方向键Up,Down来搜索以该串字符开头的历史命令,则在~/.inputrc中加入:
        “e[A”: history-search-backward
        “e[B”: history-search-forward 

    创建脚本:vim test.sh
        脚本内容:#! /bin/bash  #"#!"是一个约定标记,告诉系统用哪种shell来执行
                  echo "Hello world!"
    使脚本具有执行权限:chmod  +x ./test.sh
    执行脚本:./test.sh     #注意,一定要写成./test.sh,而不是test.sh。若直接写成test.sh,linux会去PATH里面找寻有没有test.sh.

    [shell注释]:以“#”开头的行为注释,shell没有多行注释
    [输入输出命令]
        echo命令:echo $variablename #从stdout输出变量值variablename
                 echo -e " "   #-e选项是用来激活转义字符,此处激活换行符
        printf命令:printf format-string [arguments...]
            format-string:s% d%
            arguments使用空格分割,不用逗号
            printf不会像echo那样自动换行,必须显示添加换行符( )
            参数多于格式控制符(%)时,format-string可以重用,可以将所有参数都转
        read命令:read name  #从stdin获取输入并赋值给变量name
    [shell变量]
        定义:variablename="value"  #变量名和等号之间不能有空格
        使用:$variablename   #使用一个定义过的变量,只要在变量名前面加$符号
        重新定义:variablename="newvalue"  #直接覆盖就行
        只读变量:variablename="value"
                  readonly variablename  #用readonly命令可将变量定义为只读变量,不可修改
        删除变量:unset variablename     #unset命令不能删除只读变量
        变量类型:局部变量,环境变量,shell变量

    [Shell特殊变量]
        $0     当前脚本的文件名
        $n     传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
        $#     传递给脚本或函数的参数个数。
        $*     传递给脚本或函数的所有参数。
        $@     传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $*稍有不同,下面将会讲到。
        $?    上个命令的退出状态,或函数的返回值,0表示成功,其他值表示失败。
        $$     当前Shell进程ID。对于 Shell脚本,就是这些脚本所在的进程ID。

    [命令替换]`command`  #``是反引号,位于ESC建下方,不是单引号
    [变量替换]
        ${var}:变量本来的值
        ${var:-word}:如果变量 var 为空或已被删除(unset),那么返回word,但不改变 var 的值。
        ${var:=word}:如果变量 var 为空或已被删除(unset),那么返回word,并将 var 的值设置为 word。
        ${var:?message}:如果变量 var为空或已被删除(unset),那么将消息 message送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。若此替换出现在Shell脚本中,那么脚本将停止运行。
        ${var:+word}:如果变量 var 被定义,那么返回 word,但不改变var的值。

    [Shell运算符]
        原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如
        awk 和 expr,expr 最常用。如:val=`expr 2 + 2`
        注意:
            1.表达式和运算符之间要有空格,例如 2+2是不对的,必须写成2 + 2。
            2.完整的表达式要被` `包含,这个字符不是单引号,在Esc键下边。
    [算术运算]:+,-,×,/,%,=,==,!=
        注意:
            1.乘号(*)前边必须加反斜杠()才能实现乘法运算;
            2.条件表达式要放在方括号之间,并且要有空格,例如if[$a==$b]
            是错误的,必须写成 if [ $a == $b ]。
    [关系运算]:-eq,-ne,-gt,-lt,-ge,-le
        关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
    [布尔运算]:非!,或-o,与-a
    [字符串运算]:=,!=,-z(长度为0为true),-n(长度不为0为true),str(非空为true)
    [文件测试运算]

    [Shell字符串]
        字符串可以用单引号,双引号,也可以不用引号。
    单引号:
        单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
        单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
    双引号:
        双引号里可以有变量,可以出现转义字符
    获取字符串长度:${#string}
    提取子字符串:${string:1:4}  #输出下标为1到4的字串,包括1和4,字符下标从0开始
    查找子字符串下标:echo `expr index "$string" sub_string`

    [Shell数组]
        bash支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由0开始编号,获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于等于0.
    定义数组:
        在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:  array_name=(value1 ... valuen)
    读取数组元素: ${array_name[index]}
    使用@或×来读取数组所有元素:    ${array_name[*]}  或  ${array_name[@]}
    获取数组的长度:
        # 取得数组元素的个数
        length=${#array_name[@]} 或 length=${#array_name[*]}
        # 取得数组单个元素的长度
        lengthn=${#array_name[n]}

  • 相关阅读:
    HDU 3833 YY's new problem ()
    从文件读入16进制数转化为10进制数再输出到文件中
    UESTC 1215 (思维题 旋转)
    HDU2067卡特兰数
    HDU2050离散数学折线分割平面
    cshell学习
    C++学习1
    QT学习1
    QT Creator常用快捷键
    Ubuntu14.04安装QT5.5
  • 原文地址:https://www.cnblogs.com/CherishFX/p/4546679.html
Copyright © 2011-2022 走看看