大 纲

基本语法

#!/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. 菜鸟教程