Bash考古以及 StackOverflow的2024年度技术统计报告

news2024/9/29 13:29:40

0.缘起

前段时间,有一次调试.sh时废了好大功夫,单独执行各行指令,可以,但是存储为.sh就不行了,最终发现,我漏加了文件头部的那个声明:

#!/bin/bash

https://wikimili.com/en/Stephen_R._Bourne

命令行输入:

bash xxxxx.sh

也立马可以运行。

因为对sh不是很熟悉,今天在编写if -else分支时,再次遇到问题:

./first_record.sh: line 7: syntax error near unexpected token `then'
./first_record.sh: line 7: `if[ $num_args -eq 0 ]; then'

 注意那个if后面少了一个空格。不仅仅如此,空格对bash非常重要,甚至设置语句不允许有空格,这些如此严格的语法规则让我头疼,然后有了下面的AI对答:

1.关于bash的知识

1.1bash脚本怎么会那么严格?比如if,空格都不能省,这个shell是什么时候开发出来的?

Bash 脚本的语法要求是相对严格的,尤其在像 if 语句这样的结构中,空格的正确使用至关重要。这是因为 Bash 脚本的解析器需要明确地知道每个命令的各个部分。例如,在 if 语句中,关键字和条件之间必须有空格,这样解析器才能正确地解析和执行代码。

Bash 的历史
Bash(Bourne Again SHell)是一个 UNIX Shell,它是由 Brian Fox 为 GNU 项目编写的。Bash 是对早期 Bourne Shell (sh) 的增强版本。它包含了许多新的功能,例如命令行编辑、命令补全和更多的编程功能。Bash 的开发历史如下:

1989年:Brian Fox 开始开发 Bash 作为 GNU 项目的一部分。
1990年:Bash 1.0 版本发布。
1993年:Bash 2.0 发布,增加了许多新功能和改进。
2004年:Bash 3.0 发布,引入了更多的新特性。
2009年:Bash 4.0 发布,增加了数组支持等新特性。
2014年:Bash 4.3 发布,包含了许多 bug 修复和新特性。
为什么空格很重要
Bash 是一个基于命令行的解释器,它使用空格来分隔命令和参数。如果你省略了空格,Bash 可能无法正确解析命令,从而导致语法错误。例如:

if[ $a -eq $b ]; then
  echo "a 等于 b"
fi
在上述示例中,if 和 [ 之间缺少空格,这会导致 Bash 解释器无法识别 if 语句的条件部分。正确的写法应该是:

if [ $a -eq $b ]; then
  echo "a 等于 b"
fi
Shell 脚本的严格性
这种严格性保证了脚本的可预测性和稳定性,因为每个命令和参数的边界都明确地定义了。这也有助于避免由于解析不清晰而引发的意外行为。

总结来说,Bash 作为一个功能强大且历史悠久的 Shell,设计时非常注重细节和兼容性,因此要求编写的脚本严格遵守语法规则。这些规则帮助确保脚本的准确执行和可靠性。

2.你推荐它的替代品吗?

当然可以!虽然 Bash 是最流行的 shell 之一,但还有许多其他的 shell 和脚本语言可以用作替代品,具体选择取决于你的需求和习惯。以下是几种常见的替代品:

1. Zsh (Z Shell)
优点: Zsh 是一个功能强大的 shell,提供了丰富的功能,如命令补全、主题、插件支持等。Zsh 被 Oh My Zsh 框架支持,可以方便地管理插件和主题。
使用场景: 适合需要强大交互式体验的用户,尤其是开发人员。
2. Fish Shell (Friendly Interactive Shell)
优点: Fish 强调用户友好性,具有自动建议和智能补全功能。语法更加简洁,容易上手,适合新手。
使用场景: 希望快速写出脚本而不被复杂语法困扰的用户。
3. Dash (Debian Almquist Shell)
优点: Dash 是一个轻量级的 POSIX 兼容 shell,启动速度快,适用于脚本执行。很多系统在 /bin/sh 中使用 Dash 提高性能。
使用场景: 适合需要极简和高效的脚本环境时。
4. Ksh (Korn Shell)
优点: Ksh 具有强大的脚本编写功能,支持很多不错的编程特性,并兼容 Bourne Shell 的大部分语法。
使用场景: 适合需要强大脚本功能而又希望保持与 Bourne Shell 兼容的用户。
5. PowerShell
优点: PowerShell 是微软开发的一种跨平台脚本语言和命令行界面,强大的对象管理和命令管道功能使得它在处理复杂任务时非常灵活。
使用场景: 适合 Windows 平台的系统管理和与 .NET 相关操作的用户。
6. Python
优点: 虽然 Python 不是 shell,但它可以用于编写脚本,具有人类可读的语法,功能强大,接受广泛。可以结合系统调用,处理文件和文本等。
使用场景: 适合需要编写复杂逻辑或处理数据的情况,更易于维护和扩展。
总结
选择哪种替代品取决于你的具体需求,例如脚本的复杂性、可读性、性能,以及你对语法的熟悉程度。如果你是新手,可能会更喜欢 Fish 或 Zsh,因为它们提供了更友好的用户体验。如果你更关注性能和轻量级,Dash 是一个不错的选择。对于复杂的系统管理任务,PowerShell 或 Python 可能是更合适的选择。

3.是不是bash只是集成在了内核里,人们才更多使用它,你有现在各种sh的使用的分析数据吗?

Bash 并不是集成在 Linux 内核中的,它是用户空间的一个程序。Linux 内核和用户空间是分开的,内核负责管理系统资源,而用户空间的程序(例如 shell)可以与内核进行交互。

Bash 的流行原因
默认 Shell: 在许多 Linux 发行版中,Bash 是默认的命令行 Shell,因此用户在安装系统后通常会使用它。这种广泛的默认使用使得 Bash 成为了许多开发者和管理员的首选。

丰富的功能: Bash 提供了强大的命令行功能,包括脚本编程、命令补全、历史记录、管道等,使得用户可以高效地执行复杂的任务。

POSIX 兼容性: Bash 支持 POSIX 标准,使得许多在 Bourne Shell 中编写的脚本可以无缝迁移到 Bash 中使用。

活跃的社区: Bash 拥有一个庞大活跃的用户群体和社区,提供了大量的文档、教程和支持,便于新手学习和老手进阶。

使用统计数据
关于不同 Shell 的使用统计数据并不总是公开可用,但我可以提供一些一般性的观察:

Bash: 由于其广泛的默认使用和功能,Bash 目前是最流行的 shell。
Zsh: 在开发者特别是 Web 开发人员中日益流行,尤其是与 Oh My Zsh 框架一起使用时。Zsh 的用户数量正在上升。
Fish: 作为一个用户友好的 shell,Fish 近年来也获得了一些关注,尤其是在希望简化命令行体验的用户中。
Dash 和 Ksh: 这些 shell 通常用于特定的场景,如脚本性能优化或兼容性需求,但用户群体相对较小。
数据来源和工具
如果你想获取关于不同 shell 使用的具体统计或分析,可以考虑以下方法:

调查和研究: 一些技术和开发社区会进行调查,例如 Stack Overflow Developer Survey 或 JetBrains 的开发者报告,通常会包含关于开发环境和工具的使用情况的统计信息。

操作系统使用统计: 一些操作系统(如 Ubuntu、Fedora、Debian 等)社区可能会分享关于默认 shell 的使用情况的数据。

GitHub 和开源项目: 开源项目的脚本示例和开发环境设置可以反映出流行的 shell 使用情况。

虽然我无法提供具体的最新使用数据,但以上观察和方法可以帮助你了解 Bash 及其他 Shell 的使用情况。如果你有兴趣获取最新的数据,建议查看相关的社区调查或开发者报告。

4.Bourne 是个法文单词?

“Bourne” 不是法文单词,而是一个英文姓氏。Bourne Shell(通常称为 sh)是由 Stephen Bourne 开发的,这个名字正是来自于他的姓氏。

Stephen Bourne 是一个计算机科学家,他在 1970 年代开发了 Bourne Shell,它成为了 Unix 操作系统的一个标准 shell。Bourne Shell 是早期的 Unix Shell 之一,它为后来的许多 shell(如 Bash 和 Ksh)提供了基础和灵感。

总结来说,“Bourne” 在这里是人名而不是法语单词。

sh的作者还活着! 

2.各种sh的使用统计数据

1.2024 Stack Overflow Developer Survey

这个调查报告每年一份。似乎是年终6月底给出当年报告, 这是2024年度的统计

6af827f0cfc2414699b9e3540846d007.png

3.bash调试

3.1 bash调试激活

 sudo bash -x ./create_video_service.sh 
+ $'\r'
./create_video_service.sh: 行 2: $'\r': 未找到命令
+ num_args=$'0\r'
+ $'\r'
./create_video_service.sh: 行 5: $'\r': 未找到命令
./create_video_service.sh: 行 58: 警告:立即文档在第 33 行被文件结束符分隔(需要 "EOL")
./create_video_service.sh: 行 59: 语法错误:未预期的文件结束符

 

3.2 典型错误登记

3.2.1 dos-linux格式问题

报警消息:

./create_video_service.sh: 行 2: $'\r': 未找到命令
+ num_args=$'0\r'
+ $'\r'

处理:

root@debian-ai:~/video_cycle_storage_test/sub_video_recorder# dos2unix ./create_video_service.sh 
dos2unix: 正在转换文件 ./create_video_service.sh 为Unix格式...
root@debian-ai:~/video_cycle_storage_test/sub_video_recorder# sudo bash -x ./create_video_service.sh 
+ num_args=0
+ '[' 0 -ne 4 ']'
+ echo 'usage: ./create_video_service.sh <video_file_path> <min_per_file> <rtsp_path> <chIdxbase1>'
usage: ./create_video_service.sh <video_file_path> <min_per_file> <rtsp_path> <chIdxbase1>
+ exit 1

3.2.2 乱码

现象:

+ echo '���� guide_video_storage_ch05 ������������ɡ�'
���� guide_video_storage_ch05 ������������ɡ�
root@debian-ai:~/video_cycle_storage_test/sub_video_recorder# file -i ./create_video_service.sh 
./create_video_service.sh: text/x-shellscript; charset=iso-8859-1

处理:

iconv -f iso-8859-1 -t utf-8 ./create_video_service.sh > /dev/null

附录A 2024 Stack Overflow Developer Survey摘录

Methodology | 2024 Stack Overflow Developer Survey

一些数据摘引:

  • 一半程序员没有受过专业的编程训练
  • 82%的编程技能提升来自网络,但是新生代更倾向于专门的编程培训
  • 技术性文档是90%的编程参考来源
  • MySQL, 59%的使用率,PostgreSQL在快速上升,使用率接近50%
  • 59%的专业程序员使用docker;npm 45%
  • Jira Confluenc异步调用使用场合使用率最高
  • JavaScript, Python and SQL是使用广泛的脚本语言,Rust是其中最高的,89%的人使用它。
  • 最流行的web框架,73%的人选择Svelte,StackOverflow2024用户调查使用它构建。
  • Replit Ghostwrite以及Tabnine是chatgpt之外的使用率最高的AI工具,GitHub Copilot在升温。
  • AI在编程各个环节的使用比例: documenting code (81%), testing code (80%), and writing code (76%).
  • 六成程序员每个工作日会耗费30分钟以上用于查询一些工作所需的在线技术文档和解决方案。

A.1编程语言使用率统计

新人老同志
3b05afe2693146bdb83c1b58cbc38dcf.png0a9b67e92947425fa30ec3c425cc00cf.png

A.2数据库使用统计 

新人老同志
4577a5fffc014de6a9e6f4e721aaa46a.png135dd8a13292470ea064e093936d7540.png

A.3 嵌入式平台

709ff416dc334f55a6f9a29835c4c615.png

A.4 三方库的使用比例

 40c89f18bec24e93aee941c7de0ab90f.png

A.5 程序员常用的一些工具

8fc6d534d1ff43aeb18b07a005e2ec34.png

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代发考生战报:考试通过 H12-831科目

代发考生战报&#xff1a;考试通过 H12-831科目&#xff0c;同事2人分别2天考HCIP续认证&#xff0c;考试题基本都是题库里的&#xff0c;印象有1-2个题是新题&#xff0c;也许是自己没记准&#xff0c;题库更新很及时&#xff0c;题库看会了考试很简单&#xff0c;考试半个小时…

认识Modbus RTU与Modbus TCP

&#xff08;选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 &#xff09; Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议&#xff0c;用于连接电子设备&#xff0c;但它们在多方面有所不同。以下是它们的详细比较&#xff1a; Modbus RTU 协议类型&#xff1a; …

【精通Redis】Redis持久化和复制

文章目录 前言一、Redis持久化1.1 RDB快照手动触发自动触发save和bgsave的区别 1.2 AOF持久化appendonly配置 二、Redis复制2.1 开启Redis主从复制2.2 Redis复制的启动过程 前言 本文主要讨论Redis的持久化方式和复制特性。Redis的持久化方式有两种&#xff0c;一种叫RDB&…

越秀大悦城·天悦海湾 | 繁华底色 北方头等地标

每一座骄傲的城市&#xff0c;都以奔涌向前的气魄&#xff0c;屹立时代潮头。每一处让城市仰望的居所&#xff0c;亦怀揣与城市共美好的磐心&#xff0c;以焕新的生活方式致敬理想生活家。 越秀大悦城天悦海湾&#xff0c;踞青岛北站旁创新创业活力区&#xff0c;以优越生态基…

望获实时Linux与EtherCAT的硬实时解决方案

在追求极致实时性与可靠性的工业自动化领域&#xff0c;望获实时Linux以其卓越的实时性能和广泛的兼容性&#xff0c;正逐步成为工业控制领域的核心力量。结合EtherCAT这一高效通信协议&#xff0c;我们共同打造了一套创新的硬实时工业控制方案&#xff0c;旨在满足现代工业对快…

怎样批量音频格式转换?5个方法帮你搞定

炎炎夏日的到来&#xff0c;大学生们也迎来了期盼已久的暑期生活。对于无论是计划外出旅行&#xff0c;还是宅在家中享受悠闲时光的朋友们来说&#xff0c;音乐总是不可或缺的伴侣。 然而&#xff0c;面对不同设备对音频格式的要求&#xff0c;如何轻松转换音频格式&#xff0…

数组下标越界异常(ArrayIndexOutOfBoundsException)以及解决方案

在Java学习的初期&#xff0c;我们往往可能会遇到一些程序的错误提示&#xff0c;告诉我们&#xff0c;程序出现了某些不正常的情况&#xff0c;在这种情况发生时&#xff0c;我们一般称之为出现了异常。 我们目前有两类常见的错误&#xff1a; 一个是编译时异常 &#xff0c…

PicGo + gitee 免费搭建个人图床

目录 1 图床概念2 使用gitee和PicGo搭建图床流程2.1 下载安装PicGo工具 3 图片上传错误处理3.1 PicGo客户端提示404错误信息图片上传失败3.2 PicGo客户端提示400错误信息图片上传失败 1 图床概念 ​ "图床"是一个网络术语&#xff0c;它指的是一种用于存储和托管图片…

springboot基于微信小程序的旅游攻略-计算机毕业设计源码96432

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.1.1技术可行性 2.1.2经济可行性 2.1.3操作可行性 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 …

实用python代码之修改图片大小

前言 通过这段代码可以修改图片的像素尺寸大小 运行截图如下 代码如下&#xff1a; import tkinter as tk from tkinter import filedialog, messagebox, colorchooser from PIL import Image, ImageDrawclass ImageProcessorApp:def __init__(self, root):self.root rootse…

审稿速度奇慢的大佬期刊?到底值不值得投?

关注GZH【欧亚科睿学术】&#xff0c;第一时间了解期刊最新动态&#xff01; &#x1f525; &#x1f525; &#x1f525; &#x1f525; 中科院1区SCI&#xff0c;各指标优秀&#xff01; 今天小编给大家介绍的是一本计算机科学领域的大佬期刊《Swarm and Evolutionary…

自驾畅游保定:参观总督署,品美食文化

这是学习笔记的第 2490篇文章 前几天跟孩子聊天&#xff0c;孩子说暑假都没出去玩了&#xff0c;暑假旅行的作业咋写&#xff1f;让我有满满的负疚感&#xff0c;去附近的公园、吃点美食不算旅游&#xff0c;得了&#xff0c;得安排一下一日游。 几个月前心心念的去保定&#x…

叉车AI监控影像防撞系统:减少损失,预防碰撞

叉车&#xff0c;这企业物流中的坚实力量&#xff0c;其安全运作是企业稳健前行的基石。在追求高效与效益的浪潮中&#xff0c;如何最大化地规避叉车事故&#xff0c;已悄然跃升为企业管理的头等大事。随着市场监管总局重锤落下&#xff0c;新版《场(厂)内专用机动车辆安全技术…

你一定想看的LVS详细介绍及常见模式(NAT,DR,防火墙标记)实验详解

目录 一、什么是LVS 二、LVS的核心思想 三、 LVS的优势 四、LVS的调度算法 4.1. LVS的调度算法类型 4.2. LVS静态调度算法 4.3. LVS动态调度算法 4.4.在4.15版本内核以后新增调度算法 五、LVS软件相关信息 六、ipvsadm命令 七、 LVS的NAT模式实验详解 7.1实验环境 7.…

使用Github Pages结合MkDocs制作个人网站

目录 环境配置 创建网页仓库 创建Github仓库 创建本地仓库 本地运行网页 配置主题 网站部署到Github docs文件夹介绍 修改主页显示内容 添加新文件 mkdocs.yml文件介绍 其他效果 环境配置 为了正确的安装Mkdocs&#xff0c;需要先下载Python环境 下载地址&#x…

7日 ROI 提升150%,NetMarvel 助力越南厂商 Mirai 旗下解谜休闲手游实现高质增长!

解谜游戏是目前全球最受欢迎的休闲细分品类之一。对于厂商来说&#xff0c;解谜游戏开发成本低、制作周期短&#xff0c;打造成为爆款的几率更大。据 Sensor Tower 发布的数据&#xff0c;解谜游戏在全球市场累计的下载量已经超过500亿次&#xff0c;累计收入也已突破420亿美元…

MongoDB基础学习(1)Mongodb和MySQL的区别

在当今的软件开发领域&#xff0c;数据库的选择是一个至关重要的决策。MongoDB和MySQL作为两种广泛使用的数据库系统&#xff0c;各自拥有其独特的特性和优势。本文将从多个维度深入探讨MongoDB和MySQL之间的区别&#xff0c;帮助读者更好地理解和选择适合自身项目需求的数据库…

SQL面试题练习 —— 计算用户首单是即时单的比例

目录 1 题目2 建表语句3 题解 题目来源&#xff1a;美团。 1 题目 在外卖订单中&#xff0c;有时用户会指定订单的配送时间。现定义&#xff1a;如果用户下单日期与期望配送日期相同则认为是即时单&#xff0c;如果用户下单日期与期望配送时间不同则是预约单。每个用户下单时间…

Web-server日志分析命令

https://gist.github.com/hvelarde/ceac345c662429447959625e6feb2b47 通过状态码获取请求总数 awk {print $9} /var/log/apache2/access.log | sort | uniq -c | sort –rn按照IP的请求数量排序 awk {print $1} /var/log/apache2/access.log | sort | uniq -c | sort -rn |…