首页 > 系统服务 > 详细

shell总结笔记——关于变量

时间:2019-08-25 14:21:36      阅读:98      评论:0      收藏:0      [点我收藏+]

BASH:主要的优点:

  • 命令编修能力;
  • 命令与文件补全功能;
  • 命令别名设置功能;
  • 工作控制、前景背景控制;
  • 程序化脚本;
  • 万用字符;

1、什么是变量?

1、 让某一个特定的字符串代表不固定的内容。
2、 变量就是让一组文字或符号等来取代一些设置,或者是一串保留的数据。
3、变量的格式:变量名=变量内容(变量名一般设置为大写字母,专业一些)。

设置变量的规则:
1、 变量与变量内容以一个等号“=”来链接;
2、 等号两边不能直接接空白字符;
3、 变量名称只能是英文字母与数字,但是开头字符不能是数字;
4、 变量内容若有空白字符可以使用双引号,或单引号讲变量内容结合起来。双引号内的特殊字符如$等,可以保有原本的特性;单引号内的特殊字符则仅作为一般字符(纯文本)。
5、 可用转义符“\”将特殊符号变成一般字符;
6、 在一串指令的执行中,还需要借由其他额外的指令所提供的信息时,可以使用反撇号,而不是单引号。
7、 若该变量需要在其他子程序执行,则需要一export来使自定义变量变成环境变量。
8、 通常大写字符为系统默认变量,自行设置变量可以使用小写字符,方便判断;
9、 取消变量的方法为使用unset: “unset 变量名称”例如取消myname的设置:unset myname。

env命令——查询环境变量。

random命令:随机产生的数字是在0——32768之间。

set命令:查询的是所有的变量,包括环境变量和自定义变量。

$:代表的是当前shell的PID号,如echo $$;

?:代表的是上一个指令的回传值,如echo $?

自定义变量与环境变量最大的区别是:该变量是否会被子程序(子shell)继续使用。

各种变量定义的作用域:

  • 环境变量=全域变量
  • 自定义变量=区域变量

关于系统中的环境变量解释:
技术分享图片

PS1——系统特定变量名

其中PS1这个变量需要解释下,其他可以自行看懂,PS1可用的选项如下:

  • \d :可显示出“星期月日”的日期格式,如:"Mon Feb 2"
  • \H :完整的主机名称。举例来说,我的练习机为“study.centos.vbird”
  • \h :仅取主机名称在第一个小数点之前的名字,如我主机则为“study”后面省略
  • \t :显示时间,为 24 小时格式的“HH:MM:SS”
  • \T :显示时间,为 12 小时格式的“HH:MM:SS”
  • \A :显示时间,为 24 小时格式的“HH:MM”
  • \@ :显示时间,为 12 小时格式的“am/pm”样式
  • \u :目前使用者的帐号名称,如“dmtsai”;
  • \v :BASH 的版本信息,如我的测试主机版本为 4.2.46(1)-release,仅取“4.2”显示
  • \w :完整的工作目录名称,由根目录写起的目录名称。但主文件夹会以 ~ 取代;
  • \W :利用 basename 函数取得工作目录名称,所以仅会列出最后一个目录名。
  • # :下达的第几个指令。
  • \$ :提示字符,如果是 root 时,提示字符为 # ,否则就是 $

用法示例:

[root@localhost ~]# PS1=‘[\u@\h\w\A#\#]\$‘     #添加上面的一些选项
[root@localhost~13:07#5]#cd /etc    #多执行两下命令
[root@localhost/etc13:07#6]#cd /boot
[root@localhost/boot13:07#7]#exit
#可以发现,执行PS1这个变量并结合一些选项的使用,可以暂时改变命令提示符的变化,
#并且后面的数字会每执行一次,就增加一个数,这是\#的作用

设置变量的方式1

技术分享图片

[root@localhost ~]# path=$PATH #先自定义一个变量,引用“PATH”的值,用“path”变量做测试
[root@localhost ~]# echo $path    #输出进行确认下
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo ${path#/*local/sbin:}   #试着删除一个
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#在上面的命令中,“$”是关键字,用在这种删除模式所必须存在的;
#“path”就是原本的变量名称;
#“#”代表从变量内容的最前面开始向右删除,且只删除最短的那个;
#“/*local/sbin:”代表要被删除的部分,由于“#”代表从前面开始删除,
#所以这里就从“/”写起,并且可以使用“*”这个万用字符,可以代表任意内容。
#但这条命令并没有改变“path”变量的内容,可以将“echo”换为“path=”即可直接改变变量内容。
#如下:
[root@localhost ~]# path=${path#/*local/sbin:}
[root@localhost ~]# echo $path
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#这就将原本的变量值更改成功了。

关于其他的更改方式,参考上面的表格即可咯!

设置变量的方式2

环境变量一般是指用export内置命令导出的变量,用于定义Shell的运行环境,保证Shell命令的正确执行。Shell通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等,所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器、Shell脚本和各类应用。
环境变量可以在命令行中设置和创建,但用户退出命令行时这些变量值就会丢失,因此,如果希望永久保存环境变量,可在用户家目录下的.bash_profile或.bashrc(非用户登录模式特有,例如远程文件中,或者全局配置/etc/bashrc(非用户登录模式特有,例如远程SSH)或/etc/profile文件中定义。在将环境变量放入上述的文件中后,每次用户登录时这些变量都将被初始化。
按照系统规范,所有环境变量的名字均采用大写形式。在将环境变量应用于用户进程程序之前,都应该用export命令导出定义,例如:正确的环境变量定义方法为export OLDGIRL=1。
有一些环境变量,比如HOME、PATH、SHELL、UID、USER等,在用户登录之前就已经被/bin/login程序设置好了。通常环境变量被定义并保存在用户家目录下的.bash_profile文件或全局的配置文件/etc/profile中,具体的环境变量说明请参考下表:
技术分享图片

示例1——测试一下是否存在username这个变量,若不存在则赋值username为root。

[root@localhost ~]# echo $username   #查看username变量是否存在
[root@localhost ~]# username=${username-root}   #如果变量内容不存在就赋值为root
[root@localhost ~]# echo $username    #变量不存在,所以将它赋值了root
root
[root@localhost ~]# username=‘lv jian zhao‘    #那么现在给它赋值
[root@localhost ~]# username=${username-root}    #再次使用这个,表示如果值不存在,则将它赋值为root
[root@localhost ~]# echo $username    #再次输出,会发现还是我们手工赋的值,并没有给它赋值为root
lv jian zhao
#从上面可以看出“-”号的作用,就是如果值不存在,就给它赋值“-”号后面的值,若存在,则放弃。

示例2——若username未设置或为空字串,则将username内容设置为root

[root@localhost ~]# username=""     #将username设置为空字串
[root@localhost ~]# username=${username-root}    #若值不存在,则赋值为root
[root@localhost ~]# echo $username    

#输出该变量,会发现还是空的,因为username的值是存在的,只不过是空字串而已,所以并没有赋值为root
[root@localhost ~]# username=${username:-root}   #使用“:-”试试
[root@localhost ~]# echo $username    #会发现已经赋值为root了
root

#说明:“:-”的作用就是如果值为空或是未设置,都能被后面的内容替换。

技术分享图片

在查看设置的变量时,有3个命令可以显示变量的值:set、env和declare(替代早期的typeset)。set命令输出所有的变量,包括全局变量和局部变量;env命令只显示全局变量;declare命令输出所有的变量、函数、整数和已经导出的变量。set-o命令显示bash Shell的所有参数配置信息。
查看举例:

[root@localhost ~]# env | tail   #使用env命令进行查看全局变量
[root@localhost ~]# set -o     #使用set -o查看bash  shell的所有参数配置信息

设置环境变量的方式

如果想要设置环境变量,就要在给变量赋值之后或在设置变量时使用export命令,具体设置见下文的示例。其实,除了export命令,带-x选项的declare内置命令也可以完成同样的功能(注意:此处不要在变量名前面加$):
export命令和declare命令的格式如下:

①export 变量名=value②变量名=value ; export 变量名③declare -x 变量名=value
#以上就是三种设置环境变量的三种方法

上面设置的全局变量只是临时设置的,重启系统后,就失效了,那么可以将变量写入以下几个文件其中之一即可,使其永久生效:

1、只对用户的环境变量配置

[lv@localhost ~]$ ls ~/.bashrc ~/.bash_profile 
#对于用户的环境变量设置,比较常见的是用户家目录下的这两个目录,推荐写入第一个文件“.bashrc”

2、全局环境变量的配置
常见的全局环境变量的配置文件如下:

/etc/profile
/etc/bashrc                       #推荐在此文件中优先设置
/etc/profile.d/

———————— 本文至此结束,感谢阅读 ————————

shell总结笔记——关于变量

原文:https://blog.51cto.com/14154700/2432379

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!