变量的定义:变量即在程序运行过程中它的值是允许改变的量
变量是用一串固定的字符来标示不固定的值的一种方法
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储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
<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
<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
~/.bash_profile文件更改的内容:
<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
将~/.bash_profile中的内容注释:
/etc/profile文件更改的内容:
<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
变量名称中通常包含大小写字母,数字,下划线(不是必须)
变量名称格式
WESTOS_LINUX
Westos_Linux
westoS_Linux
\ 转译单个字符
"" 弱引用,批量转译""中出现的字符
'' 强引用,批量转译''中出现的字符
''与"" 两者的区别在于,""不能转译"\","`","!","$"
${} 变量声明
例如:
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 \# ##当两个字符都使用转译字符时,发现都可以被成功识别
[root@desktop mnt]# echo `hostname` ##成功输出命令
[root@desktop mnt]# echo '#`hostname`#' ##无法成功输出命令
[root@desktop mnt]# echo #`hostname`# ##无法成功输出命令
[root@desktop mnt]# echo "#`hostname`#" ##成功输出命令
[root@desktop mnt]# echo "!"
[root@desktop mnt]# echo "$5"
[root@desktop mnt]# echo "`"
[root@desktop mnt]# echo "\"
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
[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
#!/usr/bin/perl
print `date`
<2>在脚本中使用"$()"输出没命令,发现可以无法成功输出
[root@desktop mnt]# vim test1
[root@desktop mnt]# cat test1
[root@desktop mnt]# /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
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
[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
在~/.bashrc文件中写入的内容:
<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
将~/.bashrc文件中写入的内容进行注释:
在/etc/bashrc文件中写入的内容:
实验做完后将/etc/bashrc文件中写入的内容进行注释: