博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
变量和引用
阅读量:5345 次
发布时间:2019-06-15

本文共 3759 字,大约阅读时间需要 12 分钟。

变量可分为:本地变量、环境变量和位置变量。

本地变量是仅能够在用户当前shell生命期的脚本中使用的变量,类似于编程语言中的局部变量。
环境变量则适用域全部由登录进程创建产生的子进程。
位置变量也属于变量,它用于向shell脚本传递參数,是仅仅读的。
1.变量的赋值

[root@iZ2546h6zurZ test]# a=12[root@iZ2546h6zurZ test]# echo $a12[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]# envLC_PAPER=zh_CN.UTF-8LC_ADDRESS=zh_CN.UTF-8HOSTNAME=iZ2546h6zurZLC_MONETARY=zh_CN.UTF-8TERM=xtermSHELL=/bin/bashHISTSIZE=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 ENVVARecho "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 26566localvar=define local varENVVAR=ENVVARchild process id is 26567my father process id is 26566localvar=ENVVAR=define env varlocalvar=redifine localvarreturn father process id is 26566localvar=define local varENVVAR=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)使用$()

转载于:https://www.cnblogs.com/gcczhongduan/p/5221791.html

你可能感兴趣的文章
#10015 灯泡(无向图连通性+二分)
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>