shell 编程(二)

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

相关推荐
柒七爱吃麻辣烫7 分钟前
在Linux中安装JDK并且搭建Java环境
java·linux·开发语言
极小狐18 分钟前
如何构建容器镜像并将其推送到极狐GitLab容器镜像库?
开发语言·数据库·机器学习·gitlab·ruby
多多*1 小时前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
正在走向自律1 小时前
从0到1:Python机器学习实战全攻略(8/10)
开发语言·python·机器学习
FY_20181 小时前
键盘输出希腊字符方法
开发语言
西西弗Sisyphus1 小时前
Python 处理图像并生成 JSONL 元数据文件 - 灵活text版本
开发语言·python
q567315232 小时前
Go语言多线程爬虫与代理IP反爬
开发语言·爬虫·tcp/ip·golang
Chandler242 小时前
Go语言即时通讯系统 开发日志day1
开发语言·后端·golang
强化学习与机器人控制仿真3 小时前
openpi 入门教程
开发语言·人工智能·python·深度学习·神经网络·机器人·自动驾驶
明月看潮生3 小时前
青少年编程与数学 02-019 Rust 编程基础 08课题、字面量、运算符和表达式
开发语言·青少年编程·rust·编程与数学