Shell 是一个用 C 语言编写的程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
业界所说的 Shell 通常都是指 Shell 脚本,但要知道,Shell 和 Shell Script 是两个不同的概念。
Shell 脚本种类众多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
除了上面的几种,Node.js 本质上也是一种 Shell 脚本,只不过他的语法是 JavaScript。不同 Shell 脚本的区别就是语法不一样。
总结:我们通过编写 Shell 脚本,然后放在 Shell 应用程序里面运行,常见的 Shell 应用程序有 Cmd、git Bash 等等。常见的Shell 脚本有 Bash、Node。
不同的 Shell 脚本需要不同的 Shell 应用程序来执行,默认 Shell 应用程序都是执行 Bash 脚本的,如果需要切换 Node 脚本的执行环境,我们需要安装 Node,配置完成环境变量后,输入node
即可切换 Node 脚本的执行环境中。
Shell 脚本 - Bash
Bash 是大多数 Linux 系统默认的 Shell 脚本。
Bash Documents
Linux系统目录结构
目录文字说明
代码语言:javascript复制mkdir demo
cd demo
mkdir css js
touch index.html css/style.css js/main.js
exit
脚本执行的原理(Bash 脚本)
你每次在 Shell 应用程序 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。
当我们自己写的脚本不在 PATH 列表里面应该怎么执行呢?比如我们写了一个名为 demo 的脚本。
第一种
代码语言:javascript复制cd demo 脚本的目录
./demo
第二种
代码语言:javascript复制脚本目录/demo
注意:如果我们直接在 Bash 里面输入 demo 的话,会发现执行不了,因为 demo 这个脚本不在 PATH 列表里。
查看脚本所在的 PATH
使用 type ls
可以看到寻找过程(在 Win 系统下好像没啥用)
使用 which ls
可以看到寻找结果
Shell 脚本 - Node
我们在 Bash 执行环境里输入 Bash 脚本,也可以在 Node 执行环境里输入 Node 脚本。
Bash 脚本能做的事情,JS 脚本也能做。(sh demo.sh 对应 node demo.js)
Node.js Document
查看当前目录
代码语言:javascript复制process.cwd();
创建目录
代码语言:javascript复制var fs = require('fs')
fs.mkdirSync("./demo")
创建文件
代码语言:javascript复制var fs = require('fs')
fs.writeFileSync("./demo.txt","123")
注意点
脚本后缀
作用:毫无作用。
Linux 中的文件是通过敲命令来执行的,可以用vi demo
通过 vi 来打开,也可以通过sh demo
当做脚本来执行,默认是 sh
文末放一个案列:列如我写的一个脚本控制tcl tv压测netflix转dtv后blank screen
代码语言:javascript复制while true;
do
input keyevent 25 #声音降低
input keyevent 25
input keyevent 25
echo 02f6 > /sys/venus_ir/ir_gen_keycode #打开netflix
sleep 2
echo 0x1c > /sys/venus_ir/ir_gen_keycode #确认片源
sleep 1
echo 0x1c > /sys/venus_ir/ir_gen_keycode #确认播放
sleep 3
input keyevent 24 #声音升高
input keyevent 24
input keyevent 24
sleep 1
echo 01d7 > /sys/venus_ir/ir_gen_keycode #切换tv
sleep 2
input keyevent 22 #左键
sleep 1
echo 0x1c > /sys/venus_ir/ir_gen_keycode #确认切换到dtv
sleep 10
echo 0x66 > /sys/venus_ir/ir_gen_keycode #返回主页
sleep 1
done
获取键值方法一
控制键值
获取:dmesg -c |grep IR
代码语言:javascript复制[ 2723.097758] 11:18:35.995 (3)-0000x09[IR] [DBG] roger venus_ir_input_report_end_TCL keycode=0x6c
[ 2723.097774] 11:18:35.995 (3)-0000x09[IR] [DBG] roger venus_ir_input_report_end_TCL keycode=0x6c up
实现:echo 0x6c > /sys/venus_ir/ir_gen_keycode
获取键值方法二
获取键值getevent
代码语言:javascript复制add device 1: /dev/input/event2
name: "virtual-search"
could not get driver version for /dev/input/js0, Invalid argument
add device 2: /dev/input/event1
name: "rtk_keypad"
add device 3: /dev/input/event0
name: "mtkinp"
/dev/input/event0: 0001 0192 00000001
/dev/input/event0: 0000 0000 00000000