大 纲

基本语法

#!/bin/bash
echo "Hello World !"

特殊字符用法

参数 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

运算

基本运算符

符号 说明 实例
+ 加法 expr $a + $b 结果为 30。
- 减法 expr $a - $b 结果为 -10。
* 乘法 expr $a \* $b 结果为 200。
/ 除法 expr $b / $a 结果为 2。
% 取余 expr $b % $a 结果为 0。
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
!= 比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

关系运算符

符号 说明 实例
eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ]
-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ]
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ]
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ]
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ]
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ]

布尔运算符

符号 说明 实例
! 非运算, true 返回 false,false 返回 true。 [ ! false ]
-o 或运算,有 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ]
-a 与运算,都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ]

逻辑运算符

符号 说明 实例
&& 逻辑的 and [[ $a -lt 100 && $b -gt 100 ]]
` `

字符串运算符

符号 说明 实例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ]
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ]
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ]
-n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n "$a" ]
$ 检测字符串是否为空,不为空返回 true。 [ $a ]

执行脚本

chmod +x visdot.sh
#为脚本设置可执行权限

./visdot.sh
#执行脚本

变量

变量命名规则

A="XXX"
  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

基本用法

使用定义过的变量需在变量名前加 $ 符号,在需要区分变量名时,可在变量名外添加花括号。

A="XXX"
echo $A
echo ${A}

只读变量

readonly A #将变量 A 转化为只读变量

删除变量

unset A #将变量 A 删除

Shell 字符串

Shell 数据类型主要包括「字符串」和「数字」,字符串外可用单引号或双引号,也可不用引号。

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

获取字符串长度

A="xxxx"
echo ${#A} #输出 4

提取子字符串

从字符串 A 第 2 个字符截取至第 3 个字符。

A="abcdef"
echo ${A:1:3}
# 输出 bcd

脚本语言索引值都是从 0 开始的。

查找子字符串

在字符串 A 中查找字符 d 或 f 的位置,哪个字母先出现就计算哪个。

A="abcdef"
echo `expr index "$A" df`
# 输出 4

Shell 数组

用括号来表示数组,各元素用「空格」隔开。

GA=(a b c d ... n)
GA=(
a
b
c
)
GA[0]=a
GA[1]=b
GA[2]=c

读取数组

A=${GA[1]}
# 将数组 GA 中第 2 个值赋给变量 A。

echo ${GA[@]}
# 将数组 GA 中全部值输出。

参考资料

  1. 菜鸟教程