• shell中的变量


       在Linux系统中的变量,一般有两种:“环境变量”、“局部变量”。还有一种变量被称为“特殊变量”,该类变量以只读的形式存在。

      

    shell脚本中的变量


     

    全局变量

      在脚本中定义的变量都是全局变量。包括脚本中的函数,函数中使用的变量依然在全局生效。声明变量时,使用“declare”,可以通过选项在声明的时候给予某些属性。

      选项:
        -p:

        -a:数组索引

        -A:数组变量

        -f:仅仅代表函数名

        -i:整型数

        -l:小写字母(自动转)

        -r:只读变量声明

        -t:跟踪属性,调试用

        -u:大些字母

        -x:通过环境变量导出的变量声明

      定义一个数组、赋值、输出数组:

    declare -a arr
    arr=(3 7 2 6 11)
    echo ${arr[@]}

      检查执行结果

    [root@right mag]# . shuzu.sh 
    3 7 2 6 11

    局部变量

      通过“local”关键字在函数内部定义局部变量。可以接受“declare”的一切选项。最好在函数中定义局部变量时使用。当在函数中使用local时,它会导致变量名使可见范围仅限于该函数及其子函数。

    play_()
    {
        local i=3310
        return i
    }

      清除变量

    $ a=3
    $ unset a

    位置变量

      脚本参数 、函数参数

      $1  ${10}

      输出第一个参数、第十个参数:

    [root@right mag]# ./position_parameter.sh 1 2 3 4 5 6 7 8 9
    1
    
    [root@right mag]# ./position_parameter.sh 1 2 3 4 5 6 7 8 9 10
    1
    10

    特殊变量

    $?  $#  $$  $*  $@  $_

      查看当前bash的进程号,以及命令执行的返回值。

    [root@right mag]# echo $$
    12365
    [root@right mag]# ps -C bash
      PID TTY          TIME CMD
    12365 pts/0    00:00:00 bash
    [root@right mag]# echo $?
    0

      引用上条命令的最后一个参数

    [view@front ~]$ ls /data01/work/portal/logs/
    catalina.out
    [view@front ~]$ cd $_
    [view@front logs]$
    
    

     bash脚本调试

      检查脚本语法、调试执行脚本

    $ bash -n adduser.sh
    $ bash -x adduser.sh

      shell脚本追踪

      在测试脚本时,可以使用set命令进行运行时的追踪。在脚本中加入一行“set -x”;以“+”开头的行,就是获得的追踪内容(程序的执行过程)。

    [root@right mag]# cat tes.sh 
    #!/bin/bash
    
    set -x
    read -p "How old are you? " answer
    if [ $answer == "34" ]; then
        echo "Yes, very good."
    else
        echo "No, i don't want say anyting."
    fi
    
    exit 0
    [root@right mag]# ./tes.sh 
    + read -p 'How old are you? ' answer
    How old are you? 34
    + '[' 34 == 34 ']'
    + echo 'Yes, very good.'
    Yes, very good.
    + exit 0
    [root@right mag]# ./tes.sh 
    + read -p 'How old are you? ' answer
    How old are you? 33
    + '[' 33 == 34 ']'
    + echo 'No, i don'''t want say anyting.'
    No, i don't want say anyting.
    + exit 0

      看看没有追踪的执行过程:

    [root@right mag]# ./tes.sh 
    How old are you? 32
    No, i don't want say anyting.
    一切代码都是为了生活,一切生活都是调剂
  • 相关阅读:
    Git标签使用技巧
    Git入门基本概述
    过滤器+缓存在.NET5WebApi项目中的简单使用
    在.NET5中 使用JWT鉴权授权
    Git常用开发命令
    时间戳的实际使用
    两个日期字段相减,进行计算
    MQ的理论理解
    第一周学习C语言的总结!
    问题(the question)
  • 原文地址:https://www.cnblogs.com/argor/p/7909872.html
Copyright © 2020-2023  润新知