Bash变量

版权声明:作者已开启版权声明,如转载请注明转载地址。 https://blog.csdn.net/qq_34829447/article/details/82818849

一.什么是变量与变量的分类

1.什么是变量?

  • 变量是计算机内存的单元,其中存放的值可以改变
  • 变量让你能够把程序中准备使用的每一段数据都赋给一个简短、易于记忆的名字,因此它们十分有用

2.变量命名规则

  • 变量名必须以字母或下划线打头,名字中间只能由字母数字下划线组成
  • 变量名的长度不得超过255字符
  • 变量名在有效的范围内必须是唯一的
  • 在Bash中,变量的默认类型都是字符串型

3.常规变量按照存储数据分类

  • 字符串型
  • 整型
  • 浮点数
  • 日期型
  • 但Bash中变量的默认类型都是字符串型

4.变量的分类

  • 用户自定义变量。变量自定义的。
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的。
  • 位置参数变量(其实就是预定义变量的一种):这种变量主要是用来向脚本当中传递参数或数据的。变量名不能自定义,变量作用是固定的
  • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

二.用户自定义变量

1.定义变量

  • 变量名=变量值

    注意:等号左右不能有空格,若变量值有空格则必须用双引号、单引号括起来

    #eg.
    x=5
    name="jie cao"
    

2.变量调用

  • 输出变量中的值:echo $变量名

    #eg.
    echo $x
    echo $name
    
  • 变量默认字符串

    #eg.
    x=5
    y=6
    z=$x+$y#打印5+6(默认字符串)
    
  • 变量叠加

    #eg.
    x=123
    x="$x"456#123456 第一种方式
    x=${x}789#123456789 第二种方式
    
  • 变量查看

    • set选项查询系统下所有生效的变量(包括系统和自定义)

      • -u 如果设定此选项,设置调用未声明变量时会报错(默认无任何提示)

        #eg.
        echo $ss
         #当打印ss输出为空时,则可能ss不存在或ss值为空
        set -u#设置调用未声明变量时报错
        echo $ss#当ss不存在时会提示bash: ss: unbound variable
        
  • 删除变量unset 变量名

    #eg.
    unset name#删除name变量
    

三.环境变量

  • 环境变量与用户自定义变量的区别

    • 用户自定义变量只在当前的Shell中生效
    • 环境变量在当前Shell和这个Shell的所有子Shell中生效
    • 变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
  • pstree查看bash树

  • 用户自定义环境变量

    • export 变量名=变量值
    • 变量名=变量值 export 变量名
  • 查看环境变量

    • set查看所有变量(当前Shell环境的用户自定义变量和环境变量)
    • env查看环境变量
  • 查看环境变量$变量名

  • 删除环境变量unset 变量名

  • 常用环境变量

    环境变量 含义
    HOSTNAME 主机名
    SHELL 当前的Shell
    TERM 终端环境
    HISTSIZE 历史命令条数
    SSH_CLIENT 当前操作环境是用SSH连接的,这里记录客户端ip
    SSH_TTY ssh连接的终端时pts/1
    USER 当前登录的用户
    • PATH变量:系统查找命令的路径
      • echo $PATH查看PATH环境变量
      • PATH="$PATH":/root/sh增加PATH变量的值【临时赋值,重启不生效】
    • PS1环境变量:命令提示符设置【命令提示符就是输入的时候前面的提示内容】(env看不到,需要用set看)
      • \d显示日期,格式为“星期 月 日”
      • \H显示完整的主机名,如默认主机名“localhost.localdomain”
      • \t显示24小时制时间,格式为“HH:MM:SS”
      • \A显示24小时制时间,格式为“HH:MM”
      • \u显示当前用户名
      • \w显示当前所在目录的完整名称
      • \W显示当前所在目录的最后一个目录
      • \$提示符,如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”
  • 当前语系查询

    • locale:查询当前系统语系
      • LANG定义系统主语系变量
      • LC_ALL定义整体语系的变量
    • 查看当前语系(当前生效的环境)echo $LANG
    • 查看Linux支持的所有语系locale -a | more
    • 查看系统默认语系(下次开机后的语系)cat /etc/sysconfig/i18n

四.位置参数变量

位置参数变量 作用
$n n为数字,$n代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}【如在脚本汇中传递参数】
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
  • 实例代码

    #使用$n计算两个参数的加分结果
    #!/bin/bash
    x=$1
    y=$2
    sum=$(($x+$y))
    echo $sum
    #使用方式: bash testjiafa.sh 1 2 打印3
    
    #测试其他参数 执行:bash weizhi.sh 8 9 0 100
    #!/bin/bash
    echo "\$* : $*"
    echo "\$@ : $@"
    echo "\$# : $#"
    #$* : 8 9 0 100
    #$@ : 8 9 0 100
    #$# : 4
    
    #$*和$@的区别
    #!/bin/bash
    for i in "$*"#此时$*是一个整体,故循环一次
    for i in "$@"#此时$@是每个参数区分别对待,故循环所有参数内容
    

五.预定义变量

预定义变量 作用
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
  • 接收键盘输入:read [选项] [变量名]

    • -p提示信息。在等待read输入时,输出提示信息

    • -t秒数。read命令会一直等待用户输入,使用此选项可以指定等待时间

    • -n字符数。read命令只接受指定的字符数,就会执行

    • -s隐藏输入的数据。适用于机密信息的输入

    • 实例

      #测试输入-p提示提示信息,并输入jack的结果
      #!/bin/bash
      read -p "please input your name:" name
      echo $name
      #运行结果,输入jack
      #bash readtest.sh
      #please input your name:jack
      #jack
      
      read -p "wait 20s" -t 20 name#等待20s后自动退出
      read -p "input password" -s password#输入密码(隐藏)
      read -p "input sex[M/F]" -n 1 sex#只能输入一个数据就执行之后的内容
      
    • read和位置参数变量的对比:位置参数只能在调用的时候传递参数,read可以输出对应的提示信息后再进行处理。

猜你喜欢

转载自blog.csdn.net/qq_34829447/article/details/82818849
今日推荐