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,只不过嫌麻烦,起得别名叫lsalias可以查看还有许多其他命令的别名
在这里插入图片描述
(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脚本中的变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程