当前位置: 首页 > 科技观察

使用Shell脚本自动执行命令的五种方法

时间:2023-03-13 18:01:29 科技观察

计算机可以为您记住长命令时,不要浪费时间。本文使用MacOSShell编写一系列要由UNIX终端执行的命令。这意味着您可以使用它们与命令行界面(CLI)交互,甚至编写您自己的逻辑。本文将向您展示如何使用一个简单的shell脚本作为您自己的CLI。Shell脚本的用例缩短长CLI函数运行多个连续函数实现逻辑以确定要执行的适当命令创建一个bin目录如果您希望能够从任何地方运行您的脚本,好消息,您可以!基于UNIX的操作系统(例如MacOS和Linux)将位于~/bin目录中的任何shell脚本纳入范围。通过在终端中运行以下命令来检查您是否拥有它。$[[-d~/bin]]&&echo“目录~/bin存在。”||echo"Directory~/bindoesnotexist"如果你没有这个文件夹,你的终端会回复"Directory~/bindoesnotexist"exist"。如果你得到这个消息,运行命令mkdir~/bin。示例1:HelloWorld让我们从一个基本脚本开始,帮助您掌握它!在您的终端中,执行以下命令:$cd~/bin$touchhello$chmod777hello这会将您的终端移动到bin作为您的工作目录,创建一个名为hello的文件,并授予它访问执行权限以运行该文件。在您选择的代码编辑器中打开该文件。#!/bin/bashecho"World!"注意:#!/bin/bash告诉您的设备将文件作为bash脚本运行,否则脚本将无法运行。现在让我们运行文件!如您所见,我可以从计算机上的任何目录运行脚本!示例2:引入参数现在我们已经涵盖了基础知识,在进入我一直使用的脚本之前,让我们看一下稍微复杂一点的helloworld版本!Shell脚本保留va可用的名称,如$1、$2、$3等。这些是命令行参数的替代品。让我们像这样在我们的hello脚本中使用它们:#!/bin/bashecho"hello$1"让我们将这个概念应用到一个真实的例子中。许多使用Java编写代码的人可能都知道,在运行.java文件之前必须将其编译为.class,这是两个独立的命令。让我们制作一个shell脚本,将它们组合成一个“编译并运行”命令!如果您在创建新脚本时需要帮助,可以跳回helloworld步骤。我将这个文件称为“javab”#!/bin/bashjavac$1#compileto.class/bin/java${1:-5}#pointtolocaljavafunction,runExample3:ShortenexistingcommandsifyoupreviousIf如果你用过FFmpeg压缩过视频文件,你就会知道这条命令并不短,而且通常很难记住每一步。这是一个使用25的恒定速率因子(CRF)的示例。ffmpeg-ifile.mov-vcodeclibx264-crf25newfile.mp4这是我经常运行的命令,用于压缩mac屏幕录制并将它们转换为mp4。让我们尝试使用shell脚本来简化它!如果你没有安装FFmpeg,你可以在这里下载。#!/bin/bashffmpeg-i$1-vcodeclibx264-crf$2$3我称这个文件为“压缩文件”。现在我可以从任何工作目录压缩视频并将新文件保存在同一目录中。如果需要,您可以添加一些额外的逻辑,例如#!/bin/bashffmpeg-i$1-vcodeclibx264-crf$2${1%.*}.mp4&&rm$1此命令将$1中的文件名扩展名删除它,并将其替换为.mp4。如果命令成功运行,则删除原始文件,否则什么也不做示例5:循环和If这将是我们的最后一个也是最复杂的示例,但它也是我使用最多的一个。如果你有许多不同的远程链接到heroku、github、bitbucket等,并且想推送到所有这些,那总是很麻烦。特别是如果你做了很多小的提交并想与同事分享你的最新更改以防止合并冲突。这是一个简短的“保存”脚本,它将提交您的最新更改,然后推送到您的远程!#!/bin/bashcommit=$1#将varcommit设置为参数1if[-z"$commit"]#如果commit为空则commit="autosave"figitcommit-am"$commit"output=$(gitremote)#运行gitremote并保存所有remotespusharray=($output)#converttoarrayforiin${pusharray[@]};为pusharray中的每个项目执行#,gitpushgitpush$idone字符串操作、条件(if语句和&&)和循环以自动化本机命令行工作流。您现在可以更好地利用您的shell脚本知识来推进您的工作并节省一些时间!