shell 编程 — 变量
首先要知道有那些种类的变量
Linux中 shell 变量分为 系统变量 和 用户自定义变量,这里不区分,所以单独列出,只是为了能快速上手。
- 用户变量
- 环境变量
- 位置参数变量
- 预定义变量
用户变量
- 定义变量:变量名=值 (等号两边无空格)
- 撤销变量:unset 变量名
- 声明静态变量:readonly 变量名。(该变量不能unset)
例一:定义变量
#!/bin/bash
#定义变量 A , 并赋值为100
A=100 #注等号两边无空格,且结尾不用加分号
echo "A=$A" #输出A的值
#控制台输出结果
A=100
:<<! 其他的输出形式,自行测试
echo $A
echo A=$A
echo "A=${A}" #{} 可以用来确定变量边界
!
例二:撤销变量
#!/bin/bash
#定义变量
A=102
echo A=$A
#撤销变量
unset A
echo A=$A
#显示结果
A=102
A= #对,这里就是啥都没有
例三:声明静态变量,不能unset
#!/bin/bash
readonly A=3 #声明静态变量
echo A=${A}
#错误示范 -- 销毁静态变量
unset A
echo A=${A}
#能在文本里写出来,但会在执行时报错
例四:利用变量存储命令返回结果
这里以 date
命令来演示
#!/bin/bash
A=`date` #存储当前时间,注意是 ` 号,不是单引号
echo A=${A}
#令一种写法
B=$(date)
echo B=$B
环境变量(全局变量)
- 设置环境变量语法 :export 变量名=变量值
- source 配置文件 :
- echo $变量名 :查询变量值
例一:定义环境变量
编辑/etc/profile
添加 export NIHAO="nihao"
再在Linux命令行执行:source /etc/profile
最后在Linux命令行输入:echo $NIHAO
这样就能设置好我们自定义的环境变量了
位置参数变量
适用场景:我们在使用shell 脚本时希望获得命令行参数信息,就要使用位置参数变量
比如:./myshell.sh 111 222
其中111
和 222
就是传入的命令行参数
用法
- $n:n 为数字,$0 代表命令本身,$1-$9 代表 第一到第九个参数,十以上的参数需要用大括号,如${10}
- $* :代表命令行中所有的参数,$*把所有的参数看成一个整体
- $@:代表命令行中所有的参数,不过该命令是把每个参数区分对待
- $#:代表命令行中所有参数的个数
例一:编写一个脚本,并在脚本中获取命令行的参数信息
#!/bin/bash
echo "p0=$0,p1=$1,p2=$2"
echo "所有参数:$*"
echo "$@"
echo "参数数量:$#"
:<<! 结果
p0=./myshell.sh,p1=111,p2=222
所有参数:111 222
111 222
参数数量:2
!
预定义变量
Shell 设计者事先已经定义好的变量,可以直接在Shell脚本中使用
语法
- $$:当前进程的进程号。
- $!:后台运行的最后一个进程的进程号。
- $?:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
案例
条件:一个存在的脚本 vr.sh
,当前脚本preVar.sh
vr.sh
内容
#!/bin/bash
A=`date`
echo A=$A
preVer.sh
内容
#!/bin/bash
echo "当前进程号=$$"
#后台方式运行 vr.sh
./vr.sh &
echo "最后一个执行的进程的进程号=$!"
echo "执行的值=$?"
:<<! 结果
当前进程号=5682
最后的的进程号=5683
执行的值=0
[root@xq100 shellCode]# A=Mon Sep 5 21:44:57 CST 2022
!
新人,如有错误,望指出,谢谢!