shell脚本中的变量

shell脚本中的变量

  • 1 变量的定义
  • 2 shell脚本中变量的定义方法
    • 2.1 环境级别
    • 2.2 用户级别
    • 2.3 系统级别
  • 3 变量名称
  • 4 变量的转译
    • 4.1 转译
    • 4.2 声明
    • 4.3 变量的数组
  • 5 linux中命令别名设置
    • 5.1 临时设定
    • 5.2 用户级别
    • 5.3 系统级别
    • 5.4 删除
  • 6 用户环境变量修改
  • 7 利用命令的执行结果设定变量
    • 7.1 直接利用命令执行结果
    • 7.2 脚本的传参
  • 7 脚本函数
  • 8 脚本练习

1 变量的定义

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

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

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

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

2.1 环境级别

环境级别的变量,在环境关闭后,变量就会失效。定义方法是“export a=1”
1)定义环境级别的变量,使用不同的方式运行脚本,如下所示:
shell脚本中的变量_第2张图片

2)退出该环境后,再运行脚本,变量值不会显示:
shell脚本中的变量_第3张图片

2.2 用户级别

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

2)先运行source ~/.bash_profile使该设定生效,然后在当前用户的环境下调用该脚本,发现变量生效,退出该环用户再登陆上时,变量依旧生效:
shell脚本中的变量_第4张图片

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

2.3 系统级别

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

3 变量名称

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

4 变量的转译

4.1 转译

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

下图表明“\”只能转译单个字符,而双引号可以批量转译:
shell脚本中的变量_第6张图片
双引号不能转译的特殊符号:
shell脚本中的变量_第7张图片
下图表示双引号的引用性要弱于单引号:
shell脚本中的变量_第8张图片

4.2 声明

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

shell脚本中的变量_第9张图片

4.3 变量的数组

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

shell脚本中的变量_第10张图片

5 linux中命令别名设置

直接输入alias命令,可以查看命令的别名:
shell脚本中的变量_第11张图片

5.1 临时设定

1)输入alias xie='vim’即可:
shell脚本中的变量_第12张图片

2)退出后重新登陆,则设定失效:
shell脚本中的变量_第13张图片

5.2 用户级别

只针对当前用户生效。
1)编辑vim ~/.bashrc文件,写入别名设定,输入source ~/.bashrc使设定生效:
shell脚本中的变量_第14张图片

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

5.3 系统级别

只在当前系统中生效。
1)编辑vim /etc/bashrc 文件,输入别名设定。查看生效;切换用户,查看依旧生效:
shell脚本中的变量_第15张图片

5.4 删除

1)将/etc/bashrc 和~/.bashrc两个文件中的别名设定都删除,然后查看,发现别名设定依然存在:
shell脚本中的变量_第16张图片

2)使用“unalias xie”命令进行删除,删除完后再查看,别名设定消失:
shell脚本中的变量_第17张图片

6 用户环境变量修改

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

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

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

  • 系统级别增加/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)编辑一个脚本文件,文件内容如下:
shell脚本中的变量_第19张图片

2)运行该脚本,并在后面不断写入字符串,其结果如下,该结果可说明各个参数的含义:
shell脚本中的变量_第20张图片

注意:编写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后,会自动再显示一遍变量的值:
shell脚本中的变量_第21张图片

7 脚本函数

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

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

8 脚本练习

1)建立一个名为userfile_user.sh的脚本,当脚本后面加上userfile用户名单及密码文件时,该文件里面的用户全部被建立:
shell脚本中的变量_第24张图片
测试脚本运行:
shell脚本中的变量_第25张图片

2)建立一个名为create_user.sh的脚本,脚本后写用户名,若用户名存在,则提示该用户存在,再次输入用户名称,直至输入的用户不存在;若用户名不存在,就提示输入密码,且密码无回显,然后将该用户建立出来;直到用户输入exit退出脚本:
shell脚本中的变量_第26张图片shell脚本中的变量_第27张图片

你可能感兴趣的:(linux,shell脚本,shell,linux,运维)