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

相关推荐
我不会编程5555 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
李少兄5 小时前
Unirest:优雅的Java HTTP客户端库
java·开发语言·http
无名之逆5 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
似水এ᭄往昔5 小时前
【C语言】文件操作
c语言·开发语言
啊喜拔牙5 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
xixixin_6 小时前
为什么 js 对象中引用本地图片需要写 require 或 import
开发语言·前端·javascript
W_chuanqi6 小时前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
anlogic6 小时前
Java基础 4.3
java·开发语言
A旧城以西6 小时前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
Liudef066 小时前
deepseek v3-0324实现SVG 编辑器
开发语言·javascript·编辑器·deepseek