bash变量类型详解

  本地变量:作用于当前shell,对当前shell之外的其他shell进程和当前shell子进程均无效。

  本地变量赋值为

name='value'

  value可以是字符串或者是变量,引用变量使用${name}或$name或``.

  注:单引号是强引用而双引号是弱引用。

[root@izwz9bqngpatc008nw00e7z tmp]# echo '$animal'
$animal
[root@izwz9bqngpatc008nw00e7z tmp]# echo "$animal"
dog
[root@izwz9bqngpatc008nw00e7z tmp]# echo "$animals."
.
[root@izwz9bqngpatc008nw00e7z tmp]# echo "${animal}s."
dogs.
[root@izwz9bqngpatc008nw00e7z tmp]# myid = `id -u`
-bash: myid: command not found
[root@izwz9bqngpatc008nw00e7z tmp]# myid=`id -u`
[root@izwz9bqngpatc008nw00e7z tmp]# echo '$myid'
$myid
[root@izwz9bqngpatc008nw00e7z tmp]# echo "$myid"
0
[root@izwz9bqngpatc008nw00e7z tmp]# filename=`date +%F-%H-%M-%S`
[root@izwz9bqngpatc008nw00e7z tmp]# echo "$filename"
2018-03-19-18-41-21

  使用set显示已定义的所有变量,unset name 销毁变量。

  局部变量:生效在shell进程的某段代码片段中。

  环境变量:生效在当前shell进程和他的子进程中。

  声明方式为

export name=value
declare -x name=value
[root@izwz9bqngpatc008nw00e7z tmp]# export TES='animal'
[root@izwz9bqngpatc008nw00e7z tmp]# echo $TES
animal
[root@izwz9bqngpatc008nw00e7z tmp]# declare -x myname='jeffd'
[root@izwz9bqngpatc008nw00e7z tmp]# echo $myname
jeffd

  显示所有环境变量:export,env,printenv。

  销毁环境变量:unset name。

  不要使用bash内建环境变量。

  只读变量:

readonly name
declare -r name

  位置变量:用于让脚本在脚本代码中调用通过命令行传递给它的参数。

[root@izwz9bqngpatc008nw00e7z tmp]# cat test.sh 
#!/bin/bash
linecount="$(wc -l $1|cut -d' ' -f1)"
echo "$1 has $linecount lines."
[root@izwz9bqngpatc008nw00e7z tmp]# chmod +x test.sh 
[root@izwz9bqngpatc008nw00e7z tmp]# ./test.sh /etc/passwd
/etc/passwd has 25 lines.

  特殊变量:$?上一个命令执行状态的返回值。

  程序执行可能有两种返回值:
  1. 程序执行结果
  2. 程序状态返回吗(0-255)
    0 则为执行正确
    1-255 则执行出错(1,2,127系统预留);

  $#:获取当前shell命令行中参数的总个数
  $*:获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制
  $@:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制
  $0 获取当前执行的shell脚本的文件名
  $n 获取当前执行的shell脚本的第n个参数值,n=1..9
  $$ 获取当前shell的进程号(PID)
  $! 执行上一个指令的PID

posted @ 2017-07-26 20:56  JeffD  阅读(1106)  评论(0编辑  收藏  举报