shell基础2-变量

变量

变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问,访问的值是可变的

  • 不能以数字开头(标准规范为大写)
  • 变量值默认类型为字符串型,具体使用需要进行转换
  • 变量左右不能有空格(为了好看)
  • 有空格需要使用双引号
  • 变量多次赋值,最后一次为准

变量的分类

  • 用户自定义变量:名称:自定义 作用:自定义 内容:自定义

  • 环境变量:用于系统环境相关的数据

    • 用户自定义环境变量:名称:自定义 作用:自定义 内容:自定义
    • 系统自带环境变量:名称:确定 作用:确定 内容:自定义
  • 位置参数变量:用于脚本传递参数

    • 名称:确定 作用:确定 内容:自定义
  • 预定义变量:bash已经定义好的变量

    • 名称:确定 作用:确定 内容:自定义

用户自定义变量

name=test
#创建自定义变量
name=test1
#修改也就是覆盖变量值
$name
#变量调用
unset name
#删除变量
set -u
#查看未定义过变量名,值为空,而如果定义为空,这样就无法区分,使用set -u可以区分,变量不存在就报错

环境变量

环境变量在父shell和子shell中都是生效的,而用户自定义只在当前shell下

用户自定义环境变量

export name=test
#就是基于用户自定义加了export
#set 查看所有变量
#env 查看环境变量

系统自带环境变量

env

LANG=en_US.UTF-8   #语言
HISTCONTROL=ignoredups
HOSTNAME=host138   #主机名
OLDPWD=/bin   
XDG_SESSION_ID=3
USER=root      #用户名
PWD=/root 
HOME=/root
SSH_CLIENT=192.168.26.1 63647 22
SSH_TTY=/dev/pts/0
MAIL=/var/spool/mail/root
SHELL=/bin/bash  #shell类型
TERM=x term
SHLVL=2
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_RUNTIME_DIR=/run/user/0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#系统命令查找路径
HISTSIZE=1000  #历史命令记录数
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/usr/bin/env
#系统自带环境变量都是会影响到系统正常运行

PS1环境变量(命令提示符)
在这里插入图片描述在这里插入图片描述

vi /etc/bashrc
#永久修改PS1环境变量

语系变量

[root@host138 ~]# echo $LANG
en_US.UTF-8
#保存的是当前的操作语系
[root@host138 ~]# locale -a | wc -l
865
#查看系统支持的语言

[root@host138 ~]# locale 
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
#查看系统已经安装的语言

位置参数变量

  • $n:n为数字,0代表本身,$1- 9 代 表 第 一 个 到 第 九 个 参 数 , 10 以 上 的 参 数 用 9代表第一个到第九个参数,10以上的参数用 910{10}(常用)
  • ∗ : 代 表 命 令 中 的 所 有 参 数 , *:代表命令中的所有参数, *所有参数看成一个整体
  • $@:代表命令中的所有参数,每个参数区分对待,属于单个**(常用)**
  • $#:统计参数的个数
#!bin/bash
a=$1
b=$2

echo $a 
echo $b

[root@host138 ~]# bash test.sh 1 2
1
2
#传递2个参数给脚本,这种方式往往只适合写脚本的本人使用,因为别人不知道需要输入几个参数,以及各式是什么

#!bin/bash

echo $*
echo $*
echo $#
[root@host138 ~]# bash test.sh 1 2 3 4 5
1 2 3 4 5  #代表是一个整体
1 2 3 4 5  #每个数值都是单个整体
5  #参数个数
#但是缺陷就是其他用户无法知道需要输入什么类型的值

预定义变量

  • $? 最后一次运行命令的返回值,0代表正确,其他数值就是不正确
  • $$ 当前的进程的进程号
  • $! 后台运行的最后一个进程号
    在这里插入图片描述

read接收键盘输出

位置参数变量存在很多对其他用户的缺陷,不是编写人员对于参数的个数和类型无法判断,而read加入了交互方式输入,对于用户就可以根据提示输入即可

  • -p 等待输入的提示信息,可以写明要求输出什么信息
  • -t 用户输入等待秒数
  • -n 输入一个字符,自动回车确定
  • -s 隐藏输入的内容,适合输入密码之类的安全信息
#!bin/bash

read -t 30 -p "Please enter whole number:" num1
read -t 30 -p "Please enter password :" -s num2

echo -e "\n$num1"
echo $num2

结果
[root@host138 ~]# bash test.sh 
Please enter whole number:11111
Please enter password :
11111
22222

运算符

declare声明变量类型

  • - 设置变量类型
  • + 去除变量类型
  • -i 声明为整数型
  • -r 声明只读,并不能修改和取消
  • -x 声明为环境变量
  • -p 显示声明变量的类型
  • -a 声明为数组型(也就是列表的意思)

但是还有很对类型不支持,日期型,布偶型、浮点型等等
declare存在很难用缺点。不推荐使用

$((运算))

在这里插入图片描述

默认变量都是字符型,无法进行运算

在这里插入图片描述

通过$((运算)) 进行运算,推荐使用

运算优先级(越大优先级越高)
在这里插入图片描述

也是不推荐使用,调整优先级可以直接通过小括号()
在这里插入图片描述

环境变量配置文件

source 配置文件

家目录下环境变量配置文件(当前shell生效)

  • .bash_profile
  • .bashrc

etc目录下的环境变量配置文件(全部shell生效)

  • /etc/profile.d/*.sh
  • /etc/profile
  • /etc/bashrc

配置文件调用过程
在这里插入图片描述

用户登入后加载的环境变量过程

在这里插入图片描述

非登入情况,su 或者 子shell

退出生效的环境变量文件

  • .bash_logout

默认为空,可以根据需求配置功能
系统需要执行logout 才生效

猜你喜欢

转载自blog.csdn.net/yangshihuz/article/details/110850509