七爪源码利用Shell脚本自动化命令的5种方法
当您的计算机可以为您完成时,不要浪费时间记住长命令
本文使用的是 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 脚本运行,没有它脚本将无法运行
现在让我们运行文件!
如您所见,我可以从计算机上的任何目录运行脚本!
示例 2:引入参数
既然我们已经掌握了基础知识,那么在进入我一直使用的脚本之前,让我们看一下稍微复杂一点的 hello world 版本!
Shell 脚本保留了变量名称,例如 $1、$2、$3 等。这些是命令行参数的替身。 让我们在我们的 hello 脚本中使用它们,如下所示:#!/bin/bash echo "hello $1"
让我们将这个概念应用到一个真实的例子中
许多使用 Java 编码的人可能都知道,您必须先将 .java 文件编译为 .class 才能运行它,这是两个单独的命令。 让我们制作一个 shell 脚本,将它们组合成一个"编译并运行"命令!
如果您在创建新脚本时需要帮助,可以跳回 hello world 步骤。 我将此文件称为"javab"#!/bin/bash javac $1 # compile to .class /bin/java ${1:-5} # point to local java function, run
示例 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 脚本知识来推进您的工作并节省一些时间!
如果您对编码教程感兴趣并了解更多关于通过简单自动化改善生活的信息,请点击关注并继续关注!
关注七爪网,获取更多APP/小程序/网站源码资源!
有生活来上林村感受古朴的氛围古老的宅子丰厚的传统文化都是这村庄的特征它就是上林村位于横街镇东南部村里大部分都是姓林的村内建有林氏祠堂自古工商业氛围浓厚是改革开放初万元户的发祥地上林村原本规划滞后房屋住宅很破旧
一位导游的告诫初到日本游玩,最好不要和当地女孩喝酒,很尴尬日本对于很多人来说是一个十分不错而且值得游玩的国家之一,日本这一个国家相对来说出行比较方便,而且当地的消费水平对于不少人来说也是可以接受的,很多人都会选择去日本购物或者去日本游玩一
据说开过沃尔沃XC60去旅行,才明白生活的真谛电影小时代中,宫洺在连棵树都不能随便移动的市中心,盖了一座玻璃房子。它的取景地由原手表五厂的旧厂房改建而成,正是世界级建筑大师隈研吾操刀设计的上海Z58。还有上海人经常打卡的船厂1
广东宏远VS宁波富邦!杜锋冲击三连胜,拒绝爆冷广东宏远取得两连胜面对实力不俗的天津队,广东队几乎全场压制,防守非常出色,只让天津队得到了83分。马尚布鲁克斯无人可挡,命中了7记三分球,狂砍29分14篮板8助攻。广东队最大的收获
浙江省的区划变动,11个地级市之一,台州市为何有9个区县?在之前的文章中给大家说过很多城市的变迁历史,很多城市的变迁历史都是有迹可循的,繁荣与衰落不过是常态。由于我国的历史过于悠久,所以很多城市也没有介绍到,今天给大家介绍一下浙江省台州市
新藏线之丁离开阿里,进入日喀则地区第一天,老肿巴到萨嘎县老仲巴,不知道以前怎么样,现在就是一个要什么没什么,食宿不靠谱,服务质量差的休整地!早上起来,没水洗漱,没地上厕所,五平见方的藏式小房
邓铃王瑞平吴广全何时在湖南郴州知心世界岛会盟近段时间,湖南郴州市有个小岛火了,这个小岛的名字叫做知心世界岛,顾名思义,活在世界上,必须懂得自己的内心在渴求什么。为小岛取名的是王瑞平女士,她曾去海外学习过世界心理学,学成归来后
巴铁的冬天有多冷?我来告诉你巴基斯坦的冬天到底冷不冷?今天有朋友问我到巴基斯坦出差旅游,那需要带什么样的衣服现在国内已经开始特别冷了,需要穿羽绒服很多地方都下雪了,问我是不是需要带厚的衣服羽绒服啊,长袖之类的
金秋十月稻海金浪金秋十月稻海金浪稻香秋季醉靓丽的金秋十月大自然的丰收景像如波澜壮阔的稻海金浪片片层层稻海金田泛着美丽黄金色的诱惑一幅幅色彩斑斓的美丽画卷徐徐展开宏图美丽的诱惑赣南红色土地资源辽阔展
蓬莱阁游玩攻略9月27日,游玩蓬莱阁踩点海船轮渡码头。早上,从酒店出发,自驾去蓬莱阁景区,路程60公里,用时1。40小时。蓬莱阁位于烟台蓬莱区西北的丹崖山上,面朝黄渤海分界处。蓬莱阁是一个古建筑
腾讯早期股东持股变动记录ampampamp创始团队MIH股份减持记录创作不易,不求打赏,求关注,点赞,分享)借着近期腾讯大股东MIH减持的契机,下午花了点时间把腾讯招股书翻了翻,梳理了下腾讯IPO前历次股东股权变更情况,以及IPO后大股东创始团队股