1.shell脚本变量
1)定义变量
变量=值
(两侧不能有空格)
2)调用变量
$变量
全写形式是${变量}
eg:
a=hello # 定义变量,hello是字符串,等号两边不能有空格
echo $a # 使用变量,要加$符号
3)使用变量接收命令返回值
A=$(ls -la) 等价于反引号
3)变量相加
a=4+5
echo ${a}123 # 不能写为$a123,这样系统会把a123当成变量
2.环境变量
系统变量:保存和系统操作环境相关的数据。
H
O
M
E
、
HOME、
HOME、PWD、
S
H
E
L
L
、
SHELL、
SHELL、USER等等
1.使用set
命令可以查看所有环境变量,如$HOME、$PWD、$SHELL、$USER
2.使用unset
可以删除环境变量
2.shell 脚本中可以直接使用$HOME、$PWD、$SHELL、$USER
这些变量
3.shell 脚本可以定义环境变量,这样其他的shell脚本就可以使用 export 变量名=变量值
3.位置参数变量
位置参数变量:主要用来向脚本中传递参数或数据,变量名不能自定义,变量作用固定。
变量 | 描述 |
---|---|
$n | n为数字,$0代表命令本身,$1-$9代表第一到第9个参数,十以上的参数需要用大括号包含,如${10}。 |
$* | 代表命令行中所有的参数,把所有的参数看成一个整体。以"$1 $2 … $n"的形式输出所有参数 |
$@ | 代表命令行中的所有参数,把每个参数区分对待。以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数 |
$# | 代表命令行中所有参数的个数。添加到shell的参数个数 |
在脚本中可以输入shift:
shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$# 的值减1,用于分别处理每个参数,移出去的参数不再可用
$* 和 $@的区别
$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" “包含时,都以”$1" “
2
"
…
"
2" … "
2"…"n” 的形式输出所有参数
当它们被双引号" “包含时,”$*" 会将所有的参数作为一个整体,以"$1 $2 …
n
"
的
形
式
输
出
所
有
参
数
;
"
n"的形式输出所有参数;"
n"的形式输出所有参数;"@" 会将各个参数分开,以"$1" “
2
"
…
"
2" … "
2"…"n” 的形式输出所有参数
4.预定义变量
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
变量 | 描述 |
---|---|
$? | 执行上一个命令的返回值 执行成功,返回0,执行失败,返回非0(具体数字由命令决定) |
$$ | 当前进程的进程号(PID),即当前脚本执行时生成的进程号 |
$! | 后台运行的最后一个进程的进程号(PID),最近一个被放入后台执行的进程 & |
退出状态码 $?
状态码 | 描述 |
---|---|
0 | 命令成功结束 |
1 | 一般性未知错误 |
2 | 不适合的shell命令 |
126 | 命令不可执行 |
127 | 没找到命令 |
128 | 无效的退出参数 |
128+x | 与Linux信号x相关的严重错误 |
130 | 通过Ctrl+C终止的命令 |
255 | 正常范围之外的退出状态码 |
eg: aa=$((4+5))
bb=expr 4 + 5