Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)

http://c.biancheng.net/cpp/shell/

Shell是什么?

  • 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序
  • 还是一个功能强大的变成语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令

Shell的分类

  • Bourne Shell,也称为B Shell,1979年起Unix就开始使用它,主文件名为sh
  • C Shell,主要是BSD版的Unix系统中使用,因其语法和C语言相类似而得名

Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。前者主要包括sh, ksh, Bash, psh,后者主要包括csh, tcsh

Linux的标准Shell是BashBashsh是相互兼容的。通过执行echo $SHELL就可以看到当前系统支持的哪种Shell

Linux支持的shell

vi /etc/shells 可以看到当前Linux支持的所有Shell
sh 就从Bash进入到了sh
exit 退出当前Shell
使用bash命令可以在已有的Bash下创建一个子Shell,同样使用exit退出,调用和退出都是一级一级连贯的
后续课程会讲自己当前所处的shell是什么

查看与设定别名

alias 查看系统中所有的命令别名
alias 别名='原命令' 设定命令的别名
alias rm='rm -i'或者alias ll='ls -l'
相当于设置快捷命令,只不过是临时生效的

别名永久生效与删除别名

vi ~/.bashrc 写入环境变量配置文件
unalias 临时删除别名

命令生效顺序

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第1张图片

常用快捷键

快捷键 含义
ctrl+c 强制终止当前命令
ctrl+l 清屏
ctrl+a 光标移动到命令行首
ctrl+e 光标移动到命令行尾
ctrl+u 光标所在位置删除到行首
ctrl+z 把命令放入后台
ctrl+r 在历史命令中搜索

历史命令

history 【选项】【历史命令保存文件】
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改HISTSIZE=1000

历史命令的调用

  • 使用上下箭头调用以前的历史命令
  • 使用!n重复执行第n条命令
  • 使用!!重复执行上一条命令
  • 使用!字串重复执行最后一条以该字串开头的命令

命令与文件补全

在Bash中,命令与文件补全是非常方便与常用的功能我们只要在输入命令或文件时,按Tab键就会自动进行补全

输出重定向

标准输入输出

设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/stdeer 2 标准错误输出

输出重定向

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第2张图片

ipconfig > ~/desktop/test.log,将内容保存在日志文件中
只要命令有输出就能重定向到文件中
特别注意,错误输出大于号和文件之间不能有空格!!!

正确和错误输出同时保存

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第3张图片

3和4作用是一样的!推荐3,4,5!
特别这个文件/dev/null,被称为『黑洞』,如果把命令重定向到这儿,系统就直接抛弃了

输入重定向

wc【选项】【文件名】
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
这里首先引入这个例子——wc < test.logwc命令原本的输入是键盘,现在重新定向为文件,当然,其实不需要<
另外一个例子是——wc << ddy,它会要求你不断输入,知道再遇到ddy,就会停止并做相关统计,实际工作中基本不会用到

多命令顺序执行

多命令执行符 格式 作用
; 命令1 ; 命令2 多个命令顺序执行,命令之间没有任何逻辑联系
&& 命令1 && 命令2 逻辑与,命令1正确执行才会执行命令2,命令1不正确执行,则命令2不会执行
shift+\shift+\ 命令1 shift+\shift+\ 命令2 逻辑或,当命令1执行不正确,则命令2才会执行,当命令1正确执行,则命令2不会执行

*其中,shift+\意味着|
例如:date ; tar -zcvf etc.tar.gz /etc ; date可以计算中间打包压缩命令执行的耗时
再如,ls && echo yes || echo no,第一个命令正确执行,输出yes,错误执行,输出no

管道符

命令格式:命令1 | 命令2,有一定的编程思想在里面 命令1的正确输出作为命令2的操作对象,和逻辑与不一样
例子:

  • ls -l /etc | more代表将ls -l /etc的输出分屏显示
  • netstat -an | grep ESTABLISHED代表搜索netstat -an输出中带有ESTABLISHED的行
    如果再变成netstat -an | grep ESTABLISHED | wc -l,此为多管道符命令,代表到最后统计带有ESTABLISHED的行的数目,即可看出服务器上连接了多少人
  • 如果原本使用cat输出的内容中有很多重复,可在后面加上|uniq去重

通配符

通配符 作用
? 匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符。例如[abc]代表一定匹配一个字符,或者a或者b或者c
[-] 匹配中括号中任意一个字符,-代表一个范围。例如,[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是中括号内的一个字符。例如[^0-9]代表匹配一个不是数字的字符

Bash中其他特殊符号

符号 作用
'' 单引号。在单引号中所有的特殊符号,如"$"和"`"(反引号)都没有特殊含义
"" 双引号。在双引号中特殊符号都没有特殊含义,但是"$"、"`"和"\"是例外,拥有"调用变量的值"、"引用命令"和"转义符"的特殊含义
`` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。
$() 和反引号一样,用来引用系统命令
# 在Shell脚本中,#开头的行代表注释
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变味普通字符。如\$将输出"$"符号,而不当作是变量引用

shell例子见/shell/shell.example

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第4张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第5张图片

shell脚本就可以当做命令使用

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第6张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第7张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第8张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第9张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第10张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第11张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第12张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第13张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第14张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第15张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第16张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第17张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第18张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第19张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第20张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第21张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第22张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第23张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第24张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第25张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第26张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第27张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第28张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第29张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第30张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第31张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第32张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第33张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第34张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第35张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第36张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第37张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第38张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第39张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第40张图片

Linux曲径通幽:Shell编程(别名、历史、输入输出重定向、多命令顺序执行、管道符、通配符)_第41张图片

你可能感兴趣的:(Linux)