格式: NAME=value (注意等号两边不能有空格)
name=proinsight
# 正确 方法1
name = proinsight
# 错误,不能有空格
name=
"proinsight"
# 正确 方法2
name=
'proinsight'
# 正确 方法3
如果传入的值中不包含空格等分割符, 采用方法1,2,3。如果传入的值中包含空格等分割符,采用方法2,3。如果传入的值包含其它变量,采用方法2。
如何将hello world 赋值给sentence变量:
sentence=
"hello world"
# 正确
sentence=
'hello world'
# 正确
sentence=hello world
# 错误
sentence=
"hi, $name"
#正确,sentence值为: hi, proinsight
sentence=
'hi, $name'
#错误,sentence值为: hi, $name
小结:" "(双引号) 与 ' ' (单引号) 的区别
- 在双引号中,变量名称将被变量值所替代。
- 在单引号中,变量名称,或者任何其他文本都会不经修改而传出来。
- 变量的调用
在变量前加$,同样,变量的调用也有三种方法
name=
"proinsight"
echo
$name
#方法1
echo
${name}
#方法2
echo
"$name"
#方法3
通常情况下方法1、2、3都可以。只是在一些特殊条件下,方法1无法处理
如何输出name值的同时加入abc后缀,既输出proinsightabc
echo
$nameabc
#错误,会把nameabc看成一个变量,并输入变量值。
echo
${name}abc
#正确
2.环境变量
当shell脚本运行时,一些变量会根据环境设置中的值进行初始化,这些变量通常以大写字母命名,区别于用户以小写字母命名的局部变量。一些通用的环境变量如下图所示:
$HOME: 当前用户的家目录 $PATH: 以冒号分割的用来搜索命令的目录 $PS1: 命令提示符,通常是$字符,如:[\u@\h\w]$ $PS2: 二级提示符,用来提示后续的输入,通常是> $IFS: 输入域分隔符,通常是空格、制表符、换行符 $0: SHELL脚本的名字 $#: 传递给脚本的参数个数 $$: shell脚本的进程号,通常用来生成唯一的临时文件,如/tmp/tmpfile_$$
3.参数变量
其实,当我们执行一个 shell script 时,在这个 shell script 里面就已将帮我们做好一些可用的变量了。 举例来说,在不久的将来,您就会发现,当我们要启动一个系统服务时,可能会下达类似这样的指令:
[root@linux ~]# /etc/init.d/crond restart
那是啥玩意儿?呵呵!就是『向 /etc/init.d/crond 这个 script 下达 restart 的指令』, 咦!我们不是都使用 read 来读取使用者输入的变量内容吗?为啥我可以直接在 script 后面接上这个参数? 这是因为 shell script 帮我们设定好一些指定的变量了!变量的对应是这样的:
/path/to/scriptname opt1 opt2 opt3 opt4 ...
$0 $1 $2 $3 $4 ...
这样够清楚了吧?执行的文件名为 $0 这个变量,第一个接的参数就是 $1 啊~ 所以,只要我们在 script 里面善用 $1 的话,就可以很简单的立即下达某些指令功能了! 其它的一些预设参数如下:
$# : 传递到脚本的参数个数 $* : 以一个单字符串显示所有向脚本传递的参数,各个参数之间用环境变量IFS中的第一个字符分隔开。如果IFS被修改了,那么$*命令分割参数的方式将随之改变。
与位置变量不同,此选项参数可超过 9个,如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $$ : 脚本运行的当前进程 ID号 $! : 后台运行的最后一个进程的进程 ID号 $@ : 是$*的一种精巧变体,它不使用IFS,使用时加引号,并在引号中返回每个参数,双引号里的$@把各个参数扩展为彼此分开的域,所以即使IFS为空,参数也不会挤在一起。
一般来说,你想访问shell脚本程序的参数,推荐使用$@。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$- : 显示shell使用的当前选项,与 set命令功能相同。
$? : 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
# Program: # This program will show the use of shell variable # History: # 2015/1/4 Alex First release # $0:....... echo "path of script : $0" # ..basename........... echo "name of script : $(basename $0)" # $1...1 echo "parameter 1 : $1" # $2...2 echo "parameter 2 : $2" # $3...3 echo "parameter 3 : $3" # $4...4 echo "parameter 4 : $4" # $5...5 echo "parameter 5 : $5" # $#:.......... echo "The number of arguments passed : $#" # $*:........i echo "Show all arguments : $*" # $:.......ID. echo "Process ID : $$" # $?:... echo "errors : $?" 测试: deyuy/bin/my_shell >> ls -l |grep var.sh -rw-rw-r-- 1 deyuy deyuy 607 Jan 4 02:09 var.sh deyuy/bin/my_shell >> chmod 755 var.sh deyuy/bin/my_shell >> ls -l |grep var.sh -rwxr-xr-x 1 deyuy deyuy 607 Jan 4 02:09 var.sh deyuy/bin/my_shell >> ./var.sh path of script : ./var.sh name of script : var.sh parameter 1 : parameter 2 : parameter 3 : parameter 4 : parameter 5 : The number of arguments passed : 0 Show all arguments : Process ID : 25860 errors : 0 以上我们只输入了./var.sh,没有输入任何参数,下面我们输入3个参数老虎、狼、兔子对比一下: deyuy/bin/my_shell >> ./var.sh tiger wolf rabbit path of script : ./var.sh name of script : var.sh parameter 1 : tiger parameter 2 : wolf parameter 3 : rabbit parameter 4 : parameter 5 : The number of arguments passed : 3 Show all arguments : tiger wolf rabbit Process ID : 18818 errors : 0