在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.






shell中的变量_最好