shell中的变量(变量的转移,设定变量,别名的设定)

1.shell中的变量

变量的定义:变量即在程序运行过程中它的值是允许改变的量
变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息
在shell中变量是不能永久保存在系统中的,必须在文件中声明

实验(变脸的简单使用):
<1>在系统中写入变量

[root@desktop ~]# a=1
[root@desktop ~]# echo $a
[root@desktop ~]# echo {$a}b

在这里插入图片描述
<2>当在脚本中写入变量时,必须使用命令export将其放在系统共享处

[root@desktop ~]# export a=1
[root@desktop ~]# vim /mnt/test.sh
[root@desktop ~]# chmod +x /mnt/test.sh
[root@desktop ~]# /mnt/test.sh
[root@desktop ~]# cat /mnt/test.sh

shell中的变量(变量的转移,设定变量,别名的设定)_第1张图片
<3>在系统中写入共享的变量,退出这个shell界面后,再次登陆后,会发现无法使用之前设置的变量

[root@desktop mnt]# export a=1
[root@desktop mnt]# echo $a
[root@desktop mnt]# logout
[kiosk@foundation66 Desktop]$ ssh [email protected]
[root@desktop ~]# echo $a

shell中的变量(变量的转移,设定变量,别名的设定)_第2张图片
<4>在~/.bash_profile中写入变量,发现解决了退出界面后变无法使用的问题,但是发现切换用户后便无法使用变量,在文件中写入变量(用户级变量)

[root@desktop ~]# echo $a
[root@desktop ~]# vim ~/.bash_profile	##也可以写成[root@desktop ~]# vim ~/.bashrc
[root@desktop ~]# source ~/.bash_profile	##使其生效
[root@desktop ~]# echo $a	##成功输出
[root@desktop ~]# logout
[kiosk@foundation66 Desktop]$ ssh [email protected]
[root@desktop ~]# echo $a	##成功输出
[root@desktop ~]# su - student
[student@desktop ~]$ echo $a	##无法输出
[student@desktop ~]$ logout

shell中的变量(变量的转移,设定变量,别名的设定)_第3张图片
~/.bash_profile文件更改的内容:
shell中的变量(变量的转移,设定变量,别名的设定)_第4张图片
<5>在/etc/profile中写入变量,使其变量成为系统级变量(即是切换用户后依旧可以成功使用)

[root@desktop ~]# vim ~/.bash_profile	##先将用户级别的变量注释掉
[root@desktop ~]# vim /etc/profile
[root@desktop ~]# source /etc/profile
[root@desktop ~]# echo $a
[root@desktop ~]# logout
[kiosk@foundation66 Desktop]$ ssh [email protected]
[root@desktop ~]# echo $a
[root@desktop ~]# su - student
[student@desktop ~]$ echo $a
[student@desktop ~]$ logout

shell中的变量(变量的转移,设定变量,别名的设定)_第5张图片
将~/.bash_profile中的内容注释:
shell中的变量(变量的转移,设定变量,别名的设定)_第6张图片
/etc/profile文件更改的内容:
shell中的变量(变量的转移,设定变量,别名的设定)_第7张图片
<6>建议不要直接更改/etc/profile中的内容,最好是在/etc/profile.d中新建一个脚本并在里面写入变量(会发现两者的效果是相同的)

[root@desktop ~]# vim /etc/profile
[root@desktop ~]# cd /etc/profile.d
[root@desktop profile.d]# ls
[root@desktop profile.d]# vim westos.sh
[root@desktop profile.d]# cat westos.sh
[root@desktop profile.d]# source /etc/profile.d/westos.sh
[root@desktop profile.d]# echo $a
[root@desktop profile.d]# logout
[kiosk@foundation66 Desktop]$ ssh [email protected]
[root@desktop ~]# echo $a
[root@desktop ~]# su - student
[student@desktop ~]$ echo $a
[student@desktop ~]$ logout
[root@desktop ~]# cd /etc/profile.d
[root@desktop profile.d]# vim westos.sh
[root@desktop profile.d]# cat westos.sh

shell中的变量(变量的转移,设定变量,别名的设定)_第8张图片
将/etc/profile中的内容注释:
shell中的变量(变量的转移,设定变量,别名的设定)_第9张图片

2.shell变量名称的规范

变量名称中通常包含大小写字母,数字,下划线(不是必须)
变量名称格式
WESTOS_LINUX
Westos_Linux
westoS_Linux

3.shell字符的转译及变量的声明

\ 转译单个字符
""	弱引用,批量转译""中出现的字符
''	强引用,批量转译''中出现的字符
''与""	两者的区别在于,""不能转译"\","`","!","$"
${}	变量声明
例如:
A=1
echo $Ab
echo ${A}b

实验:
<1>查看“#”的用法

[root@desktop mnt]# echo #	##无法输出“#”,因为“#”在文件内是注释的作用
[root@desktop mnt]# echo #hello		##无法输出“#hello”,因为“#”在文件内是注释的作用
[root@desktop mnt]# echo \#hello	##可以成功输出,因为“#”被转译字符转译了
[root@desktop mnt]# echo \#hello#	##可以输出全部“#”,因为有转译字符,而且第一个字符与第二个字符之间没有空格,说明两个字符是同一个字符
[root@desktop mnt]# echo \hello #	##两个字符间有空格,则第二个“#”将无法被识别
[root@desktop mnt]# echo \#hello #	##两个字符间有空格,则第二个“#”将无法被识别
[root@desktop mnt]# echo \#hello \#	##当两个字符都使用转译字符时,发现都可以被成功识别

shell中的变量(变量的转移,设定变量,别名的设定)_第10张图片
<2>说明双引号(“”)是弱引用

[root@desktop mnt]# echo `hostname`	##成功输出命令
[root@desktop mnt]# echo '#`hostname`#'	##无法成功输出命令
[root@desktop mnt]# echo #`hostname`#	##无法成功输出命令
[root@desktop mnt]# echo "#`hostname`#"	##成功输出命令

shell中的变量(变量的转移,设定变量,别名的设定)_第11张图片
<3>"“不能转译”","`","!","$"

[root@desktop mnt]# echo "!"
[root@desktop mnt]# echo "$5"
[root@desktop mnt]# echo "`"
[root@desktop mnt]# echo "\"

shell中的变量(变量的转移,设定变量,别名的设定)_第12张图片

4.利用命令执行结果设定变量

Hostname=$(hostname)
Hostname=`hostname`
$?
$?是命令在执行完成之后产生的退出值,范围是[0-255]
当$0=0时标示命令执行没有错误输出,这个值可以用exit命令执行,例如exit 66

实验一:
-1-变量中添加命令并输出
<1>使用export命令的第一种格式

[root@desktop ~]# export a=`hostname`
[root@desktop ~]# vim /mnt/test.sh
[root@desktop ~]# chmod +x /mnt/test.sh
[root@desktop ~]# /mnt/test.sh
[root@desktop ~]# cat /mnt/test.sh

shell中的变量(变量的转移,设定变量,别名的设定)_第13张图片
<2>使用export命令的第二种格式

[root@desktop ~]# export a=$(hostname)
[root@desktop ~]# /mnt/test.sh

在这里插入图片描述
-2-有时候只能用“\”而不能用“$()”
<1>在脚本中使用“``”输出没命令,发现可以成功输出

[root@desktop ~]# yum install perl -y
[root@desktop ~]# which perl	##查找perl的所在位置
[root@desktop ~]# cd /mnt
[root@desktop mnt]# vim test1
[root@desktop mnt]# cat test1
[root@desktop mnt]# chmod +x test1
[root@desktop mnt]# /mnt/test1

shell中的变量(变量的转移,设定变量,别名的设定)_第14张图片
shell中的变量(变量的转移,设定变量,别名的设定)_第15张图片
shell中的变量(变量的转移,设定变量,别名的设定)_第16张图片
在/mnt/test1中写的内容:

#!/usr/bin/perl
print `date`

<2>在脚本中使用"$()"输出没命令,发现可以无法成功输出

[root@desktop mnt]# vim test1
[root@desktop mnt]# cat test1
[root@desktop mnt]# /mnt/test1

shell中的变量(变量的转移,设定变量,别名的设定)_第17张图片
在/mnt/test1中写的内容:

#!/usr/bin/perl
print $(date)

注意:
反向单引号中的内容是先被引用的,是通用的,而$()是不通用的

实验二:
-1-当输入一串系统无法识别的命令时,使用echo $?会出现说明错误的数字(1-155)

[root@desktop mnt]# dfhdsohgfoshdg
[root@desktop mnt]# echo $?

在这里插入图片描述
-2-当输入一串系统无法识别的命令时,使用echo $?会出现说明正确的数字0(默认的)

[root@desktop mnt]# ls
[root@desktop mnt]# echo $?

在这里插入图片描述
-3-设置当输入一串系统无法识别的命令时,使用echo $?会出现说明指定的数字

[root@desktop mnt]# vim haha.sh
[root@desktop mnt]# sh haha.sh
[root@desktop mnt]# echo $?
[root@desktop mnt]# cat haha.sh

shell中的变量(变量的转移,设定变量,别名的设定)_第18张图片

5.linux系统中命令别名的设定

alias xie=‘vim’
vim ~/.bashrc
alias xie=‘vim’
vim /etc/bashrc
allias xie=‘vim’
unalias xie

<1>只在当前shell界面设置ls的别名

[root@desktop mnt]# ls        
[root@desktop mnt]# alias bai='ls'	##给ls起别名为bai
[root@desktop mnt]# bai
[root@desktop mnt]# logout
[kiosk@foundation66 Desktop]$ ssh [email protected]
[root@desktop ~]# cd /mnt
[root@desktop mnt]# bai	##发现退出后便无法使用
[root@desktop mnt]# ls

shell中的变量(变量的转移,设定变量,别名的设定)_第19张图片
<2>设置用户级别ls的别名

[root@desktop mnt]# vim ~/.bashrc
[root@desktop mnt]# source ~/.bashrc
[root@desktop mnt]# ls
[root@desktop mnt]# bai
[root@desktop mnt]# logout
[kiosk@foundation66 Desktop]$ ssh [email protected]
[root@desktop ~]# cd /mnt
[root@desktop mnt]# bai
[root@desktop mnt]# ls
[root@desktop mnt]# su - student
[student@desktop ~]$ cd /mnt
[student@desktop mnt]$ bai	##发现切换用户后便无法使用
[student@desktop mnt]$ ls
[student@desktop mnt]$ logout

shell中的变量(变量的转移,设定变量,别名的设定)_第20张图片
在~/.bashrc文件中写入的内容:
shell中的变量(变量的转移,设定变量,别名的设定)_第21张图片
<3>设置系统级别ls的别名

[root@desktop mnt]# vim ~/.bashrc
[root@desktop mnt]# vim /etc/bashrc
[root@desktop mnt]# source /etc/bashrc
[root@desktop mnt]# bai
[root@desktop mnt]# logout
[kiosk@foundation66 Desktop]$ ssh [email protected]
[root@desktop ~]# cd /mnt
[root@desktop mnt]# bai
[root@desktop mnt]# su - student
[student@desktop ~]$ cd /mnt
[student@desktop mnt]$ bai
[student@desktop mnt]$ logout
[root@desktop mnt]# vim /etc/bashrc

shell中的变量(变量的转移,设定变量,别名的设定)_第22张图片
将~/.bashrc文件中写入的内容进行注释:
shell中的变量(变量的转移,设定变量,别名的设定)_第23张图片
在/etc/bashrc文件中写入的内容:
shell中的变量(变量的转移,设定变量,别名的设定)_第24张图片
实验做完后将/etc/bashrc文件中写入的内容进行注释:
在这里插入图片描述

你可能感兴趣的:(shell)