1.set命令和脚本安全
set命令可以用来定制shell 环境 type set 显示set 变量的类型
$- 变量
$- 是一个特殊的变量 表示当前shell 的选项状态
使用echo $- 返回一个包含当前shell 设置的选项的字符串,这些选项控制shell 的行为
在终端执行
echo $-
并看到输出himBHs
时,意思是当前 shell 的选项状态是himBHs
。可以拆解这些字符来理解它们的含义:
h
:表示启用"hashing"。在这种模式下,shell 会缓存最近使用的命令的路径,优化命令查找速度。 set +h 禁用缓存 set -h 开启i
:表示交互式模式。这意味着当前 shell 是一个交互式的 shell(例如,你在终端中直接输入命令时,shell 就是交互式的)。m
:表示监控模式(monitoring)。这通常用于进程管理,它允许 shell 在后台监视作业状态。B
:braceexpand 表示大括号扩展H
:表示启用历史命令的功能。这意味着 shell 会记录并允许访问历史命令。!!返回最近的一个历史命令 !n 返回第n个命令s
:表示启用启动脚本的功能。这通常用于启动时脚本的处理。以上的任意的选项都可以通过 set + 来关闭 使用set - 开启
2.set 命令实现脚本安全
-u 在扩展一个没有设置的变量时,显示错误信息,等同set -o nounset
-e 如果一个命令返回一个非0退出状态值(失败) 就退出,等同set -o errexit
-o option 显示,打开或者关闭选项
显示选项: set -o
打开选项: set -o 选项
关闭选项: set +o 选项
-x 当执行命令时,打印命令参数 等价bash -x *.sh
help set 查看set 详细用法
3.算术运算
bash 中的算术运算
+,-,*,/,% 取模(取余) =,** (乘方)
乘法符号有些场景中需要转义
实现算术运算
(1) let var=算术表达式
(2) var =$[算术运算]
(3) var =$((算术运算))
(4) var =$(expr arg1 arg2 arg3 ...) expr 是命令 i =10 j = 20 expr $i + $j 使用* 需用\ 转义
(5) declare -i var = 数值 declare -i var 将变量声明为一个数字变量
(6) echo ‘算数表达式’ | bc
bc
(Basic Calculator)是一个用于进行数学计算的命令行工具。它支持浮点运算、基本的算术运算、变量、函数以及条件语句等。
内建的随机数生成器变量 man bash /random 查看说明
$RANDOM 取值范围: 0-32767
范例:
# 生成 0 - 49 之间的随机数
echo $[$RANDOM%50]
增强型的赋值: 需要使用 let ; let i+=100
+=
-=
*=
/=
%=
++
--
逻辑运算
true , false // 均为shell 命令 help true 查看
与: &
1 & 1 1
1 & 0 0
0 & 0 0
0 & 1 0
或: |
1 | 1 1
1 | 0 1
0 | 1 1
0 | 0 0
非: !
!1 = 0 !true
!0 = 1 !false
异或: ^
异或的两个值,相同为假,不同为真
短路运算
cmd1 cmd2
•短路与
第一个为0 那么为0
第一个为1 那么第二个需要参与运算
•短路或
第一个为1 那么为1
第一个为0 那么第二个需要参与运算
bash 打开一个子shell
exit 退出当前shell