小知识:利用 Shell 脚本自动化命令的五种方法

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

%小知识:利用 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 脚本自动化命令的五种方法-1猿站网-插图

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

示例 2:引入参数

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

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

#!/bin/bash echo “hello $1”

%小知识:利用 Shell 脚本自动化命令的五种方法-2猿站网-插图

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

许多使用 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猿站网-插图

示例 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/

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:nginx配置防盗链的三种实现方式总结

2023-3-15 3:34:09

建站知识

小知识:永中文档在线转换预览基于nginx配置部署方案

2023-3-15 3:43:40

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索