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