持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
前言:因为学习husky这个类库,遇到了shell脚本但是却不是很熟悉,所以总结一下,下篇更新学习husky.
shell脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。 由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。
第一个shell脚本
#!/bin/bash
echo "Hello World !"
- #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
- echo 命令用于向窗口输出文本。
运行
- 将上面的代码保存为 test.sh,并 cd 到相应目录:
- ./test.sh #执行脚本
Shell-变量
- 定义变量时,变量名不加美元符号
name='caiji'
命名规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线 _。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
使用变量:
name="caiji"
echo $your_name
echo ${your_name}
只读变量:
- 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
readonly name="caiji"
name = 'caiji2'
- /bin/sh: NAME: This variable is read only.
删除变量:
unset name
- 变量被删除后不能再次使用。unset 命令不能删除只读变量。
Shell 字符串
单引号
str='this is a string'
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号
name="caiji"
str="Hello, I know you are \"$name\"! \n"
echo $str
- 获取字符串长度 ${#name}
- 提取子字符串 ${name1:4}
Shell 传递参数
- 我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
另外,还有几个特殊字符用来处理参数:
- '$#' :参数个数
- '$*' :显示所有的参数。
- '$$' :当前进程ID号
- '$!' :后台运行的最后一个进程的ID号.
- '$?' :显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
Shell 数组
-Bash Shell 只支持一维数组(不支持多维数组)
array_name=(value1 value2 ... valuen)
- 读取数组:${array_name[index]}
Shell 基本运算符
- 算数运算符
- 关系运算符
- 布尔运算符
- 字符串运算符
expr:表达式计算工具,使用它能完成表达式的求值操作。
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
算术运算符
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
| 运算符 | 说明 | 举例 |
|---|---|---|
| + | 加法 | 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。 | [ b ] 返回 false。 |
| != | 不相等。用于比较两个数字,不相同则返回 true。 | [ b ] 返回 true。 |
关系运算符
| 运算符 | 说明 | 举例 |
|---|---|---|
| -eq | 相当于== | [ b ] 返回 false。 |
| -ne | 相当于!== | [ b ] 返回 true。 |
| -gt | 相当于> | [ b ] 返回 false。 |
| -lt | 相当于< | [ b ] 返回 true。 |
| -ge | 相当于>= | [ b ] 返回 false。 |
| -le | 相当于<= | [ b ] 返回 true。 |
流程判断
1.if 判断
if condition
then
command1
command2
...
commandN
fi//末尾的 fi 就是 if 倒过来拼写
2.for 循环
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
3.while 语句
while condition
do
command
done
实例
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b : a 不等于 b"
fi
布尔运算符
| 运算符 | 说明 | 举例 |
|---|---|---|
| ! | 取反 | [ ! false ] 返回 true。 |
| -o | 或运算。 | [ b -gt 100 ] 返回 true。 |
| -a | 与运算。 | [ b -gt 100 ] 返回 false。 |
逻辑运算符
| 运算符 | 说明 | 举例 | ||||
|---|---|---|---|---|---|---|
| && | and运算 | [[ a -lt 100 && b -gt 100 ]] 返回 false | ||||
| or运算 | [[ $a -lt 100 | $b -gt 100 ]] 返回 true |