Bash脚本
创建一个脚本
-
随便找个地方建立个文件, 假设在~/local里吧
mkdir ~/local
cd ~/local
touch demo
-
编辑demo
mkdir test
cd test
mkdir css js
touch index.html css/style.css js/main.js
exit
-
给demo添加执行权限
chmod +x demo
-
任意位置执行
sh ~/local/demo
即可运行脚本 -
在PATH中添加
~/local
cd ~/local
-
pwd
得到绝对路径 - 创建~/.bashrc文件并且在里面添加一行
export PATH="local的绝对路径:$PATH"
-
source ~/.bashrc
每次设置完了需要source一下才能生效
-
这时候直接输入
demo
就会运行脚本了, 不需要再输入sh ~/local/demo
PATH作用
我们echo $PATH
一下, 会发现, PATH是保存命令文件的路径
路径用:
隔开
Linux命令是文件
首先我们要明确一点, 命令实际是一个文件, 当我们运行一个命令时, 比如ls, 系统会一次在这些路径中找是否有ls这个文件, 直到找到为止, 找不到就提示没有这个命令,这里介绍几个跟环境变量相关的命令命令
echo $PATH
查看$PATH路径
chmod -X 文件名
给文件添加X权限
pwd
显示当前路径
type 命令
显示命令路径
which 命令
显示命令的类型
我们可以用type ls
看看我们ls文件在系统的那里存着
参数
我们可以给脚本传参, 假设我们创建了一个demo脚本
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit
$1就表示我们运行脚本时候传进去的第一个参数
为什么会知道呢
Google 出来的 http://lmgtfy.com/?q=bash+first+param
用百度也行 http://www.baidu-x.com/?q=bash+%E7%AC%AC%E4%B8%80%E4%B8%AA+%E5%8F%82%E6%95%B0
判断目录是否存在
if [ -d $1 ]; then
echo '$1 has exist'
exit
else
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit
fi
这里面比较难理解, 先说一下[-d $1]
的意思
-d $1
表示文件$1
bash的判断通过下面的语法
if[]; then
...
else
...
fi
我们怎么会知道-d $1
可以判断目录是否存在?
Google出来的 http://lmgtfy.com/?q=bash+dir+exists
返回值
exit 0
表示没有错误
exit 1
表示错误代码为 1
demo && echo '结束'
只有在 demo 成功时,才会执行echo '结束'
Node.js 写脚本
- 创建 ~/local/jsdemo.js,内容如下
var fs = require('fs')
var dirName = process.argv[2] // 你传的参数是从第 2 个开始的
fs.mkdirSync("./" + dirName) // mkdir $1
process.chdir("./" + dirName) // cd $1
fs.mkdirSync('css') // mkdir css
fs.mkdirSync('js') // mkdir js
fs.writeFileSync("./index.html", "")
fs.writeFileSync("css/style.css", "")
fs.writeFileSync("./js/main.js", "")
process.exit(0)
-
给 jsdemo.js 加上执行权限
chmod +x ~/local/jsdemo.js
-
node ~/local/jsdemo.js zzz
,就可以看到 zzz 目录创建成功了 -
shebang
我们每次执行 ~/local/jsdemo.js 都要用 node 来执行,能不能做到不加 node 也能执行呢(也就是指定执行环境),可以,在 jsdemo.js 第一行加上这一句即可:#!/usr/bin/env node
然后你就可以直接用 ~/local/jsdemo.js zzz 了(省得输入 node 了)。
如果你已经把 ~/local 加入了 PATH,那么甚至可以直接输入 jsdemo.js zzz 来执行。
如果你再把 jsdemo.js 的后缀 .js 去掉,就可以直接 jsdemo zzz 了。
网友评论