shell 笔记

news/2025/3/20 13:37:58/文章来源:https://www.cnblogs.com/rebrobot/p/18782872

 

 

例子:

shell 脚本讲 mask 转换成 CIDR 格式

#!/bin/bash# 函数: 将子网掩码转换为 CIDR
mask_to_cidr() {local mask=$1local IFS=.local -a octets=($mask)local cidr=0for octet in "${octets[@]}"; do# 将八位组转换为二进制,并统计 1 的个数bin=$(echo "obase=2; $octet" | bc)ones=$(echo -n "$bin" | tr -cd '1' | wc -c)cidr=$((cidr + ones))doneecho "/$cidr"
}# 示例调用
mask="255.255.255.0"
cidr=$(mask_to_cidr "$mask")
echo "子网掩码: $mask -> CIDR: $cidr"

  

sh(POSIX shell)中,可以使用 awk 代替 bash 里的数组处理,以确保兼容性。以下是一个 sh 版本的脚本,它可以将子网掩码转换为 CIDR 表示法

#!/bin/sh# 函数:将子网掩码转换为 CIDR
mask_to_cidr() {mask=$1echo "$mask" | awk -F. '{for (i=1; i<=4; i++) {while ($i) {cidr += $i % 2$i = int($i / 2)}}print "/" cidr}'
}# 示例调用
mask="255.255.255.0"
cidr=$(mask_to_cidr "$mask")
echo "子网掩码: $mask -> CIDR: $cidr"

  

2.shell 函数 前面 需要添加 function 吗

  • Shell 脚本中定义函数时,不需要使用 function 关键字,但可以使用。

  • 标准语法(函数名() 是推荐的方式,兼容性更好。

  • function 语法 适合在 bash 或 zsh 中使用,代码更直观

3.if 中的条件判断 有哪些

在 Shell 脚本中,if 语句的条件判断非常灵活,支持多种条件表达式。以下是一些常见的条件判断类型及其用法:


1. 文件测试

用于检查文件或目录的状态。

条件描述
-e file 文件是否存在
-f file 是否是普通文件
-d file 是否是目录
-r file 文件是否可读
-w file 文件是否可写
-x file 文件是否可执行
-s file 文件是否非空(大小大于 0)
-L file 文件是否是符号链接
file1 -nt file2 file1 是否比 file2 新
file1 -ot file2 file1 是否比 file2 旧

示例

bash
复制
if [ -f "/path/to/file.txt" ]; thenecho "文件存在"
fi

2. 字符串比较

用于比较字符串。

条件描述
-z "$str" 字符串是否为空
-n "$str" 字符串是否非空
"$str1" = "$str2" 字符串是否相等
"$str1" != "$str2" 字符串是否不相等
"$str1" < "$str2" 字符串 str1 是否小于 str2
"$str1" > "$str2" 字符串 str1 是否大于 str2

示例

bash
复制
if [ "$var" = "hello" ]; thenecho "变量等于 hello"
fi

3. 数值比较

用于比较数字。

条件描述
"$num1" -eq "$num2" 是否相等
"$num1" -ne "$num2" 是否不相等
"$num1" -gt "$num2" 是否大于
"$num1" -ge "$num2" 是否大于或等于
"$num1" -lt "$num2" 是否小于
"$num1" -le "$num2" 是否小于或等于

示例

bash
复制
if [ "$num1" -gt 10 ]; thenecho "num1 大于 10"
fi

4. 逻辑运算符

用于组合多个条件。

条件描述
! condition 非(条件取反)
condition1 -a condition2 与(条件1 和 条件2 同时成立)
condition1 -o condition2 或(条件1 或 条件2 成立)

示例

bash
复制
if [ "$var" = "hello" -a "$num" -gt 10 ]; thenecho "变量等于 hello 且 num 大于 10"
fi

5. 高级条件判断([[ ]]

[[ ]] 是 bash 中的增强版条件判断,支持更多功能。

条件描述
[[ "$str" =~ regex ]] 字符串是否匹配正则表达式
[[ "$str1" == "$str2" ]] 字符串是否相等(支持通配符)
[[ "$str1" != "$str2" ]] 字符串是否不相等
[[ -z "$str" ]] 字符串是否为空
[[ -n "$str" ]] 字符串是否非空

示例

bash
复制
if [[ "$var" =~ ^[0-9]+$ ]]; thenecho "变量是纯数字"
fi

6. 命令返回值判断

if 可以直接根据命令的返回值($?)进行判断。

条件描述
if command; then 如果命令成功(返回值为 0)
if ! command; then 如果命令失败(返回值非 0)

示例

bash
复制
if grep "pattern" file.txt; thenecho "找到匹配内容"
fi

7. 组合条件

可以使用 && 和 || 组合多个条件。

条件描述
condition1 && condition2 条件1 和 条件2 同时成立
`condition1   condition2` 条件1 或 条件2 成立

示例

bash
复制
if [ "$var" = "hello" ] && [ "$num" -gt 10 ]; thenecho "变量等于 hello 且 num 大于 10"
fi

8. 空值判断

在 Shell 中,未定义的变量或空字符串可能会导致问题,因此需要特别注意。

条件描述
[ -z "${var}" ] 变量是否为空或未定义
[ -n "${var}" ] 变量是否非空

示例

bash
复制
if [ -z "${var}" ]; thenecho "变量为空或未定义"
fi

总结

Shell 脚本中的 if 条件判断非常强大,支持文件测试、字符串比较、数值比较、逻辑运算等多种操作。以下是一些关键点:

  • 使用 [ ] 或 [[ ]] 进行条件判断。

  • [[ ]] 是 bash 的增强版,支持正则匹配和更复杂的逻辑。

  • 注意变量为空或未定义的情况,使用 -z 或 -n 进行判断。

希望这些内容对你有帮助!如果有其他问题,欢迎继续提问

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901990.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20244220 实验一《Python程序设计》实验报告

实验一 (一)实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和类型、字符串、对象、缩进和注释等;编写一个猜数字的游戏。(二)实验要求 熟悉Pycharm等开发环境; 掌握基本的Python运行和调试技能; 掌握基本的Python编程技能。 (…

74.8K star!这个开源图标库让界面设计效率提升10倍!

Font Awesome 是全球最受欢迎的图标库和工具包,提供超过2000个免费图标和7000+专业图标,支持网页、桌面应用、移动端等多平台使用。开发者只需几行代码就能为项目添加精美矢量图标,设计师可直接下载SVG进行二次创作。嗨,大家好,我是小华同学,关注我们获得“最新、最全、最…

如何在Java程序中使用泛型

如何在Java程序中使用泛型泛型可以使你的代码更灵活、更易读,并能帮助你在运行时避免ClassCastExceptions。让我们通过这篇结合Java集合框架的泛型入门指南,开启你的泛型之旅。Java 5引入的泛型增强了代码的类型安全性并提升了可读性。它能帮助你避免诸如ClassCastException(…

BUUCTF从0到1:N1BOOk(web入门,常见的信息收集)

各位师傅们,第一次写博客文章: 就从最简单的web信息收集入门吧: 信息收集在不管时在红蓝对抗还是在ctf比赛中都是具有很大的作用 我们先看题:题目提示:信息收集,我们就直接打开虚拟机kali用dirsearch命令扫描网址: 对于新手来说dirsearch还未安装,dirsearch安装看这个:…

小白也能搞定系统搭建!7步教你选对开发平台!

你有没有遇到过这种情况: —— 想搞个客户管理系统,结果一搜教程,满屏都是代码,瞬间头大? —— 公司事儿一堆,老板还不想花钱买现成的系统,非要我们自己搭,可咱也不会写代码啊,这可咋整? 其实,现在做系统根本不用写代码,有些工具拖拽一下就能搭建,小白也能轻松上手…

如何学习 ROS+PX4

博客地址:https://www.cnblogs.com/zylyehuo/参考 https://www.bilibili.com/video/BV1vx4y1Y7Tu?spm_id_from=333.788.player.switch&vd_source=4acdb875c05ce9dccfce3cd6cfaac651

Mavros Mavlink

博客地址:https://www.cnblogs.com/zylyehuo/参考 https://www.bilibili.com/video/BV1x841167uG?spm_id_from=333.788.videopod.sections&vd_source=4acdb875c05ce9dccfce3cd6cfaac651

用于太阳能电池板的线性电机物联网控制器

随着能源成本的增加,太阳能电池板显然是减少这些费用的一条途径。即使有一对面板在一串(两个串联),和一个电网限制电流逆变器(如优秀的SUN-1000GTIL2和SUN-2000GTIL2系列),你可以节省很多钱-即使在冬天!后面的文章将详细介绍各种具有成本效益的选项和经验。 LMIC LMIC(线性电…

leetcode每日一题:最少翻转操作数

题目 2612. 最少翻转操作数 给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p ,它们表示一个长度为 n 且下标从 0 开始的数组 arr ,数组中除了下标为 p 处是 1 以外,其他所有数都是 0 。 同时给你一个整数数组 banned ,它包含数组中的一些位置。banned 中第 i 个位置表…

黄色网站破解

最近再查资料, 莫名其妙弹窗黄色网站下载页面, 我的手机是iOS非越狱版本, 我当然是敢点击的, 即使有病毒也不怕。 51duhui是虚假的应用, 假冒app store风格下载安装, 狗日的,发现是下载mobileconfig, 看下下载的按钮,代码如下:function jumpurl(url) {setTimeout(f…

“人工智能+”智赋千行百业!

今年,DeepSeek在AI赛道一骑绝尘 以“火炎焱燚”之势迅速延伸 开启中国AI黄金时代 如今,中国的AI故事正在书写新篇 中国的科技强国之路也正越走越宽在DeepSeek引领的人工智能热潮中 作为云服务国家队 天翼云“息壤”智算平台率先完成 国产算力与DeepSeek-R1/V3 系列大模型的深…

使用Kettle将sqlserver库表结构和数据导入到oracle

一、官网下载kettle的压缩包pdi-ce-9.4.0.0-343.zip ,下载jtds-1.3.1.jar和ojdbc8-19.3.0.0.jar 将jar放入\data-integration\lib 目录下二、将zip解压后,是一个data-integration文件夹,找到spoon.bat 双击运行,即可打开kettle工具三、打开以后,右键点击转换,新建一个转换…