shell-4-shell脚本中的变量

主题:shell中脚本的变量

一、变量的定义(重点)

(一)变量定义

  • 变量定义:变量就是一片内存区域中的地址;(理解:在内存中储存数据,当在执行过程中需要取值时,内存区域相当于一片大海,你要有明确的地址方向,才能找到你要的数值;也就是变量/内存地址带你去找你需要的数值)
  • 变量=内存地址
  • 比如有个程序:hostname,命令产生的结果不在硬盘,而是在内存中的字符设备里;
  • a=$(hostname) 含义:将路径地址指定为a
  • echo $a 含义:系统自动寻找a所代表的那片区域信息,把地址区域中的信息显示出来

注意:
反引号是为了执行反引号里面的内容
$+字符串(变量) : 字符串(变量)所表示的地址区域中的内容是什么。

(二)变量存在的意义

  • 命令无法操作一直变化的目标
  • 脚本中引用变量:用一串固定的字符串来表示不固定的目标可以解决此问题
  • 变量的字符是固定的,但是变量所表示的内容是变化的
  • 比如说 $USER 显示出当前登陆主机的用户
  • 用字符串表示不固定信息

实验:
在这里插入图片描述
总结:
(1)hostname是命令,解雇储存在内存中。命令需要先执行后再将地址指定,写法是:a=$(hostname)
(2)USER是变量,如同被赋值的c一样, $ + 字符串 = 变量。在执行时,因为USER和c 先前已经有值, echo $USER echo $c 显示变量(内存地址)指向区域的内容

二、shell脚本中变量的定义方法(重点)

(1)变量的定义方式:环境变量 用户变量 系统变量三种方式
(2)export有什么作用:环境变量中当开启子shell时,为了共享父级的部分资源
(3)环境变量的生命周期:当shell关闭后,环境变量失效,因为环境变量所占用的真实物理资源被回收了
(4)四中设定方式的范围区别:
脚本本身、此环境中所有脚本、用户使用的脚本、整个系统

实验:
(1)a=1 echo$a
(2)cd /mnt /mnt中写脚本test.sh echo $a
(3)sh test.sh 执行为空(调用不显示)
(6)chmod +x test.sh /mnt/test.sh (调用不显示)
这两种会开启子shell,因此调用不显示;也就是父级进程中的信息没有共享出来!
(4). test.sh 执行显示1
(5)source test.sh 执行显示1
这两种没有开启新的子进程,使用的仍是原本的进程,可以使用a变量这个资源!
(6)将当前进程资源共享出来 export a=1
(7)sh test.sh 执行显示结果1
变量设定方式详解:
(一)脚本级别只在当前的脚本生效(只对该脚本本身生效)
执行时打开子脚本,执行没有结果!
在这里插入图片描述
(二)环境级别只在当前的环境生效(在这个环境执行的所有脚本都生效)
export a=1 含义:在同一个环境(shell)中,当执行方式为打开一个新的(子)shell时,父级(当前)shell 共享出资源供子shell使用!
当关闭当前shell (更新环境的时候),打开新的shell时,占用的内存空间被释放,变量a值被回收!
设定方式:export a=1
在这里插入图片描述
在环境关闭后变量失效,所占用的真实物理资源被回收了,环境级别的生命周期较短
(三)用户级别只对当前的用户生效(只要用户使用这个脚本变量就生效)
/etc/skel/.*用户配置文件
在家目录下的隐藏文件:
.bashrc shell本身的信息
.bash_profile 是shell环境的信息(相当于vimrc本身运行环境的配置信息)
(1)vim ~/.bash_profile
(2)export a=1
(3)source .bash_profile默认不生效,因此一定要告诉系统
(4)/mnt/test.sh 有执行结果
(5)logout 退出后切换其他用户就没有执行结果了
在哪个用户下家目录里设置的,哪个用户可以生效!
在这里插入图片描述
打开新的shell时,需要source ~/.bash_profile加载一下
环境变量记录在用户所用到的子shell配置环境变量中!只有这个用户登陆的时候,才会加载自己家目录中的shell配置文件。
总结:如果是更改了用户家目录下的shell环境设置,只对该用户生效!
(四)系统级别只在当前的系统生效(只要在系统中跑就生效)
(1)vim /etc/profile export a=2(最后一行写入)
(2)source /etc/profile
在这里插入图片描述
在这里插入图片描述
打开新的shell时,需要source ~/.bash_profile加载一下,因为系统需要识别一下
总结:这几个级别的设定没有优先级,谁先设定先读谁,后读的会覆盖前面设置的!

写环境变量的另一个方法:
(1)cd /etc/profile.d
(2)ls
(3)vim westos.sh 文件以sh或者bash 结尾 export b=3
(4)source /etc/profile.d/*

变量名称:

  • 组成元素:字符 下划线 数字(但是数字不能开头)
    -例如: test1_hdaiuh=1
  • 变量名称短的时候 全用大写 JIAJIA
  • 变量用户长的时候 用_区分子类JIAJIA_LINUX

三、变量的转译

(一)转译
很多字符有自己特殊的含义,比如$ #就是个特殊的字符
echo $5 —> 显示为空,此时认为5是变量,显示出变量的值
若想显示出 $5 写法为 echo $5 或者 echo ‘$5’

\转译单个字符
" "弱引用,批量转译字符,不能转译\ ` $ !这四个字符
’ ’可以转译所有的内容

在这里插入图片描述
(二)变量的声明

  • echo $ab 系统默认为ab是变量
  • echo ${a}b 告诉系统 a是变量 后面的b跟我没关系声明a是变量在这里插入图片描述

(三)变量的数组
实验一:
(1)echo ‘1 2 3 4 5’ 包括了字符串
(2)a=(1 2 3 4 5) 此时a为数组
(3)echo $a 默认看第一个元素
(4)echo ${a[0]} 其中,中括号[]表示下标
(5)echo ${a[*]} 显示所有元素,表示元素是整体!

(6)echo ${a[*]} 显示数组所有内容,数组内元素是单个!
验证(5)、(6)单个和整体效果:
(1)vim /mnt/test.sh
(2)
#!/bin/bash
export a=(1 2 3 )
for i in " ${a[ * ]}"
do
echo $i
done
(3) for i in " ${a[ * ]}“换位 for i in " ${a[ @]}”
总结: * =“1 2 3” @=“1” “2” “3”

实验二:
(1)新建文件 weixin
(2)ls -l weixin
(3)a=( ls -l weixin)
(4)echo ${a[0]}
(5)echo ${a[-1]}从后开始数
(6)echo ${a[*]} 显示所有的元素
在这里插入图片描述

四、linux中命令的别名设定

引入:
1.ls 和 /bin/ls 两者执行效果不同
因此,直接执行的ls是重新被定义过的!
想执行ls真正的命令时,进行转译!转译后执行真的!比如\ls
在这里插入图片描述
2.alias查看被系统定义过的命令
可以看到ls实际上执行的是另外一条命令
在这里插入图片描述
3.临时设定别名(重新打开shell时,xie不能生效!)
alias xie =“vim”
测试 xie /etc/passwd
在这里插入图片描述
在这里插入图片描述

4.别名针对超级用户生效(关闭当前shell,再打开新的shell,只要在超级用户身份下 xie都生效)
vim .bashrc
alias xie =“vim”
source .bashrc
su - westos 执行xie 不生效
新打开的shell执行xie不生效,配置家目录下的.bashrc生效!
在这里插入图片描述
在这里插入图片描述
但是切换到westos用户下,xie不生效!
在这里插入图片描述
设置bianji对westos生效
在这里插入图片描述
5.别名针对系统环境都生效
vim /etc/bashrc
alias xie =“vim”
source /etc/bashrc
xie
su - westos
在这里插入图片描述
6.删除设置的别名unalias
unalias xie 在环境中删除xie
删除当前环境中当前用户的xie,当切换用户或者是新打开shell仍可以使用xie命令!
在这里插入图片描述
在这里插入图片描述

直接在配置文件中删除并source没有用,因为source 作用是加载新东西 你删除的东西不能加载出来啦!source只能加载存在的信息,并且覆盖之前的!如果你删除了,不能覆盖了,即使source了,还是之前的效果!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值