在bash中,巧妙地运用变量,能够大大减轻编程的工作量,下面让我们来详细了解一下bash的变量.
bash中的变量种类:
根据变量的生效范围等标准:
本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
环境变量:生效范围为当前shell进程及其子进程
局部变量:生效范围为当前shell进程中某代码片断(通常指函数)
位置变量: $1, $2, …来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
特殊变量: $?, $0, $*, $@, $#
本地变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell进程均无效
变量赋值: name=‘value’,
可以使用引用value:
(1) 可以是直接字串; name=“root"
(2) 变量引用: name="$USER"
(3) 命令引用: name=`COMMAND`, name=$(COMMAND)
变量引用: ${name}, $name
"":弱引用,其中的变量引用会被替换为变量值
'':强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量: set
删除变量: unset name
当变量不再需要时,要释放变量,以减轻内存的负担
环境变量(当前shell及其子进程均可引用)
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用: $name, ${name}
显示所有环境变量:
export
env
printenv
删除: unset name
bash有许多内建的环境变量: PATH, SHELL, USRE,UID,HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1
只读和位置变量
只读变量:只能声时,但不能修改和删除
readonly name
declare -r name
位置变量:在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, …:对应第1、第2等参数, shift [n]换位置
$0: 命令本身
$*: 传递给脚本的所有参数,全部参数合为一个字符串
$@: 传递给脚本的所有参数,每个参数为独立字符串
$#: 传递给脚本的参数的个数
$@ $* 只在被双引号包起来的时候才会有差异
示例:判断给出的文件的行数
linecount="$(wc -l $1| cut -d' ' -f1)"
echo "$1 has $linecount lines."
[root@localhost testdir]# cat 1.sh #!bin/bash # ./2.sh "$@" echo ================= ./2.sh "$*" [root@localhost testdir]# cat 2.sh echo $1 echo $2 [root@localhost testdir]# bash 1.sh 11 22 11 22 ================= 11 22
原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/36080