(三)、Shell变量及其操作
包括Shell变量概述、Shell局部变量、Shell环境变量、Shell 数组变量、Shell位置变量、Shell变量的赋值、Shell变量替换操作(${value:-word}、${value:=word}、${value:offset}、${value:offset:length}、${value#pattern}、${value%pattern}、${value/pattern/strin
文章目录
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的内容

更多推荐

所有评论(0)