服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - 利用 Shell 脚本自动化命令的五种方法

利用 Shell 脚本自动化命令的五种方法

2022-10-18 17:57七爪网 Linux

Shell 编写由 UNIX 终端执行的命令序列。 这意味着您可以使用它们与命令行界面 (CLI) 进行交互,甚至可以编写自己的逻辑。 本文将向您展示如何使用简单的 shell 脚本作为您自己的 CLI。

当您的计算机可以为您完成时,不要浪费时间记住长命令。

利用 Shell 脚本自动化命令的五种方法

本文使用的是 MacOS

Shell 编写由 UNIX 终端执行的命令序列。 这意味着您可以使用它们与命令行界面 (CLI) 进行交互,甚至可以编写自己的逻辑。 本文将向您展示如何使用简单的 shell 脚本作为您自己的 CLI。

Shell 脚本的用例

  • 缩短长 CLI 函数
  • 运行多个连续函数
  • 实现逻辑以确定要执行的适当命令

制作 bin 目录

如果您希望能够从任何地方运行您的脚本,那么好消息,您可以!

基于 UNIX 的操作系统(例如 MacOS 和 Linux)会将位于 ~/bin 目录中的所有 shell 脚本纳入范围。

通过在终端中运行以下命令来检查您是否拥有它。

$ [[ -d ~/bin ]] && echo "Directory ~/bin exists." || echo "Directory ~/bin does not exist"

如果你没有这个文件夹,你的终端会回复“目录~/bin 不存在”。

如果您收到此消息,请运行命令 mkdir ~/bin。

示例 1:Hello World

让我们从一个基本脚本开始,以帮助您掌握它!

在您的终端中,执行以下命令:

$ cd ~/bin $ touch hello $ chmod 777 hello

这会将您的终端移动到 bin 作为您的工作目录,创建一个名为 hello 的文件,并授予它作为可执行文件运行的权限。 在您选择的代码编辑器中打开文件。

#!/bin/bash echo "World!"

注意:#!/bin/bash 告诉您的设备将文件作为 bash 脚本运行,没有它脚本将无法运行。

现在让我们运行文件!

利用 Shell 脚本自动化命令的五种方法

如您所见,我可以从计算机上的任何目录运行脚本!

示例 2:引入参数

既然我们已经掌握了基础知识,那么在进入我一直使用的脚本之前,让我们看一下稍微复杂一点的 hello world 版本!

Shell 脚本保留了变量名称,例如 $1、$2、$3 等。这些是命令行参数的替身。 让我们在我们的 hello 脚本中使用它们,如下所示:

#!/bin/bash echo "hello $1"

利用 Shell 脚本自动化命令的五种方法

让我们将这个概念应用到一个真实的例子中。

许多使用 Java 编码的人可能都知道,您必须先将 .java 文件编译为 .class 才能运行它,这是两个单独的命令。 让我们制作一个 shell 脚本,将它们组合成一个“编译并运行”命令!

如果您在创建新脚本时需要帮助,可以跳回 hello world 步骤。 我将此文件称为“javab”

#!/bin/bash javac $1 # compile to .class /bin/java ${1:-5} # point to local java function, run

利用 Shell 脚本自动化命令的五种方法

示例 3:缩短现有命令

如果你之前用过FFmpeg压缩过视频文件,你就会知道这个命令并不短,而且通常每一步都很难记住。 这是一个使用 25 的恒定速率因子 (CRF) 的示例。

ffmpeg -i file.mov -vcodec libx264 -crf 25 newfile.mp4

这是我经常运行的命令,用于压缩 mac 屏幕录制并将其转换为 mp4。 让我们尝试使用 shell 脚本来简化它!

如果你没有安装 FFmpeg,你可以在这里下载。

#!/bin/bash ffmpeg -i $1 -vcodec libx264 -crf $2 $3

我称这个文件为“压缩”。

现在,我可以从任何工作目录压缩视频并将新文件保留在同一目录中。 如果你愿意,你可以添加一些额外的逻辑,比如

#!/bin/bash ffmpeg -i $1 -vcodec libx264 -crf $2 ${1%.*}.mp4 && rm $1

此命令将 $1 中文件名的扩展名去掉,并将其替换为 .mp4。 如果命令运行成功,则删除原始文件,否则不执行任何操作

示例 5:循环和 If

这将是我们最后的也是最复杂的例子,但它也是我使用最多的例子。

如果您曾经有许多不同的遥控器链接到 heroku、github、bitbucket 等,并且想要推送到所有这些,那总是很麻烦。

特别是如果您进行了许多小提交并希望与同事分享您的最新更改以防止合并冲突。

这是一个简短的“保存”脚本,它将提交您的最新更改,然后推送到您的遥控器!

#!/bin/bash commit=$1 # set var commit to argument 1 if [ -z "$commit" ] # if commit is empty then commit="autosave" fi git commit -am "$commit" output=$(git remote) # run git remote and save all remotes pusharray=($output) # convert to array for i in ${pusharray[@]}; do # for every item in pusharray, git push git push $i done

结论

总之,您已经学会了如何使用参数、字符串操作、条件(if 语句和 &&)和循环来自动化本地命令行工作流。

您现在能够更好地利用您的 shell 脚本知识来推进您的工作并节省一些时间!

原文地址:https://www.toutiao.com/article/7154710918176326144/

延伸 · 阅读

精彩推荐
  • LinuxLINUX查看进程的4种方法(小结)

    LINUX查看进程的4种方法(小结)

    这篇文章主要介绍了LINUX查看进程的4种方法(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    是日已过,命亦随减4882020-07-16
  • LinuxLinux回收站机制实现过程及用法详解

    Linux回收站机制实现过程及用法详解

    这篇文章主要介绍了Linux回收站机制实现过程及用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    小雨淅淅o02452020-08-04
  • Linux手把手教你使用 Gpio 子系统 API

    手把手教你使用 Gpio 子系统 API

    本文讲解 pinctrl 子系统和 gpio 子系统的 API,以及使用示例。传统的配置 pin 的方式就是直接操作相应的寄存器,但是这种配置方式比较繁琐、而且容易出问...

    嵌入式Linux系统开发7652021-12-15
  • Linux用 Linux 的 watch 命令观察命令和任务

    用 Linux 的 watch 命令观察命令和任务

    了解 watch 命令如何让你知道任务已完成或命令已执行。watch 命令对于许多临时性的系统管理任务非常有用,在这些任务中,你需要在没有进度条的情况下等...

    Linux中国7932021-09-22
  • Linux一篇非常好的linux学习笔记分享(Linux入门绝佳)

    一篇非常好的linux学习笔记分享(Linux入门绝佳)

    一篇非常好的linux学习笔记分享,对于常用命令整理的比较详细,推荐使用。 ...

    Linux教程网3002020-04-03
  • LinuxLinux下查看指定文件夹和文件的大小

    Linux下查看指定文件夹和文件的大小

    df命令:查看目前所有文件系统的可用空间及使用情况,df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力 ...

    Linux教程网5882019-12-09
  • LinuxLinux如何在history上添加时间和用户等参数

    Linux如何在history上添加时间和用户等参数

    Linux 系统下可以使用 history 命令来查看指令的历史记录。为了提高history命令的效率,还可以在history命令加上一些参数,比如时间、用户和IP等等参数。那么...

    系统之家4472020-07-02
  • Linux在Linux系统中配置CSF防火墙的教程

    在Linux系统中配置CSF防火墙的教程

    这篇文章主要介绍了在Linux系统中配置CSF防火墙的教程,ConfigServer Security & Firewall是Linux服务器安全维护的一个常见选择,需要的朋友可以参考下 ...

    Linux之家3512019-09-17