【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/bash

while getopts ":l" option; do
  case "$option" in
    l)
      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 ]; then
  directory="$1"
fi

# 列出目录中的文件和目录,并显示长格式信息
for item in "$directory"/*; do
  if [ -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/bash

while getopts ":l" opt; do
  case $opt in
    l)
      echo "选项 -l 被指定"
      # 在这里执行相关操作
      ;;
    \?)
      echo "未知选项: -$OPTARG"
      ;;
  esac
done

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

使用位置参数:

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

#!/bin/bash

while [ $# -gt 0 ]; do
  case $1 in
    -l)
      echo "选项 -l 被指定"
      # 在这里执行相关操作
      ;;
    *)
      echo "未知选项: $1"
      ;;
  esac
  shift
done

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

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

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

可以按照以下步骤操作:

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

#!/bin/bash

echo "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
>

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧工地源码 SaaS模式云平台

伴随着技术的不断发展,信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升,智慧工地概念应运而生,庞大的建设规模催生着智慧工地的探索和研发。 什么是智慧工地? 伴随着技术的不断发展,信息化手段、移…

基于Jenkins实现接口自动化持续集成

一、JOB项目配置 1、添加描述 可选选项可填可不填 2、限制项目的运行节点 节点中要有运行环境所需的配置 节点配置教程:https://blog.csdn.net/YZL40514131/article/details/131504280 3、源码管理 需要将脚本推送到远程仓库中 4、构建触发器 可以选择定时构建…

内衣迷你洗衣机什么牌子好?好用不贵的内衣洗衣机推荐

由于内衣洗衣机在目前的市场上越来越受欢迎,使得不少的小伙伴都在犹豫要不要为自己入手一台专用的内衣洗衣机,专门来清洗一些内衣裤等等贴身衣物,这个问题的答案是很有必要的,因为目前市场上的家用大型洗衣机对衣物只能够起到清洁…

AI 大模型爆发后,智能计算的需求有多强烈?

自从 ChatGPT 横空出世以来,AI 技术就成为科技领域备受关注的热门话题之一。据 OpenAI 的报告显示,自 2012 年以来,AI 大模型的规模呈指数级增长,其参数数量每 16 个月翻一番。 这些大型预训练模型,如 GPT-4、文心一言…

uniapp-hubildx配置

1.配置浏览器 (1)运行》运行到浏览器配置》配置web服务器 (2)选择浏览器安装路径 (3)浏览器安装路径: (3.1) 右键点击图标》属性 (3.2)选择目标&…

ubuntu安装kafka

一、前提,先去安装java环境 二、安装kafka wget http://www.apache.org/dyn/closer.cgi?path/kafka/2.8.0/kafka_2.13-3.6.0.tgz tar xzf kafka_2.13-3.6.0.tgz mv kafka_2.13-3.6.0 /usr/local/kafka // 这一步也可以不用 启动zookeeper sudo /usr/local/kafka_2…

ubuntu启动kafka报错Could not create the Java Virtual Machine.

网上有两种方式,但是需要具体看自己的错误信息,我的错误信息如下: 这里大概是说要写入日志无权限,所以执行的时候,前面加一下sudo 执行成功。

10.机器人系统仿真(urdf集成gazebo、rviz)

目录 1 机器人系统仿真的必要性与本篇学习目的 1.1 机器人系统仿真的必要性 1.2 一些概念 URDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘…

利用yolov5输出提示框,segment-anything生成掩膜实现图像的自动标注

文章目录 一. 创建环境二. 下载模型文件三. 编辑代码 一. 创建环境 anaconda下新建一个环境 conda create -n yolo-sam python3.8激活新建的环境 conda activate yolo-sam更换conda镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/fre…

Hive SQL的各种join总结

说明 Hive join语法有6中连接 inner join(内连接)、left join(左连接)、right join(右连接)、full outer join(全外连接)、left semi join(左半开连接)、cr…

批量免费AI写作工具,批量免费AI写作软件

人工智能(AI)的应用在各个领域不断创新。面对繁重的写作任务,我们应该怎么完成?本文将专心分享批量免费AI写作的方法、工具以及选择时需要注意的事项。 批量免费AI写作的方法 利用开源AI模型 一种常见的批量免费AI写作方法是利用开源的AI模…

CUDA简介——CUDA内存模式

1. 引言 前序博客: CUDA简介——基本概念CUDA简介——编程模式CUDA简介——For循环并行化CUDA简介——Grid和Block内Thread索引 CUDA内存模式,采用分层设计,是CUDA程序与正常C程序的最大不同之处: Thread-Memory Correspondenc…

《数字中台建设总体方案》

《数字中台建设总体方案》 制定数字中台战略规划:制定符合企业实际情况的数字中台战略规划,明确建设目标、重点任务和时间表。确定数字中台架构:根据企业业务需求和特点,确定数字中台的架构,包括技术架构、应用架构和数…

vFW搭建IRF

正文共:2328字 40图,预估阅读时间:5 分钟 IRF(Intelligent Resilient Framework,智能弹性架构)技术通过将多台设备连接在一起,虚拟化成一台设备,集成多台设备的硬件资源和软件处理能…

Selenium自动化测试技巧还不知道吗?

1、前言 与以前瀑布式开发模式不同,现在软件测试人员具有使用自动化工具执行测试用例套件的优势,而以前,测试人员习惯于通过测试脚本执行来完成测试。 但自动化测试的目的不是完全摆脱手动测试,而是最大程度地减少手动运行的测试…

玻色量子计算应用奖公布!MathorCup大赛圆满落幕

2023年8月15日,中国优选法统筹法与经济数学研究会主办的2023年第十三届MathorCup高校数学建模挑战赛圆满落幕。为了培养优秀学子的创新意识及运用数学方法和量子计算技术解决实际问题的能力,推动量子计算的实际落地应用,北京玻色量子科技有限…

计算机网络:可靠数据传输(rdt)、流水协议、窗口滑动协议

文章目录 前言一、Rdt1.Rdt1.02.Rdt2.03.Rdt2.14.Rdt2.25.Rdt3.0 二、流水线协议1.滑动窗口(slide window)协议发送窗口接收窗口正常情况下的2个窗口互动异常情况下GBN的2个窗口互动异常情况下SR的2窗口互动GBN协议和SR协议的异同 2.小结 总结 前言 Rdt…

Linux之重谈文件和c语言文件接口

重谈文件 文件 内容 属性, 所有对文件的操作都是: a.对内容操作 b.对属性操作 关于文件 一: 即使文件的内容为空,该文件也会在磁盘上也会占空间,因为文件不仅仅只有内容还有文件对应的属性,文件的内容会占用空间, 文件的属性也…

Leetcode每日一题学习训练——Python3版(从二叉搜索树到更大和树)

版本说明 当前版本号[20231204]。 版本修改说明20231204初版 目录 文章目录 版本说明目录从二叉搜索树到更大和树理解题目代码思路参考代码 原题可以点击此 1038. 从二叉搜索树到更大和树 前去练习。 从二叉搜索树到更大和树 给定一个二叉搜索树 root (BST),请…

麦田医学CEO参加2023年度苏州市青年创业标兵授奖仪式

麦田医学CEO参加2023年度苏州市青年创业标兵授奖仪式 2023年12月4日,麦田(苏州)医学科技有限公司(下简称麦田医学)首席执行官(CEO)李任远同志受邀参加在苏州广电总台举行的2023年度苏州大学生创…