Shell概述
- Shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序。
- Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用linux系统命令。
Shell的分类
- Bourne Shell:从1979起来Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。现在基本不用sh。
- C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名。
补充1:
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh,ksh,Bash,psh,zsh;C家族主要包括csh,tcsh。
现在linxu中的标准Shell是Bash。
补充2:
Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。
脚本执行方式
- 赋予执行权限,直接运行:
./hello.sh
- 通过Bash调用执行脚本
bash hello.sh
Bash的基本功能
输出命令:echo
格式:echo [选项] [输出内容]
选项:
-e
:支持反斜杠控制的字符转换
实例:
echo -e "\e[1;31m test \e[0m"
分析:
\e
:调用颜色
[1;
:开启颜色选项
\e[0m
:关闭颜色
31m
:红色
30m:黑色 31m:红色 32m:绿色 33m:黄色 34m:蓝色 35m:洋红 36m:青色 37m:白色
输入重定向:wc
格式:wc [选项] [文件名]
选项:
-c
:统计字节数
-w
:统计单词数
-l
:统计行数
实例:
$ wc -w detail.js
1614 detail.js
管道符:";"
格式:命令1; 命令2
用途:多个命令顺序执行,命令之间没有任何逻辑联系
管道符:"&&"
格式:命令1 && 命令2
用途:逻辑与
当命令1正确执行,则命令2才会执行
当命令1执行不正确,则命令2不会执行
管道符:"||"
格式:命令1 || 命令2
用途:逻辑或
当命令1执行不正确,则命令2才会执行
当命令1执行正确,则命令2不会执行
管道符:"|"
格式:命令1 | 命令2
用途:
命令1的正确输出作为命令2的操作对象
如果命令1出错,命令2不会执行
通配符
?
:匹配一个任意字符
*
:匹配0个或任意多个任意字符,也就是匹配任何内容
[]
:匹配中括号中任意一个字符。
[-]
:匹配中括号中任意一个字符,-代表范围。
[^]
:逻辑非,表示匹配不是中括号内的一个字符。
其他特殊符号
'' 单引号。在单引号中所有的特殊符号,如"$"和"`"(反引号)都没有特殊含义
"" 双引号。在双引号中所有的特殊符号都没有特殊含义,但是"$","`","\"是例外,拥有“调用变量的值”,"引用命令"和"转义符"的特殊含义。
$() 和反引号作用一样,用来引用系统命令
# 注释
$ 用于调用变量的值,如需要调用变量name的值是,需要用$name的方式得到变量的值
\ 转义符,跟在\之后的特殊符号将会失去特殊含义,变为普通字符。如\$将输出"$"符号,而不当作是变量引用。
快捷键
ctrl + c:强制终止当前命令
ctrl + l:清屏
ctrl + a:光标移动到命令行首
ctrl + e:光标移动到命令行尾
ctrl + u:从光标所在位置删除到行首
应用
- 统计当前目录下,js文件的数量
find . -name "*.js" |wc -l
- 统计当前目录下,所有js文件的代码行数
find . -name "*.js" |xargs cat|wc -l
xargs cat:会把前面所有的文件内容一次性读取出来
- 统计当前目录下,所有js文件代码行数(过滤空行)
find . -name "*.js" |xargs cat|grep -v ^$|wc -l
- 统计当前目录下,所有js文件中包含aaa的代码行数
find . -name "*.js" |xargs cat|grep aaa|wc -l