变量和引用

变量可分为:本地变量、环境变量和位置变量。
本地变量是仅可以在用户当前shell生命期的脚本中使用的变量,类似于编程语言中的局部变量。
环境变量则适用域所有由登录进程创建产生的子进程。
位置变量也属于变量,它用于向shell脚本传递参数,是只读的。

1.变量的赋值

[root@iZ2546h6zurZ test]# a=12
[root@iZ2546h6zurZ test]# echo $a
12


[root@iZ2546h6zurZ test]# unset a
[root@iZ2546h6zurZ test]# 
[root@iZ2546h6zurZ test]# 
[root@iZ2546h6zurZ test]# echo $a

去除某个变量用unset

[root@iZ2546h6zurZ test]# color=black
[root@iZ2546h6zurZ test]# 
[root@iZ2546h6zurZ test]# echo "the color is ${color:=blue}"
the color is black
[root@iZ2546h6zurZ test]# echo "the color is ${color:-blue}"
the color is black

其中:=对未赋值的变量将value值赋值给它;
:-对未赋值的变量将value值赋给它,但是value不存储到变量对应的地址空间。

清除color变量后测试
[root@iZ2546h6zurZ test]# unset color
[root@iZ2546h6zurZ test]# 
[root@iZ2546h6zurZ test]# 
[root@iZ2546h6zurZ test]# echo "the color is ${color:=blue}"
the color is blue
[root@iZ2546h6zurZ test]# echo "the color is ${color:-blue}"
the color is blue

2.设置变量为只读

[root@iZ2546h6zurZ test]# readonly color
[root@iZ2546h6zurZ test]# color=black
-bash: color: readonly variable
或者
[root@iZ2546h6zurZ test]# declare -r color


shell脚本变量是无类型的,并且shell变量同时有数值类型和字符类型两种赋值,数值类型初值是0,字符类型初值是空,而且可以不预先定义变量而直接使用。

3.环境变量

创建环境变量
[root@iZ2546h6zurZ test]# APPSPATH=/usr/local
[root@iZ2546h6zurZ test]# 
[root@iZ2546h6zurZ test]# export APPSPATH
[root@iZ2546h6zurZ test]# echo $APPSPATH
/usr/local

列出系统中所有的环境变量
[root@iZ2546h6zurZ test]# env
LC_PAPER=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
HOSTNAME=iZ2546h6zurZ
LC_MONETARY=zh_CN.UTF-8
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000

重要的环境变量

HOME 当前用户的主目录。
IFS 内部域分隔符。
PATH可执行文件的搜索路径,避免每次都要写全路径或者相对路径。默认多个可执行文件路径以冒号分隔
USER和UID表示当前登录用户和登录用户的uid的环境变量
PWD代表当前工作目录,改变目录后系统会自动更新该环境变量
OLDPWD代表之前的工作目录
PPID
表示当前进程的父进程号
ps1和ps2分别表示一级提示符和二级提示符,可以通过设置改环境变量来改变命令提示符

环境变量的配置文件

系统级:
(1)/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。该文件一般是调用/etc/bash.bashrc文件。
/etc/bash.bashrc:系统级的bashrc文件。
(2)/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。

用户级(这些文件处于家目录下):
(1)~/.profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方
(2)~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。
~/.bash_profile or ~./bash_login
~/.pam_environment:用户级的环境变量设置文件。

4.父进程和子进程中本地变量和环境变量的访问

创建father.sh和child.sh

father.sh

#!/bin/bash


#输出父进程号
echo "father process id is $$"


#定义本地变量
localvar="define local var"
echo "localvar=$localvar"


#定义环境变量并输出
ENVVAR="define env var"
export ENVVAR
echo "ENVVAR=ENVVAR"


#调用child.sh脚本创建子进程
$PWD/child.sh


#child.sh 执行完毕后输出相关变量值


echo "return father process id is $$"


echo "localvar=$localvar"


echo "ENVVAR=ENVVAR"

child.sh文件
#!/bin/bash
#输出自身的进程号和父进程号


echo "child process id is $$"
echo "my father process id is $PPID"


#输出本地变量和环境变量的值
echo "localvar=$localvar"
echo "ENVVAR=$ENVVAR"


#重新定义本地变量和环境变量
localvar="redifine localvar"
ENVVAR="redifine envvar"

echo "localvar=$localvar"


ENVVAR="redifine envvar"

 赋执行权限
[root@iZ2546h6zurZ test]# chmod u+x father.sh
[root@iZ2546h6zurZ test]# chmod u+x child.sh 

执行结果

[root@iZ2546h6zurZ test]# ./father.sh 
father process id is 26566
localvar=define local var
ENVVAR=ENVVAR
child process id is 26567
my father process id is 26566
localvar=
ENVVAR=define env var
localvar=redifine localvar
return father process id is 26566
localvar=define local var
ENVVAR=ENVVAR

说明无论是本地变量还是环境变量,都无法向其父进程传递。

5.位置参数
所谓的位置参数便是0,1,2,3,4,5,6,7,8,9...。使用时,用$0,$1,$2...。 
位置参数是当 script被载入时,后面所附加的参数。$0是本身,$1则为第一个参数,$2为第二个,依此类推。
位置参数用来从命令行向shell传递参数。

几个特殊的位置参数

$0表示脚本的名字;

$1表示第一个参数,$2表示第二个参数,以此类推,当数字大于等于10的时候需要用大括号括起来,如${10},${100}。

$@和$*相同,都表示从$1开始的所有的参数的值,中间用空格隔开。

$#表示运行程序的时候传入的参数的数目。

$?表示程序的退出状态,0表示没有错误,非0表示有错误。

$$表示运行此脚本程序的进程号。

6.引用

“” 双引号 引用除美元符号($)、反引号(`)和反斜杠(\)之外的所有字符
‘’ 单引号 引用所有字符
`` 反引号 Shell将反引号的内容解释为系统命令
\ 反斜杠 转义符,屏蔽下一个字符的特殊含义

7.命令替换

两种方式:
1)使用反引号
``
2)使用$()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值