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

相关推荐
可涵不会debug4 分钟前
C语言文件操作:标准库与系统调用实践
linux·服务器·c语言·开发语言·c++
百流40 分钟前
scala文件编译相关理解
开发语言·学习·scala
Evand J2 小时前
matlab绘图——彩色螺旋图
开发语言·matlab·信息可视化
深度混淆3 小时前
C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合
开发语言·c#
雁于飞3 小时前
c语言贪吃蛇(极简版,基本能玩)
c语言·开发语言·笔记·学习·其他·课程设计·大作业
wenxin-4 小时前
NS3网络模拟器中如何利用Gnuplot工具像MATLAB一样绘制各类图形?
开发语言·matlab·画图·ns3·lr-wpan
数据小爬虫@6 小时前
深入解析:使用 Python 爬虫获取苏宁商品详情
开发语言·爬虫·python
健胃消食片片片片6 小时前
Python爬虫技术:高效数据收集与深度挖掘
开发语言·爬虫·python
王老师青少年编程7 小时前
gesp(C++五级)(14)洛谷:B4071:[GESP202412 五级] 武器强化
开发语言·c++·算法·gesp·csp·信奥赛