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 脚本。
Linux系统目录结构
目录文字说明
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 的脚本。
第一种
cd demo 脚本的目录 ./demo
第二种
脚本目录/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)
查看当前目录
process.cwd();
创建目录
var fs = require('fs') fs.mkdirSync("./demo")
创建文件
var fs = require('fs') fs.writeFileSync("./demo.txt","123")
脚本后缀
作用:毫无作用。
Linux 中的文件是通过敲命令来执行的,可以用vi demo
通过 vi 来打开,也可以通过sh demo
当做脚本来执行,默认是 sh
文末放一个案列:列如我写的一个脚本控制tcl tv压测netflix转dtv后blank screen
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
[ 2723.097758] 11:18:35.995 (3)-0000\x09[IR] [DBG] roger venus_ir_input_report_end_TCL keycode=0x6c [ 2723.097774] 11:18:35.995 (3)-0000\x09[IR] [DBG] roger venus_ir_input_report_end_TCL keycode=0x6c up
实现:echo 0x6c > /sys/venus_ir/ir_gen_keycode
获取键值方法二
获取键值getevent
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