定义一个变量例子:
name=xintiaobao
number=100
注意: 1,变量名和等号之间不能有空格;
2,首个字符必须为字母(a-z,A-Z)。
3, 中间不能有空格,可以使用下划线(_)。
4, 不能使用标点符号。
5, 不能使用bash里的关键字
使用变量:
只需要在一个定义过的变量前面加上美元符号 $ 就可以了, 另外,对于变量的{} 是可以选择的, 它的目的为帮助解释器识别变量的边界.
举个例子:
name="xintiaobao"
echo $name
echo ${name}
echo "my name is ${name}!"
运行
xintiaobao
xintiaobao
my name is xintiaobao!
重定义变量: 直接把变量重新像开始定义的那样子赋值就可以了:
name="xintiaobao"
name="zhangx"
只读变量: 用 readonly 命令 可以把变量字义为只读变量。
readonly name="xintiaobao"
删除变量: 使用unset命令可以删除变量,但是不能删除只读的变量。用法:
unset variable_name
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
特殊变量:
* 和 @ 的区别为: * 和 @ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"1" "n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"1 2 … n"的形式输出所有参数;"1" "
$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。
转义符: 在echo中可以用于的转义符有:
使用 echo 命令的 –E 选项禁止转义,默认也是不转义的; 使用 –n 选项可以禁止插入换行符;
使用 echo 命令的 –e 选项可以对转义字符进行替换。
命令替换:
它的意思就是说我们把一个命令的输出赋值给一个变量,方法为把命令用反引号(在Esc下方)引起来. 比如:
directory=`pwd`
echo $directory
运行得到当前的目录
/xx/xx/xx/test
变量替换:
可以根据变量的状态(是否为空、是否定义等)来改变它的值.
举个例子说明下${var:-word}:
name="xintiaobao"
echo ${name:-1}
运行得到
xintiaobao
#name="xintiaobao"
echo ${name:-1}
运行得到
1
举个例子说明下${var:=word}:
name=""
echo ${name:=zhangx}
echo $name
运行结果为
zhangx
zhangx
说明name为空时,name被替换.
算数运算符: 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr. 下面使用expr进行; expr是一款表达式计算工具,使用它可以完成表达式的求值操作;
举个例子
a=10
b=20
expr $a + $b
expr $a - $b
expr $a \* $b
expr $a / $b
expr $a % $b
运行结果
30
-10
200
0
10
注意: 1. 在expr中的乖号为:\*
2. 在 expr中的 表达式与运算符之间要有空格,否则错误;
3. 在[ a == b ]与[ a != b ]中,要需要在方括号与变量以及变量与运算符之间也需要有括号, 否则为错误的。
关系运算符:
只支持数字,不支持字符串,除非字符串的值是数字。常见的有:
注意:也别忘记了空格;
布尔运算符:
字符串运算符:
文件测试运算符:
检测 Unix 文件的各种属性。