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

相关推荐
czq_26867194874 小时前
Python打卡第46天
开发语言·python
Evand J7 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter8 小时前
ZPL文件预览
开发语言·c++
噢,我明白了13 小时前
JAVA中的一些基础应用知识点
java·开发语言
时间的拾荒人14 小时前
Redis 入门详解:核心特性、重要文件与全局命令实战
开发语言·redis·面试
敲上瘾14 小时前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
码途行者15 小时前
网站的SQL 注入:从攻击原理到防御措施
开发语言·sql·php
旖旎夜光16 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
你看我名字16 小时前
产品参数昨天还对,今天已过期:数眼智能与大模型应用如何做资料版本校验
开发语言·架构
老秦包你会17 小时前
计算机网络第二课 ----Socket(套接字)编程预备
开发语言·计算机网络·php