变量的定义
变量就是内存一片区域的地址
变量存在的意义
命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题。
shell脚本中变量的定义方法
1.环境级别
export a=1
在环境关闭后变量失效,无法保存。
实验步骤:
(1)编辑test.sh文件
发现直接在该shell下调用能够打印出来a的值,使用其他两种方式会开启子shell则不能打印出来a的值,即父进程和子进程的信息不是共享的。
(2)共享信息
(3)关闭父shell
但是一旦这个父shell关闭后,变量信息就被回收了。
2.用户级别
vim ~/.bash_profile
export a=2
实验步骤:
编辑.bash_profile文件
.bash_profile:shell环境信息的配置
.bash.rc:shell本身的配置
这个文件默认不生效,要使用source .bash_profile使文件生效。
由于a的值定义在red用户家目录下的.bash_profile文件,只有当red用户登录时才会加载这个文件,因此使用red用户可以打印出a的值,使用root用户则不行。
3.系统级别
vim /etc/profile
export a=3
或
vim /etc/profile.d/lyueyue.sh
export b=3
实验步骤:
(1)编辑/etc/profile文件
(2)测试
发现使用root用户打印出来a的值为3,使用red用户打印出来a的值仍为2,即red用户自己家目录的配置生效(首先读取全局的,再读取用户的,用户的信息会将全局信息覆盖)。
我们再执行一次source,发现使用red用户打印出来的值为3了,即哪个文件后被读取哪个文件就生效。
(3)编辑/etc/profile.d/lyueyue.sh文件
4.变量名称
“字符” “_” “数字”
不能用数字开头 建议: 变量名称短全用大写字符
变量名称长用_区分子类
LYUEYUE
Lyueyue_Linux
lyueyuE_Linux
变量的转义
\ :转译单个字符
“” :弱引用,批量转译多个字符 不能转译"" “`” “$” “!”
‘’ :强引用
变量的声明
a=1
echo $ab
echo ${a}b:表示只有a是变量,而b不是。
变量的数组
a=(1 2 3 4 5)
echo ${a[0]}:第一个字符
echo ${a[-1]}:最后一个字符
echo ${a[ * ]}:表示所有(所有元素是一个整体)
echo ${a[@]}:表示所有(所有元素单独的)
实验步骤:
我们可以写一个test.sh脚本来详细观察*和@的不同
举例:
Linux中命令的别名设定
alias xie=‘vim’(临时设定)
vim ~/.bashrc:只针对指定用户生效
vim /etc/bashrc:针对系统所以用户生效
unalias xie:删除当前环境中的alias
实验步骤:
(1)查看当前被定义过别名的命令
(2)临时设定
\转义一下,执行的就是真的。
(2)vim ~/.bashrc
之前的设定是临时的,当打开一个新的shell时,这个命令就失效了。
编辑root用户的.bashrc文件
新打开一个shell仍能执行写命令
但是注意,当切换到red用户时命令失效。
(3)vim /etc/bashrc文件
(4)unalias xie
此命令删除当前环境中的alias
脚本练习
create_user.sh userfile passfile
userfile用的用户会被全部建立
passfile中的密码会被全部设定
自己: