shell脚本中的变量
2021/7/4 7:22:52
本文主要是介绍shell脚本中的变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
shell脚本中的变量
- 1、变量的定义
- 2、shell脚本中变量的定义方法
- 3、变量的转译
- 4、Linux中命令的别名设定
- 5、用户环境变量的更改
- 6、脚本传参
- 7、脚本函数
1、变量的定义
用一个字符串表示一片内存区域地址的方式叫变量,也就是说变量是内存中一片区域地址的别称。变量存在的意义是用一串固定的字符来表示不固定的目标。
2、shell脚本中变量的定义方法
(1)环境级别
测试如下图,令a=1,显示a的值,可以成功显示1。如果写个脚本,用sh
的方式执行脚本就无法显示,用.
的方式执行脚本就可以显示a的值,为什么呢?因为sh
是当前环境下新开的子shell,而.
是在当前环境中运行shell,可以看出这个赋予的a的值只在当前环境中,一旦环境退出变量就失效。
如果想当前环境及其子程序都生效,需要声明,如下图,现在两种方式都可以显示a的值。但是仍然是环境退出变量就失效
(2)用户级别
如果退出了环境还想让变量生效,需要把变量写入配置文件中~/.bash_profile
,重新加载该配置文件,可以显示a的值,即使关闭了当前环境再打开也是可以的。
但是切换了用户,就无法显示a的值了。
(3)系统级别
如果想整个系统都能识别,就需要在总的配置文件/etc/profile
写入变量,但是它里面东西很多,不建议直接在里面写入。最好在/etc/profile.d
目录下创建子文件,子文件里写入变量,现在即使切换用户,也可以显示a的值。
env
命令可以查看系统级的设定,上面设定完成后,可以看到env
查到了a=1
如果上面关于a变量的设定不想要了,首先系统级别的就删除子目录下创建的文件,用户级别就在~/.bash_profile
中删除设定的那句,但是现在echo $a
,还是可以显示1,因为系统已经识别的变量是不会自动忘记的,需要手动unset
来忘记,现在echo $a
就无法识别了。
(4)变量名称可包含的字符有字母,下划线,数字,但是不能用数字开头。如果变量名称短建议全用大写字符,如果变量名称长建议用下划线区分子类。
3、变量的转译
(1)转译
一些特殊符号无法显示,用\
转译后可以显示
如果要转译多个字符,需要用引号括起来,其中双引号“”
是弱引用,不能转译\ $ !
等。单引号‘’
是强引用
(2)声明
当变量是两个字母组成时,如ab,$ab
表示转译ab整体还是转译a然后后边跟b呢?默认是转译ab整体。如果是${a}b
结果就是转译a然后跟b
(3)数组
a=(1 2 3 4 5 6)
echo ${a}
默认显示数组的第一个元素
echo ${a[0]}
表示数组中第一个元素
echo ${a[1]}
表示数组中第二个元素
echo ${a[-1]}
表示数组中最后一个元素
echo ${a[@]}
表示数组中所有元素(是多个部分)
echo ${a[*]}
表示数组中所有元素(是一个整体)
echo ${#a[@]}
表示数组中元素的个数
echo ${a[@]:0:3}
表示数组中从第一个开始,显示三个元素
echo ${a[@]:4:3}
表示数组中从第五个开始,显示三个元素(下图中由于总共就六个元素,所以只显示第五个第六个)
删除数组中的第n个元素使用unset a[n]
,给数组中添加元素使用a[n]=x
, 删除整个a数组使用unset a
4、Linux中命令的别名设定
我们执行ls
和执行/usr/bin/ls
,为什么前者有颜色,后者没有颜色呢?这是因为ls
执行的不只是ls
本身,其实是ls --color=auto
,只不过嫌麻烦,起得别名叫ls
。alias
可以查看还有许多其他命令的别名
(1)临时设定
临时设定,关闭当前环境就失效了
(2)针对该用户生效
在用户的配置文件~/.bashrc
中写入别名,source ~/.bashrc
重新读取配置文件,系统就可以识别kan了。但是切换为其他用户后,就无法识别了
(3)系统所有用户生效
在总配置文件/etc/bashrc
中写入别名,source /etc/bashrc
重新读取配置文件,系统就可以识别kan了,切换其他用户也可以识别。
如果想删除上述别名,分别把两个配置文件的语句删除,测试还是可以用,unalias kan
就没有了,可以用alias
语句验证是否删除了
5、用户环境变量的更改
测试,现在位置是家目录,执行一个mnt中的脚本不行,执行ls却可以,为什么同样是相对路径,ls就行,执行脚本就不行呢?这是因为环境变量的不同,默认是检索/bin的,但是不检索/mnt
(1)用户级
修改配置文件~/.bash_profile
,把/mnt添加到环境路径中
重新读取配置文件,就可以用相对路径来执行命令。并且查看$PATH
多了mnt路径
(2)系统级
同理,配置文件/etc/profile
如果想删除添加的环境/mnt,首先把配置文件中添加的语句删除,关闭当前shell,重新打开就删除完成了。
6、脚本传参
(1)直接利用命令执行结果
$( )
优先执行
(2)脚本中的非交互模式传参
$0
表示脚本本身的名字
$1
表示脚本后输入的第一串字符
$2
表示脚本后输入的第二串字符
$*
表示脚本后输入的所有字符(是多个部分)
$@
表示脚本后输入的所有字符(是一个整体)
$#
表示脚本后输入的所有字符的个数
(3)脚本中的交互模式传参
read WESTOS
对WESTOS赋值
read -p "please input word:" WESTOS
输出提示语,对WESTOS赋值
read -p "please input word:" -s WESTOS
输出提示语,对WESTOS赋值且输入是隐藏的
测试下面的脚本
效果如下
7、脚本函数
用一个字符串表示一个动作就叫函数。可以把一些重复的动作换成一个字符串,简化脚本。比如把刚才的交互传参脚本做成函数,现在这三句话就等于READ,所以执行READ就和上面一样的效果
函数还可以使脚本循环起来,如下图
但是,这个脚本一直循环,无法结束了,所以需要添加判定,当输入的是exit时退出
效果如下
练习脚本要求如下
:sh create_user.sh
Please input username: westos
如果westos exist输出westos is exist然后Please input username:
如果westos not exist,please input password: 无回显密码
此用户会自动建立并且密码为提示后设定的密码
并显示:westos is created
并再次提示Please input username:
当Please input username:exit此脚本退出
这篇关于shell脚本中的变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南