【bash指令全集合】最全教程-持续更新!

  • 作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于新西兰奥克兰大学攻读IT硕士学位
  • 荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。
  • 跨领域学习,喜欢摄影、弹吉他、咏春拳。文章深入浅出、语言风趣;爱吃必胜客社区创立者,旨在“发现美 欣赏美

  • 🏆 学习系列专栏
    。🏅 Python学习宝库
    。🏅 网络安全学习宝库

在这里插入图片描述

文章目录

  • ⭐️前言
    • 🌟 复制文件
    • 🌟 位置参数positional arguments
      • ☀️那么这和我们平时用的终端里面的命令有什么联系吗, 我们经常也要加一些参数, 比如 ls -l
      • ☀️ls -l如何实现的
  • ⭐️请问命令行里如何检测到后面参数 -l等等的
    • 使用 getopts 命令(适用于Bash脚本):
    • 使用位置参数:
    • 🌟 要创建一个名为 kk.sh 的卖萌命令
      • ☀️ Git 提交出现了大量的文件变动
      • ☀️piping
    • 🌟 output redirection

⭐️前言

在这里插入图片描述

#!/bin/bash
echo hello
osascript -e "display notification \"lqkkkk\" with title \"woshi\""

🌟 复制文件

在这里插入图片描述

🌟 位置参数positional arguments


在Bash(Bourne Again Shell)中,您可以使用位置函数来获取脚本或函数中参数的位置。这些参数称为位置参数,它们是脚本或函数接受的命令行参数。位置参数从1开始编号,$1 表示第一个参数,$2 表示第二个参数,以此类推。

☀️那么这和我们平时用的终端里面的命令有什么联系吗, 我们经常也要加一些参数, 比如 ls -l

是的,Bash中使用的位置参数概念与在终端中运行命令时使用的命令行参数有关。在终端中运行命令时,您通常可以指定一些选项和参数来自定义命令的行为,就像您提到的 ls -l 一样。

在这种情况下,ls 是一个命令,而 -l 是一个选项或参数。在Bash脚本中,您可以通过使用位置参数来访问这些传递给脚本的选项和参数。例如,如果您编写一个脚本来处理文件列表,并且您希望能够接受用户指定的选项,您可以在脚本中使用位置参数来访问这些选项和参数。

以下是一个示例,演示如何在Bash脚本中处理类似于 ls -l 这样的命令行参数:

#!/bin/bashwhile getopts ":l" option; docase "$option" inl)echo "执行长格式列表操作"# 在这里执行适当的操作;;\?)echo "未知选项: -$OPTARG"exit 1;;esac
done# 处理其他参数
shift $((OPTIND-1))
echo "其他参数:$@"

在上面的示例中,getopts 函数用于解析选项,而shift 命令用于将已处理的选项从参数列表中移除,以便您可以处理剩余的参数。

因此,位置参数在Bash脚本中用于处理命令行参数,与您在终端中使用的命令的选项和参数概念密切相关。

☀️ls -l如何实现的

ls -l 命令是Linux和Unix系统中用于列出文件和目录的命令,以长格式显示它们的详细信息。要编写一个简化版本的 ls -l 命令,您可以使用Bash脚本。以下是一个示例脚本,它演示了如何实现类似 ls -l 的功能:

bash
Copy code

#!/bin/bash# 使用当前目录作为默认目录,如果用户没有提供目录参数
directory="."# 检查是否有用户提供的目录参数
if [ $# -gt 0 ]; thendirectory="$1"
fi# 列出目录中的文件和目录,并显示长格式信息
for item in "$directory"/*; doif [ -f "$item" ]; then# 如果是文件,显示文件名和文件大小file_size=$(stat -c %s "$item")echo -n "File: $item, Size: $file_size bytes"elif [ -d "$item" ]; then# 如果是目录,显示目录名和目录中的文件数目num_files=$(find "$item" -maxdepth 1 -type f | wc -l)echo -n "Directory: $item, Files: $num_files"fi# 显示权限信息和最后修改时间permissions=$(ls -l "$item" | awk '{print $1}')last_modified=$(ls -l "$item" | awk '{print $6, $7}')echo ", Permissions: $permissions, Last Modified: $last_modified"
done

这个脚本的工作方式如下:

默认情况下,它将使用当前目录作为要列出的目录,但用户可以通过提供目录路径作为参数来指定其他目录。

对于指定的目录,脚本使用 for 循环遍历其中的每个项目(文件和子目录)。

对于每个项目,脚本检查它是文件还是目录,并显示相关信息:

如果是文件,它会显示文件名和文件大小。
如果是目录,它会显示目录名和目录中的文件数目。
脚本还会显示文件或目录的权限信息和最后修改时间,这是通过 ls -l 命令和 awk 命令来获取的。

请注意,这只是一个简化的示例,不包括 ls -l 命令的所有功能和选项。实际的 ls 命令非常复杂,具有许多不同的选项和参数,上面的脚本只是一个简单的模拟。要实现完整的 ls -l 功能,需要更多的代码和复杂性。

⭐️请问命令行里如何检测到后面参数 -l等等的

在命令行中,通常使用选项(或标志)来传递参数给命令。这些选项通常以短划线(单个 -)或双短划线(--)开头,后面跟着选项的名称。例如,ls -l 中的 -l 是一个选项

要在命令行中检测和处理选项,您可以使用getopts或getopt命令,或者在Bash脚本中使用$1,$2,$3等位置参数。

使用 getopts 命令(适用于Bash脚本):

getopts 命令是用于解析命令行选项的Bash内置命令。以下是一个示例,演示了如何在Bash脚本中使用 getopts 来处理选项:

#!/bin/bashwhile getopts ":l" opt; docase $opt inl)echo "选项 -l 被指定"# 在这里执行相关操作;;\?)echo "未知选项: -$OPTARG";;esac
done

在这个示例中,getopts 用于解析命令行选项。-l 是一个示例选项。当用户在命令行中指定 -l 时,脚本会识别它,并执行相应的操作。

使用位置参数:

另一种在Bash脚本中处理命令行选项的方式是使用位置参数。在这种情况下,您可以使用 $1,$2,$3 等来访问命令行参数,然后在脚本中进行适当的判断和处理。以下是一个示例:

#!/bin/bashwhile [ $# -gt 0 ]; docase $1 in-l)echo "选项 -l 被指定"# 在这里执行相关操作;;*)echo "未知选项: $1";;esacshift
done

在这个示例中,while 循环遍历所有的命令行参数,case 语句用于识别选项,然后执行相应的操作。

这些示例演示了如何在命令行中检测和处理选项,以及如何根据用户提供的选项执行相应的操作。根据您的需要,您可以扩展这些示例来处理更多的选项和参数。

🌟 要创建一个名为 kk.sh 的卖萌命令

可以按照以下步骤操作:

使用文本编辑器创建一个新文件,并将以下内容复制粘贴到文件中:

#!/bin/bashecho "kk无敌可爱拳"

这个脚本非常简单,只是输出了一条信息。

保存文件并退出文本编辑器。

接下来,您需要将脚本文件设置为可执行文件。在终端中执行以下命令:

chmod +x kk.sh

这会将执行权限添加到 kk.sh 文件。

现在,您可以将脚本移动到系统的一个目录,以便系统可以找到它。通常,将脚本添加到 /usr/local/bin 目录是一个不错的选择,因为这个目录包含了系统命令。

sudo mv kk.sh /usr/local/bin/

输入您的管理员密码来确认移动操作。

现在,您可以在终端中运行 kk.sh 命令来执行卖萌命令。例如:

kk.sh

这将输出 “kk无敌可爱拳”。

您的卖萌命令 kk.sh 现在已经可以像其他系统命令一样在终端中使用了。请注意,如果您不希望输入 sh 扩展名来运行脚本,可以考虑在脚本的开头使用 #!/bin/bash 或 #!/usr/bin/env bash 来指定解释器,然后将脚本移动到系统路径中。这将使您能够直接运行 kk,而不是 kk.sh。

☀️ Git 提交出现了大量的文件变动

特别是在 node_modules 文件夹,这是因为你将 node_modules 文件夹提交到了 Git 仓库。通常,这种做法并不推荐,原因如下:

体积庞大:node_modules 文件夹通常包含大量的文件,这会使你的仓库体积变得非常庞大。这不仅会占用更多的存储空间,而且也会影响克隆和拉取仓库的速度。

更新频繁:依赖库可能会频繁更新。每当你更新依赖时,node_modules 中的文件都会发生变化,这将导致你需要进行大量的提交和推送,进一步增加仓库的体积。

依赖管理:npm 或 yarn 等包管理器已经为你处理了依赖关系。只需在你的项目中保留一个 package.json 和(可选的)package-lock.json 或 yarn.lock 文件即可。其他人在克隆项目时可以通过运行 npm install 或 yarn 来安装所有依赖。

环境差异:不同的开发环境可能会有不同的依赖需求(例如,不同的操作系统可能需要不同的二进制文件)。将 node_modules 提交到 Git 中,可能会导致在不同环境下出现兼容性问题。

如何解决?
为了避免这种情况,你应该在 Git 仓库中添加一个 .gitignore 文件,并在其中指定 Git 忽略 node_modules 文件夹。这样,无论何时进行提交,node_modules 中的文件都不会被包含在内。你可以按照以下步骤操作:

在项目根目录创建一个名为 .gitignore 的文件。

在 .gitignore 文件中添加以下内容:

Copy code

node_modules/

将 .gitignore 文件提交到你的 Git 仓库。

如果 node_modules 已经被提交到了你的仓库,你需要从仓库中移除它。可以使用以下命令:

bash
Copy code

git rm -r --cached node_modules
git commit -m "Remove node_modules from repository"
git push

这些步骤将帮助你保持 Git 仓库的整洁和高效。

☀️piping

ls -l /usr/bin | grep kk

🌟 output redirection

例子

> 覆盖
>> 继续添加上
> cat hello.txt
kk无敌可爱拳~/Code ---------------------------------------------------------- at 16:57:38
> echo wudi >>hello.txt~/Code ---------------------------------------------------------- at 16:58:15
> cat hello.txt
kk无敌可爱拳
wudi~/Code ---------------------------------------------------------- at 16:58:18
>

在这里插入图片描述

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

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

相关文章

Centos7.4安装nginx1.24.0_安装详细步骤---Linux工作笔记066

以前安装的太模糊了,干脆重新写一个: 1.首先下载对应的nginx-1.24.0.tar.gz安装文件 2.然后: 去执行命令 安装依赖 yum install -y gcc yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum install -y openssl openssl-devel 3.然后:去解压 tar -zxvf ngi…

一文讲透Python机器学习决策树算法的基本概念与原理

1.决策树算法的基本特点与优势 决策树算法是一种有监督、非参数、简单、高效的机器学习算法。相对于非监督式学习方法,决策树算法由于充分利用了响应变量的信息,因此能够很好地克服噪声问题,在分类及预测方面效果更佳。决策树的决策边界为矩…

【MySQL】MySQL数据库基础

MySQL数据库基础 一、为什么要有数据库?二、 数据库软件的构成数据库服务器,数据库,表关系主流数据库 三、基本使用1、连接服务器2、服务器管理3、MySQL配置文件4、数据库的简单操作5、数据逻辑存储 四、MySQL架构SQL分类MySQL客户端存储引擎…

smartkit巡检E9000设备

https://support.huawei.com/enterprise/zh/doc/EDOC1100325140/f6eeacd6 打开链接,里面的内容很详细。

013 OpenCV copyMakeBorder(padding)

目录 一、环境 二、原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、原理 cv.copyMakeBorder是OpenCV库中的一个函数,用于在图像周围添加边框(padding)。这个函数可以用于图…

C#中GDI+绘图应用(柱形图、折线图和饼形图)

目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形,其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图,是程序开发中比较常用的一种图表技术…

掌握Python异步IO利器:深入解读Asyncio

更多资料获取 📚 个人网站:ipengtao.com 异步 IO 与 Asyncio 在 Python 中的应用 在当今互联网时代,处理大量并发请求或I/O密集型任务对于软件应用程序至关重要。Python的异步IO框架——Asyncio成为了处理此类问题的有力工具。本文将深入介…

在vue中导出csv文件

在Vue中使用 xlsx 库将表格数据导出为CSV文件,你需要按照以下步骤操作: 安装 xlsx 库 如果你的项目中还没有安装xlsx库,可以使用npm或yarn来安装它。 npm install xlsx # 或者 yarn add xlsx在Vue组件中导入xlsx库: 在需要处理…

基于SpringBoot实现的电影院售票系统

一、 系统架构 前端:html | jquery | bootstrap 后端:springboot | thymeleaf | spring-data-jpa 环境:jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 首页 02. 登录页 03. 管理端-电影列表 04. 管理端-添加电影 05. 管…

京东数据分析:2023年10月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台10月份打印机市场销售数据已出炉! 10月份,打印机市场整体销售下滑。鲸参谋数据显示,今年10月份,京东平台打印机的销量将近60万,环比降低约2%,同比降低约5%;销售额为4.4亿&a…

【已解决】AttributeError: module ‘numpy‘ has no attribute ‘int‘.

问题描述 Traceback (most recent call last): File "main_test_ircnn_denoiser.py", line 183, in <module> main() File "main_test_ircnn_denoiser.py", line 66, in main current_idx min(24, np.int(np.ceil(noise_level_img/2)-…

模拟电路学习笔记(一)之芯片篇(持续更新)

模拟电路学习笔记&#xff08;一&#xff09;之芯片篇&#xff08;持续更新&#xff09; 1.CD4047BE芯片 CD4047是一种包含高电压的多谐振荡器&#xff0c;该器件的操作可以在两种模式下完成&#xff0c;分别是单稳态和非稳态。CD4047需要一个外部电阻器和电容器来决定单稳态…

开源项目CuteSqlite开发笔记(二):SQLite的架构

在开发CuteSqlite图形客户端的时候&#xff0c;需要用到SQL的语法解释&#xff0c;来对SQL语句进行优化。找了很多的SQL语法解释器&#xff0c;都不是十分满意&#xff0c;只有翻开Sqlite的源码&#xff0c;看看SQLite对SQL语句的解释过程&#xff0c;本文是翻译的官方文档。 官…

Twincat功能块使用经验总结

控制全局变量&#xff1a; //轴控制指令 bi_Power: BOOL; //使能 bi_Reset: BOOL; //复位 bi_Stop: BOOL; //停止 bi_JogForward: BOOL; //正向点动 bi_JogBackwards: BOOL; //反向点动 bi_MoveAdditive: BOOL; //增量位…

Anaconda创建虚拟环境以及Pycharm和Jupyter如何切换虚拟环境

文章目录 Anaconda创建管理虚拟环境0. 进入到终端1. 创建新环境2. 切换环境3. 删除环境4. 查询当前已有的环境 Pycharm切换虚拟环境0. 更换解析器1. 添加虚拟环境&#xff08;之前默认的是base环境&#xff09;2. 验证切换虚拟环境 Jupyter Notebook 切换虚拟环境1. 安装ipyker…

基于SSM框架的《超市订单管理系统》Web项目开发(第五天)供应商管理,增删改查

基于SSM框架的《超市订单管理系统》Web项目开发&#xff08;第五天&#xff09;供应商管理&#xff0c;增删改查 上一次我们实现了多表关联查询&#xff0c;还有分页显示数据的功能。还完善了用户管理这一模块。 因此今天我们需要完成的是供应商管理模块&#xff0c;这一模块…

BFD多跳检测配置

定义 双向转发检测BFD&#xff08;Bidirectional Forwarding Detection&#xff09;是一种全网统一的检测机制&#xff0c;用于快速检测、监控网络中链路或者IP路由的转发连通状况。 目的 为了减小设备故障对业务的影响&#xff0c;提高网络的可靠性&#xff0c;网络设备需要…

抖店的基础框架怎么搭建?新手必看!

我是电商珠珠 我做抖店也已经将近3年了&#xff0c;很多新手会经常问我抖店到底要怎么做这些问题&#xff0c;我呢总结出了一个做抖店的基础框架&#xff0c;想要了解的朋友们仔细往下看。 1、入驻 入驻的时候需要去办理营业执照&#xff0c;营业执照的话可以是个体工也可以…

2-二分-索引二分-在排序数组中查找元素的第一个和最后一个位置

这是索引二分的第二篇算法&#xff0c;力扣链接 这道题其实在另一个专栏写过&#xff0c;借此机会复习一下吧。 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 targe…

指针进阶知识超详细讲解(C语言)(中)

前言 苦苦等待&#xff0c;终于迎来了我们的指针讲解第二期&#xff0c;如果有还没有看过上一期的小伙伴&#xff0c;那赶紧点击这个链接学习后再来看这篇博客吧。指针基础知识超详细讲解&#xff08;C 语言&#xff09;&#xff08;上&#xff09; 如果对学习C语言有兴趣那千万…