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 临时删除别名

命令生效顺序


常用快捷键

快捷键含义
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标准错误输出

输出重定向


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

正确和错误输出同时保存


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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值