本文紧张先容shell脚本的一些基本用法以及在前端项目中的运用。将环绕以下几点来展开: 1. shell基本用法(变量,循环,传参,运算符,流程掌握等) 2. 利用shell脚本自动将项目打包支配到git做事器 3. 利用nodeJs编写命令行工具
1. shell基本先容及用法Shell 是一个用 C 措辞编写的程序,它是用户利用 Linux 的桥梁,业界所说的 shell 常日都是指 shell 脚本,Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能阐明实行的脚本阐明器就可以了。Linux 的 Shell 种类浩瀚,在这里我们先容一种常用且开源免费的shell——bash。
Shell 变量变量声明如下:
time=10
注:变量名和等号之间不能有空格,变量名命名规则如下: 命名只能利用英笔墨母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以利用下划线(_)。 不能利用标点符号。 不能利用bash里的关键字(可用help命令查看保留关键字)
我们可以通过如下办法利用变量:
name="xujiang"echo $name# 或者这样echo ${name}
我们能利用如下办法删除变量:
unset name
关于shell变量的更多用法,可以参考linux官网,这里就不过多先容了。
Shell 通报参数我们可以在实行 Shell 脚本时,向脚本通报参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为实行脚本的第一个参数,2 为实行脚本的第二个参数,以此类推,个中 $0 为实行的文件名
利用如下:
echo "文件名:$0";echo "参数一:$1";echo "参数二:$2";echo "参数三:$3";# 输出文件名:./test.sh参数一:1参数二:2参数三:3
Shell 数组
Bash Shell 只支持一维数组,数组元素的下标由0开始。Shell 数组用括号来表示,元素用"空格"符号分割开,例如:
names=(name1 ... namen)
我们可以通过如下办法读取数组:
${names[0]}
我们可以利用@ 或 可以获取数组中的所有元素,例如:
echo "数组的元素为: ${nsmes[]}"# 输出为数组的元素为: A B C D
Shell 基本运算符
Shell支持多种运算符,如下: 算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符
原生bash不支持大略的数学运算,但是可以通过其他命令来实现,这里我们利用expr。它是一款表达式打算工具,利用它能完成表达式的求值操作。 例如:
#!/bin/bashtotal=`expr 2 + 2`echo "两数之和为 : $total"
注:这里我们利用反引号``。由于命令行工具这块用得比较少,如果感兴趣,大家可以辞官网理解学习。
Shell echo命令Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出,这里我们着重先容与用户交互的输入输出。
#!/bin/shread name echo "hello $name"
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。当我们实行脚本后,输入一个自定义名称,按下回车将输出 'hello xxx',我们是不是想到了vue脚手架中的一些命令呢,是的,我们可以用这个方法去实现自己的脚手架配置或者自动天生项目模版。
我们也可以用echo将显示结果定向至文件:
echo "It is mine" > test.js
实行 这个文件后将为我们创建一个test.js文件,并将输出内容写入test.js。
Shell test 命令test 命令用于检讨某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试: -eq 即是则为真 -ne 不即是则为真 -gt 大于则为真 -ge 大于即是则为真 -lt 小于则为真 -le 小于即是则为真
利用办法如下:
name1=1name2=1if test $[name1] -eq $[name2]then echo '相等!
'else echo '不相等!
'fi
运行脚本后将输出'相等!'。
字符串测试:
= 即是则为真!= 不相等则为真-z 字符串 字符串的长度为零则为真-n 字符串 字符串的长度不为零则为真例如:
name1="xu"name2="xu"if test $name1 = $name2then echo '两个字符串相等!'else echo '两个字符串不相等!'fi
Shell 流程掌握
流程掌握我们紧张先容if else, if else-if else和for循环。
if elseif 条件1then 命令操作1else 命令操作2fi
if else-if else
a=1000b=2000if [ $a == $b ]then echo "a 即是 b"elif [ $a -gt $b ]then echo "a 大于 b"elif [ $a -lt $b ]then echo "a 小于 b"else echo "无"fi
for 循环
# 一样平常格式for var in a1 a2 ... aNdo 命令1 命令2 ... 命令Ndone
在理解完如上知识点后,我们来看看这些能做些什么。
2. 利用shell脚本自动将项目打包支配到git做事器一个git提交的例子#!/bin/bashgit add .git commit -m 'xj--'$1git push# 提交时只须要实行 bash git.sh '参数内容'即可完成提交操作
首先,我们在项目根目录下新建一个git.sh文件,输入以上脚本,保存,然后我们后面要提交代码时,只须要实行 bash git.sh '你的注释',就可以将代码提交到做事器上了,是不是简化了我们提交的步骤呢
vue项目支配我在一张图教你快速玩转vue-cli3这篇文章中教大家了如何独立配置项目,文章末端有写到支配的办法,如下:
#!/usr/bin/env sh# 当发生缺点时中止脚本set -e# 构建npm run build# cd 到构建输出的目录cd distgit initgit add -Agit commit -m 'deploy'git push -f git@bitbucket.org:<USERNAME>/<USERNAME>.bitbucket.io.git mastercd -
在学完shell脚本后,是不是以为豁然开朗了呢。如果有更繁芜的需求,我们可以用同样的办法去支配。
3.利用nodeJs编写命令行工具我们这里利用commander来搭建node命令行,接下来我会给出最基本的用法,下一篇文章将专门来给大家讲解如何搭建一个高可用的node命令行工具,在此之前,大家可以自由摸索,大概会有更好的办法。
// 1.构建项目目录mkdir xxxcd xxxnpm init// 2.安装commander模块npm install commander --save// 3.新建bin/[你自定义的命令行文件名]#!/usr/bin/env nodevar program = require('commander');program.version('0.0.1');program .command('help') .description('显示利用帮助') .action(function() { program.outputHelp(); });program .command('create [dir]') .description('创建一个空博客') .action(function(dir) { console.log('create %s', dir); });program .command('preview [dir]') .description('实时预览') .action(function(dir) { console.log('preview %s', dir); });program .command('build [dir]') .description('天生整站静态HTML') .option('-o, --output <dir>', '天生的静态HTML存放目录') .action(function(dir) { console.log('创建 %s, 输出 %s', dir, options.output); });// 开始解析命令program.parse(process.argv);// 4.在package.json目录下实行关联操作npm link// 5.测试,输入干系命令即可实行对应操作xxx help
接下来将推出《如何搭建一个高可用的node命令行工具》,欢迎关注。如有更好的shell用场,欢迎在评论区互动,期待+1
末了以为有用 ?喜好就收藏,顺便点个赞吧,你的支持是我最大的鼓励!
搜 “趣谈前端”,创造更多有趣的H5游戏, webpack,node,gulp,css3,javascript,nodeJS,canvas数据可视化等前端知识和实战.