zoukankan      html  css  js  c++  java
  • 变量与函数

    变量

    变量的类型

    declare –a name :表示数组array。

    declare –f name :表示是function的名字。

    declare –F name :同上,但只显示function的名字。

    declare –i name :表示整数

    readonly name=value

    declare –r name=value :表示只读。不能使用unset。对于只读变量,也可以使用readonly name 的方式,相当于declare –r name 。readonly可以带三个选项:-f表示这是个function的名字,-p表示打印所有的readonly的名字,-a表示这是个只读的数组。

    declare –x name :同export,即不仅在当前的环境中起作用,也在子shell环境中起作用。

    变量的使用

    1. 设定变量(注意等号两端要紧跟,不能有空格):使用=号

    2. 取得变量的值:在变量前加$,如果有其他干扰的情况,可以使用${},将变量名称括起来

    3. 取消变量:unset后跟变量名称或者函数名称

    4. 清空变量:赋值时,等号后边为空白就行。

    5. 设置变量为环境变量:使用export后跟变量名。这样子shell就可以使用了。

    注意:

    双引号中:进行如下三个操作:替换变量、替换命令执行结果、替换算术运算结果。抑制在双引号中替换变量,可以使用转义$。

     

    单引号:形成一个所见所得的字符串,不会进行任何的变量操作。

    echo "my first linux shell!"
    first_name=Jackie
    last_name=King
    echo your name is: $first_name·$last_name

    数组

    1. 建立数组

    可以直接创建数组:A[0]=5; A[4]=10; A[3]="bash shell" #下标可以跳跃,可以直接增加元素。没有定义下标的位置是没有元素的,此时A有3个元素。

    可以通过列表创建:B=(23 88 99 66)

    指定个别元素索引:C=([3]=77 [1]=100 [5]=66) 

    2. 访问数组

    访问单个数组:echo ${B[2]}

    得到空格隔开的所有元素:${B[@]} 

    得到空格隔开的字符串:${B[*]}

    元素个数:echo ${#B[@]} 

    字符串操作 (可以使用正则表达式)

    运算符号 代表意义

    ${#string}

    $string的长度

     

     

    ${string:position}

    在$string中, 从位置$position开始提取子串

    ${string:position:length}

    在$string中, 从位置$position开始提取长度为$length的子串

     

     

    ${string#substring}

    从变量$string的开头, 删除最短匹配$substring的子串

    ${string##substring}

    从变量$string的开头, 删除最长匹配$substring的子串

    ${string%substring}

    从变量$string的结尾, 删除最短匹配$substring的子串

    ${string%%substring}

    从变量$string的结尾, 删除最长匹配$substring的子串

     

     

    ${string/substring/replacement}

    使用$replacement, 来代替第一个匹配的$substring

    ${string//substring/replacement}

    使用$replacement, 代替所有匹配的$substring

    ${string/#substring/replacement}

    如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

    ${string/%substring/replacement}

    如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

    预定义变量

    1. 环境变量

    BASH:Bash的完整路径名。
    BASH_VERSION
    HOME
    HOSTNAME:主机名
    HOSTTYPE:主机形态。例如i386.
    IFS:定义字段分隔符。默认值为:空格符、tab字符、换行字符(newline)
    LANG:目前语系(locale)的名称。
    PATH:命令的搜索路径。如果要自行添加搜索路径,一般的做法为:export PATH=/root/bin/:$PATH。这样可以在PATH增加路径/root/bin。
    PS1:主要提示符号。
    SHELL:shell的文件路径。默认为'/bin/bash'。
    UID:用户代码

    2. 输入的参数

    输入参数的个数:$#

    输入参数的数组:$*

    输入参数的数组:$@

    (以上两个不同只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 "$*" 等价于 "1 2 3"(传递了一个参数),而 "$@" 等价于 "1" "2" "3"(传递了三个参数)

    每一个输入参数:$0 $1 $2 $3...$[10] $[11]...,其中$0表示可执行文件路径

    #!/bin/bash
    # 预定义变量
    
    echo parameter amount: $#
    echo all parameter: $*
    for((i=0;i<=$#;i++))
    do
        eval echo "parameter $i: $"$i
    done

    3. 执行状态

    命令的执行状态:$?

    当前shell的PID:$$

    后台进程的PID:$!

    #!/bin/bash
    
    echo execute echo
    # return 为0表示正常返回
    echo last return: $?
    # 后台进程
    echo current process ID: $$ &
    echo last background process ID in this shell: $!

    参数置换

    name=${name2:-word}
    当name2这个变量已经设置过了(就是说name2这个变量设置过值),则把它的值赋值给name。如果name2这个变量没有设置过值,则把word当作name的值。

    name=${name2:=word}
    当name2这个变量已经设置过了,就把name2的值赋值给name这个变量,如果name2没有设置过,则把word赋值给name2

    name=${name2:?word}
    当name2这个变量设置过了,就把name2的值赋值给name,如果没有设置过值,则打印出word,但并不把值赋值给name

    name=${name2:+word}
    当name2这个变量有值,则把word的值赋给name,如果name2没有值,则什么都不设置。

    函数

    脚本中的函数

    函数定义方式

    [ function ] funname ()
    {
        action;
        [return int;]
    }

    说明:

    1. 可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。
    2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
    #!/bin/bash
    function output()
    {
        echo this is output $1
        return 4;
    }
    output "12345"
    echo $?

    shell中载入函数

    当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入shell。

    有函数文件test.main

    function findit(){
        if [ $# -lt 1 ]; then
            echo "usage: findit file"
            return 1
        fi
        find / -name $1 -print
    }

    载入(定位文件):

    #点+空格+函数路径
    . ~/test.main

    删除:

    unset

    调试脚本

    脚本错误一般有:循环错误、漏写引号、比较测试的错误、字符大小写。

    最常用的调试是使用echo输出

    set命令

    set命令可辅助脚本调试。以下是set命令常用的调试选项:

    • set -n 读命令但并不执行。
    • set -v 显示读取的所有行。
    • set -x 显示所有命令及其参数。

    使用set命令可以看出每一次执行的命令。

  • 相关阅读:
    linux里source、sh、bash、./有什么区别
    grafna如何用新的dashbord覆盖旧的dashbord
    selenium.webdriver获取结果转为json格式
    利用Python读取和修改Excel文件(包括xls文件和xlsx文件)——基于xlrd、xlwt和openpyxl模块
    python多线程实现ping多个ip
    Kubernetes 从懵圈到熟练 – 集群网络详解(转)
    kubectl 自动补全
    跨域资源共享 CORS 详解
    serializers--嵌套关系作为字段来表示
    Vue结合后端DjangoFramework的在线生鲜超市(前后端分离)【django2.2+xadmin+ueditor】
  • 原文地址:https://www.cnblogs.com/qiusuo/p/5570255.html
Copyright © 2011-2022 走看看