一、变量
shell所有变量都是字符串类型
a=999
echo $a
shell中的变量无需指定类型,直接定义。使用时加上==$==符号。
变量与=直接不能有空格,否则会报错
b = 999
结果会输出:
bash: b: command not found
变量相加:
a=999
b=999
c=999
echo $a+$b+$c
结果:
999+999+999
为什么?shell所有变量都是字符串类型。字符串加字符串,就是把字符串连接起来。
二、shell变量分类
1、自定义变量
2、系统变量
常用系统变量:
$HOME 当前用户home目录
$PWD 当前目录
$SHELL 系统shell
$USER 用户
3、特殊变量
(1)$n
功能描述:n为数字。$0代表该脚本名称。$1~ 9 代 表 第 一 到 第 九 个 参 数 。 10 以 上 的 参 数 , 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数。10以上的参数,需要用大括号{}包含,如 9代表第一到第九个参数。10以上的参数,需要用大括号包含,如{10}。
#!/bin/bash echo $0 #输出文件名:1.sh echo $1 #输出第一个参数:10 echo $2 #输出第二个参数:20 echo $3 #输出第一个参数:30 echo $4 #输出第一个参数:40
bash 1.sh 10 20 30 40
结果:
1.sh
10
20
30
40(2)$#
功能描述:获取所有输入参数个数,常用于循环。
#!/bin/bash echo $0 #输出文件名:1.sh echo $1 #输出第一个参数:10 echo $2 #输出第二个参数:20 echo $3 #输出第一个参数:30 echo $4 #输出第一个参数:40 echo $#
bash 1.sh 10 20 30 40
结果:
1.sh
10
20
30
40
4(3)$*、$@
功能描述:$*代表命令行中所有的参数,$*把所有的参数看成一个整体。$@也代表命令行中所有的参数,不过$@把每个参数区分对待。
#!/bin/bash echo '$#'=$# echo '$*'=$* echo '$@'=$@
bash 2.sh aaa bbb ccc
结果:
$#=3
$*=aaa bbb ccc
$@=aaa bbb ccc
区别:#!/bin/bash for i in "$*" do echo $i done for j in "$@" do echo $j done
结果:
bash ff.sh aaa bbb ccc aaa bbb ccc aaa bbb ccc
(4)$?
功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令执行正确。如果这个变量的值为非0(具体是哪个好数,由命令自己决定),则证明上一个命令执行不正确。
#!/bin/bash echo $[1/0]
执行脚本,结果为(执行异常):
3.sh: line 2: 1/0: division by 0 (error token is “0”)
此时输出$?变量:
echo $?
结果:
1
再重新执行一条正确的命令:
echo #SHELL
此时再输出$?变量:
0
三、自定义变量注意事项
1、定义变量(不能有空格):变量=值
2、撤销变量:unset 变量
3、声明静态变量(不能unset 静态变量):readonly 变量
静态变量一经初始化,值不能再被更改,变量不能被撤销。
bash: unset: i: cannot unset: readonly variable
bash: i: readonly variable
变量定义到当前的shell。每次重新登陆,即一个新的连接,都会有新的shell环境。存放在内存中,关闭连接,内存会被回收。
四、运算符
基本语法:
(1)" ( ( 运 算 式 ) ) " 或 者 " ((运算式))" 或者 " ((运算式))"或者"[运算式]"
a=5; b=5; echo "$(($a+$b))"; echo "$[$a+$b]";
(2)expr +,-,*,/,%
注意:expr 运算符之间有空格
a=5; b=5; expr $a + $b
推荐使用第一种方式。