shell脚本中的变量

1 变量的定义

  • 定义本身
    变量就是内存一片区域的地址
  • 变量存在的意义
    命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题

2 shell脚本中变量的定义方法

1)在当前shell中直接定义变量然后在当前环境直接输出输出是可行的:
在这里插入图片描述

2)也可以建立一个脚本,写入变量输出,再去调用脚本。如下所示,使用“sh westos.sh”方法输出变量是不会有所显示的,因为这样调用脚本默认会重新开启一个shell运行,而变量在当前的环境中,所以不会显示;使用“. westos.sh ”或“source westos.sh”都是在当前的shell中运行脚本,所以可以显示变量值:
在这里插入图片描述

2.1 环境级别

环境级别的变量,在环境关闭后,变量就会失效。定义方法是“export a=1”
1)定义环境级别的变量,使用不同的方式运行脚本,如下所示:
在这里插入图片描述

2)退出该环境后,再运行脚本,变量值不会显示:
在这里插入图片描述

2.2 用户级别

用户级别变量,只有该用户生效,其他用户不生效。
1)编辑~/.bash_profile文件设定用户级别的变量:
在这里插入图片描述

2)先运行source ~/.bash_profile使该设定生效,然后在当前用户的环境下调用该脚本,发现变量生效,退出该环用户再登陆上时,变量依旧生效:
在这里插入图片描述

3)切换用户,使用该用户运行该脚本时就没有结果:
在这里插入图片描述

2.3 系统级别

系统级变量除了该系统外,在其余系统不生效。为了使得切换用户后变量生效,可以对系统级别的配置文件进行修改。系统级别的变量定义有两种方式,一个是编辑 /etc/profile 主配置文件;一个是在 etc/profile.d/目录下再建立一个脚本文件。通常是在 etc/profile.d/目录中新建脚本文件。
1) 编辑vim /etc/profile.d/lhy.sh,写入系统级变量,然后运行source /etc/profile.d/lhy.sh使该设定生效;切换用户运行脚本,变量依然有效:
在这里插入图片描述

3 变量名称

  • 变量名称可包含的字符
    字母、下划线、数字
  • 变量名称定义规则
    不能用数字开头
  • 变量命令建议:变量名称短全用大写字符、变量名称长用下划线区分子类

4 变量的转译

4.1 转译

符号含义
\转译单个字符
“ ”弱引用,批量转译个数字符,不能转译“\”,"`","$","!"
’ ’弱引用

下图表明“\”只能转译单个字符,而双引号可以批量转译:
在这里插入图片描述
双引号不能转译的特殊符号:
在这里插入图片描述
下图表示双引号的引用性要弱于单引号:
在这里插入图片描述

4.2 声明

A=1      ##定义一个变量
echo $AB  ##此时表示AB是一个变量名,而系统中不存在该变量,所以输出值为空
echo ${A}B ##此时会输出1B,表示系统将A看作变量

在这里插入图片描述

4.3 变量的数组

表示方法含义
echo ${a[0]}数组中第一个元素
echo ${a[-1]}数组中最后一个元素
echo ${a[*]}数组中所有元素,*表示所有的数组元素是一个整体
echo ${a[@]}数组中所有元素,@表示每个元素都是个体
echo ${a[@]:0:3}#数组中1-3个元素
echo ${#a[@]}数组中元素的个数

在这里插入图片描述

5 linux中命令别名设置

直接输入alias命令,可以查看命令的别名:
在这里插入图片描述

5.1 临时设定

1)输入alias xie='vim’即可:
在这里插入图片描述

2)退出后重新登陆,则设定失效:
在这里插入图片描述

5.2 用户级别

只针对当前用户生效。
1)编辑vim ~/.bashrc文件,写入别名设定,输入source ~/.bashrc使设定生效:
在这里插入图片描述

2)切换用户后,则无法使用:
在这里插入图片描述

5.3 系统级别

只在当前系统中生效。
1)编辑vim /etc/bashrc 文件,输入别名设定。查看生效;切换用户,查看依旧生效:
在这里插入图片描述

5.4 删除

1)将/etc/bashrc 和~/.bashrc两个文件中的别名设定都删除,然后查看,发现别名设定依然存在:
在这里插入图片描述

2)使用“unalias xie”命令进行删除,删除完后再查看,别名设定消失:
在这里插入图片描述

6 用户环境变量修改

用户在操作系统时使用的命令搜索路径称为环境变量

  • 用户级别增加/mnt目录为环境变量

编辑~/.bash_profile文件,输入export PATH=$PATH:/mnt;source ~/.bash_profile使设定生效,然后echo $PATH查看,可以看到/mnt;切换用户后输入echo $PATH则无法看到:
在这里插入图片描述在这里插入图片描述

  • 系统级别增加/mnt目录为环境变量

同理,编辑/etc/.bash_profile文件,输入export PATH=$PATH:/mnt;source /etc/.bash_profile使设定生效,然后echo $PATH查看,可以看到/mnt;切换用户后输入echo $PATH依旧可以看到

7 利用命令的执行结果设定变量

7.1 直接利用命令执行结果

1)输入“date +%H:%M:%S”命令,表示显示时间,几点几分几秒;将该值赋值给TIME,可以看到这样直接赋值是不行的:
在这里插入图片描述

2)要将该命令的执行结果赋给变量可以给命令加上$(),但是这种方式只适合shell,输出该参数查看:
在这里插入图片描述

3)还可以用反向单引号引起来,这种方式适合于多种语言和环境,输出该参数查看:
在这里插入图片描述

7.2 脚本的传参

  • 非交互模式
参数含义
$0脚本本身
$1脚本后输入的第一串字符
$2脚本后输入的第二串字符
$3脚本后输入的第三串字符
$*脚本后所输入的所有字符,*表示将所有字符当一个字符串输出 eg:“westos linux python”
$@脚本后所输入的所有字符 ,@表示将所有字符分别看作多个字符 eg:‘westos’ ‘linux’ ‘python’
$#脚本后输入的字符串个数

1)编辑一个脚本文件,文件内容如下:
在这里插入图片描述

2)运行该脚本,并在后面不断写入字符串,其结果如下,该结果可说明各个参数的含义:
在这里插入图片描述

注意:编写shell头部时,~./vimrc文件是对当前的用户起作用,想要对系统中所有用户起作用,需要编辑etc/vimrc文件

  • 交互模式
命令含义
read WESTOS对WESTOS赋值
read -P “please input word”输出提示语
-s隐藏输入内容,即没有回显的显示

1)输入“read test ”命令,相当于给 test= 赋一个值,下面输入一个值,这两行操作总的来说表示test=hello lhy;查看test参数的值:
在这里插入图片描述

2)输入“read -p "input: " test ”命令,当read后只写参数什么都不加时,是没有提示的,所以加上 input表示输入,只所有带引号是要把input后面的空格转译;查看test参数的值:
在这里插入图片描述
3)编写一个脚本测试,输入hhhhhh后,会自动再显示一遍变量的值:
在这里插入图片描述

7 脚本函数

  • 定义:程序的别名
  • 设定方式:
    WORD( )
    {
    action1
    action2
    }

函数的使用可以简化代码,使得代码的结构更清晰,编写脚本,将一段脚本使用函数的方式书写,进行对比:
在这里插入图片描述
脚本运行结果,如此可以看出,函数可以减少大量重复代码的书写,使得代码简洁易懂;函数还可以实现递归调用:
在这里插入图片描述
注意:当函数中不需要传参数时,调用函数直接在相应的地方写如函数名即可,不需要添加()和其他参数;需要查un参数时,也不需要(),脚本中函数的调用与其他语言不一样,直接在后面写参数即可

8 脚本练习

1)建立一个名为userfile_user.sh的脚本,当脚本后面加上userfile用户名单及密码文件时,该文件里面的用户全部被建立:
在这里插入图片描述
测试脚本运行:
在这里插入图片描述

2)建立一个名为create_user.sh的脚本,脚本后写用户名,若用户名存在,则提示该用户存在,再次输入用户名称,直至输入的用户不存在;若用户名不存在,就提示输入密码,且密码无回显,然后将该用户建立出来;直到用户输入exit退出脚本:
在这里插入图片描述在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值