一、变量
变量命名须遵循如下规则:
l 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
l 中间不能有空格,可以使用下划线(_)。
l 不能使用标点符号。
l 不能使用bash里的关键字(可用help命令查看保留关键字)。
使用变量:
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:$name
只读变量:
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
用法如下:
#!/bin/bash
myUrl="http://www.google.com"
readonly myUrl
删除变量:
使用 unset 命s令可以删除变量。(unset 命令不能删除只读变量)
语法:
unset variable_name
变量类型:
运行shell时,会同时存在三种变量:
1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
二、字符串
拼接字符串:
greeting_1="hello, ${your_name} !"
获取字符串长度
ss="abcd"
echo ${#ss} #输出 4
三、Shell 数组
定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 ... 值n)
如:student=(value0 value1 value2 value3)
或者:
student=(
value0
value1
value2
value3
)
读取数组
读取数组元素值的一般格式是:
valuen=${student[n]}
使用 @ 符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
四、Shell注释
单行注释:以 # 开头的行就是注释,会被解释器忽略。
多行注释:除了使用多个#之外还可以用如下方式,
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
五、传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推。
1、脚本内如何获取脚本的名称? ($0)
2、脚本内如何获取第1~9个传入的参数值呢?($0~$9)
几个特殊字符用来处理参数:
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有传递的参数。
$$ 脚本运行的当前进程ID号
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
六、shell基本运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 ` 而不是单引号 '):
#!/bin/bash
val=`expr 2 + 2` //注意空格
echo "两数之和为 : $val"
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
#!/bin/bash
a=10
b=20
val=`expr $a \* $b`
echo "a * b : $val" //乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
val=`expr $b / $a` //除法
echo "b / a : $val"
七、关系运算符
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
八、布尔运算符
九、逻辑运算符
以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20。
十、字符串运算符
下表列出了常用的字符串运算符,假定变量 a 为 "abc",变量 b 为 "efg":
十一、文件测试运算符
举个例子:
#!/bin/bash
file="/var/www/runoob/test.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
十二、文件测试(test命令)