高级变量
runner@liyongke:~$ echo $num
88
runner@liyongke:~$ r=${num-'99'}
runner@liyongke:~$ echo $num
88
r=${num-'99'}
,这个命令的作用是如果变量 num
为空或者未设置,那么就将变量 r
的值设置为 99
,如果变量 num
有值,那么就将变量 r
的值设置为变量 num
的值。在你的例子中,变量 num
有值为 88
,所以 r
的值也为 88
。
#!/usr/bin/env bash
name=${filename:-"testmesg.txt"}
cat > $name <<HERE
From:liyongke
To:zhang
Subject:测试一下
这是一封测试信,请勿回复!
HERE
cat > $name <<HERE
:这里使用了重定向和 here document 的方式,将后续的内容写入到由变量 name
指定的文件中。
runner@liyongke:~$ echo $((${j:-8}*10))
80
$(())
是算术扩展,用于进行算术运算。在这里,将前面得到的值(如果j
未设置则为8
)乘以10
。- 最后,
echo
命令输出结果,即80
。
runner@liyongke:~$ echo $((k+5))
5
- 在求值时,如果算术式中变量不存在或空值,则该变量的值为0.
# 1.先使用,在运算
runner@liyongke:~$ m=10
runner@liyongke:~$ echo $((5+m++))
15
# 2.先运算,在使用
runner@liyongke:~$ n=12
runner@liyongke:~$ echo $((1+(++n)))
14
- 在这个表达式中,
m++
是先使用m
的当前值进行运算,然后再将m
的值自增1
。 - 所以先计算
5 + 10
得到15
,然后m
的值变为11
。 - 最终输出
15
。 n=12
:将变量n
赋值为12
。echo $((1+(++n)))
:- 这里的
++n
是先将n
的值自增1
,然后再使用自增后的n
的值进行运算。 n
先变为13
,然后计算1 + 13
得到14
。- 最终输出
14
。
- 这里的
runner@liyongke:~$ m=8
runner@liyongke:~$ r=$((m<<1))
runner@liyongke:~$ echo $r
16
在 Bash 中,<<
是左移操作符。m<<1
表示将变量 m
的值(这里是 8
)在二进制下向左移动一位。
8 的二进制表示为 1000
,向左移动一位后变为 10000
,也就是十进制的 16
。
所以,先将 m<<1
的结果赋值给变量 r
,然后使用 echo $r
输出变量 r
的值,结果为 16
。
runner@liyongke:~$ i=100
runner@liyongke:~$ r=$((i>80?1:0))
runner@liyongke:~$ echo $r
1
这里的 i>80?1:0
是一个条件表达式。如果 i
的值大于 80
,那么整个表达式的值为 1
;如果 i
的值不大于 80
,那么表达式的值为 0
。
首先,将 i
赋值为 100
。由于 100
大于 80
,所以条件表达式的结果为 1
,并将这个结果赋值给变量 r
。最后使用 echo $r
输出变量 r
的值,即 1
。
declare的用法
使用declare事先设定变量a的属性为“整数”
runner@liyongke:~$ declare -i a
runner@liyongke:~$ a=8+9
runner@liyongke:~$ echo $a
17
let的用法
let就是让变量重新赋值。
runner@liyongke:~$ m=12
runner@liyongke:~$ let m=20
runner@liyongke:~$ echo $m
20