美文网首页
Shell编程 - 变量查遗补漏

Shell编程 - 变量查遗补漏

作者: BlueSkyBlue | 来源:发表于2018-08-13 08:31 被阅读6次

    定义变量

    使用一个定义过的变量只需要在变量前加上美元符号即可。变量外也可以加花括号,这个是可选的,但有些情况加上花括号是为了帮助解释器识别变量的边界。例如:

    your_name="Huifeng"
    echo $your_name
    echo ${your_name}
    echo "I am good at ${skill}scripts."
    

    建议给所有的变量加上花括号。
    注意在第二次赋值的时候不能使用$,只有在使用变量的时候才能加上美元符号$。例如

    your_name="Huifeng"
    your_name="Ankang"
    echo $your_name
    

    可以使用readonly命令将指定的变量变为只读变量。
    删除变量可以使用unset命令,例如:

    unset your_name
    

    Shell字符串

    Shell字符串可以使用单引号也可以使用双引号也可以不使用引号。

    str='this is a string'
    

    单引号字符串的限制:

    • 单引号里的任何字符都会原样输出,单引号中的字符串变量是无效的。
    • 单引号字符串中不能出现一个单独的引号(对单引号使用转义符也不行),但可以成对出现在字符串拼接的时候使用。

    双引号的优点:

    • 双引号中可以有变量。
    • 双引号中可以出现转义字符。

    拼接字符串:

    surname="Ronaldo"
    firstname="Cristiano"
    echo $firstname $surname
    

    获取字符串的长度

    string="abc"
    echo ${#string}
    

    提取子字符串

    string="B+tree is MySql index data structure"
    echo ${string:11:16}
    

    查找子字符串
    查找字符io的位置。

    string="runoob is a great site"
    echo `expr index "$string" io`
    

    Shell数组

    Shell支持一维数组,不支持多维数组,并且没有限定数组的大小。数组下标从0开始编号。获取数组中的元素要利用下标,下标可以是整数或算数表达式,其值应该大于等于0。

    定义数组

    在Shell中,用括号表示数组,数组元素用空格元素分隔开,定义数组的一般格式为:

    数组名=(值1 值2 ... 值n)
    

    还可以单独定义数组的各个分量

    array=(value1 value2 value3)
    array[0]=value4
    array[2]=value5
    

    读取数组
    读取数组的一般格式为

    ${数组名[下标]}
    

    可以使用@符号读取数组中的所有元素。

    echo ${array[@]}
    

    获取数组的长度:
    获取数组长度的方法和获取字符串长度的方法一样

    length=${#array[@]}
    length=${#array[*]}
    #获取数组中单个元素的长度
    length=${#array[n]}
    

    参数说明:

    参数处理 说明
    $# 传递到脚本的参数的个数。
    $* 以一个单字符串显示所有向脚本传递的参数。
    $$ 脚本运行的当前进程ID号。
    $! 后台运行的最后一个进程的ID号。
    $@ 与$*相同但使用的时候加引号并且在引号中返回每个参数。
    $- 显示Shell使用的当前选项。
    $? 显示最后命令的退出状态。0表示没有错误,其它的任何值表示有错误。

    $$@的区别:
    只有在使用双引号的时候才会体现出来。假设脚本运行时写了三个参数1,2,3,则*等价于"1 2 3"传递了一个参数,而@等价于传递了"1", "2", "3"三个参数。

    相关文章

      网友评论

          本文标题:Shell编程 - 变量查遗补漏

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