Shell变量概述

(1)、Shell变量分为局部变量和环境变量

(2)、局部变量,属于创建它的shell,不会传给该shell派生的任何子进程

(3)、环境变量:会被父进程传给子进程

Shell局部变量

(1)、局部变量的作用范围被限定在当前shell中,比如:定义在脚本中的局部变量,当这个脚本执行结束,该变量不再可用,也就是说,他们超过了作用域

(2)、局部变量的定义:

name=jack  # (定义局部变量name,类型为字符串)
echo $name  # (输出局部变量name的值)

declare address=BJ  # (定义局部变量address,类型为字符串)
echo $address

declare -i n=100  # (定义整型变量n,并赋值为100)
echo $n

declare -r read_only=10  # (定义只读变量,值不能更改)

unset  # 变量名//取消变量,适合各类变量的取消

在这里插入图片描述

(3)、预定义变量,shell常用的预定义变量如下:

  • $#:表示命令行中位置参数的数量

  • $*:表示所有位置参数的内容

  • $?:表示命令执行后返回的状态,用于检查上一个命令执行的是否正确。命令退出状态为0表示命令执行正确,任何非0的值表示命令执行错误

  • $$:表示当前进程的进程号

  • $!:表示后台运行的最后一个进程的进程号

  • $0:表示当前执行的进程的进程名

#!/bin/bash

count=$(cat /etc/passwd|wc -l)

echo $count
echo $#
echo $0,$1,$2,$3
echo $*

result=$(lsl)
n=$?
echo $n

在这里插入图片描述

vi abc&:将进程放在后台运行;fg 1:将后台进程调回前台

在这里插入图片描述

Shell环境变量

(1)、环境变量是指用户登录后系统预先设定好的一些shell变量,其功能是设置用户的shell环境

(2)、环境变量的值一般由Linux系统自行维护,会随着用户状态的改变而改变,用户可以通过读取环境变量来了解自己的当前状态

(3)、用户可以通过export命令将局部变量设置为环境变量

(4)、环境变量的作用范围为当前的shell以及由当前shell派生的子shell中

(5)、定义环境变量有两种方法:

  • 使用export创建

  • 使用declare -x创建

#!/bin/bash

echo $host
echo $port

在这里插入图片描述

注:host=aaa为局部变量,如果不定义为环境变量,firsh.sh脚本中echo $host是读取不到的

(6)、典型的环境变量:

  • $USER:表示当前用户的登录名称

  • $LOGNAME:同USER,表示当前用户的登录名称

  • $UID:表示当前用户的UID号

  • $SHELL:表示用户使用的登录shell

  • $HOME:表示用户的宿主目录

  • $PWD:表示用户当前的工作目录

  • $PATH:表示当前用户的命令搜索路径

在这里插入图片描述

Shell 数组变量

(1)、Bash shell创建数组的方法有两种:

  • 直接把多个值放在小括号中赋值给变量

  • 使用declare -a命令创建数组

(2)、数组元素的下标从0开始,使用${数组名[n]}来访问数组里面的元素

(3)、使用${数组名[*]}来访问数组全部元素

declare -a arr=(a b c)  # 创建数组arr,并赋值
# arr[3]=d  # 给单个数组元素赋值
echo ${arr[0]}  # 输出数组的一个元素
echo ${arr[*]}  # 输出数组全部元素
echo ${#arr[*]}  # 输出数组元素的个数

在这里插入图片描述

Shell位置变量

(1)、在执行shell脚本文件时,除了输入的第一个字段(命令名或脚本程序名)以外,其余的字符参数按照从左到右的顺序依次赋值给位置变量

(2)、需要引用这些位置变量的值时,采用“$n”的格式,其中n是参数的位置序号(从1~9)

(3)、可以从命令行传递参数给脚本,位置参数用于在脚本中得到它们的值

(4)、查看系统全部变量:

  • set命令可以显示shell的全部变量

  • env命令显示环境变量(比set查出的少)

(5)、获取变量长度:${#变量名}

在这里插入图片描述

Shell变量的赋值

(1)、变量赋值-引号:双引号里面的变量内容会被解析,单引号里面的内容不会被解析

name="Peter Li"
echo $name

name='Peter Li'
echo $name

在这里插入图片描述

(2)、变量的赋值-反撇号(``)或$()将命令的结果赋值给变量

time=`date`
echo $time

time=$(date)
echo $time

在这里插入图片描述

在这里插入图片描述

Shell变量替换操作

1、${value:-word}

当变量未定义或者值为空时,返回值为word的内容,否则返回变量的值

在这里插入图片描述

2、${value:=word}

若变量未定义或者值为空时,在返回word的值的同时将word赋值给value

在这里插入图片描述

3、${value:offset}

从变量中提取子串,offset表示开始提取的位置

在这里插入图片描述

4、${value:offset:length}

从变量中提取子串,从offset位置开始提取length长度的子字符串

在这里插入图片描述

5、${value#pattern}

去掉value中与pattern相匹配的部分,条件是value的开头与pattern相匹配

在这里插入图片描述

6、${value%pattern}

从value的尾部与pattern相匹配的去掉

在这里插入图片描述

7、${value/pattern/string}

进行变量内容的替换,把与pattern匹配的部分替换为string的内容

在这里插入图片描述


Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐