shell 编程(1)bash

什么是shell

用shell来沟通我们的操作系统的核心


微信图片_20191219151839.png

bash

bash:也是基于GNU的架构下发展出来的
是众多shell中的一个。
Unix中有两种主要的shell类别:

1.Bourne shell − If you are using a Bourne-type shell, the $ character is the default(默认) prompt(提示)。
2.C shell − If you are using a C-type shell, the % character is the default prompt.

linux的发布版本之一——Redhat/CentOS——系统默认安装的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,检称sh。那么这个bash有什么特点呢?

1.记录命令历史
我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。
2.指令和文件名补全
按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名。连续按两次tab键,系统则会把所有的指令或者文件名都列出来。
3.别名
前面也出现过alias的介绍,这个就是bash所特有的功能之一了。我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。
4 . 通配符
在bash下,可以使用*来匹配零个或多个字符,而用?匹配一个字符。
5.输入输出从定向
输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>。
6.管道符
前面已经提过过管道符”|”,就是把前面的命令运行的结果丢给后面的命令。
7.作业控制。
当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c)。

查看你的Linux系统安装的shell可用:chsh -l 或者 cat /etc/shells


微信图片_20191219153515.png
使用上面的shell可以变换shell环境(默认是/bin/bash)
[root@localhost shell_learning]# /bin/sh
sh-4.2# exit     //只能用exit退出,用/bin/bash会再次进入一个bash而不是一开始的那个
[root@localhost shell_learning]#

下面开始讲解部分的bash的功能

bash的功能

1.别名 alias 和unalias

alias //显示目前终端的全部别名
alias ll=“ls -l” // 设置别名
unalias ll //取消别名设置

藏终端输入
stty -echo //隐藏终端输入显示
stty echo //恢复终端输入

Bash shell 的内建命令 type
用途: 用来测试命令的类型
type [-tpa] name
选项和参数:
:不加任何选项,会显示name是外部命令,还是bash内置命令
................................
-t //会将name以下面这些关键字来表示出他的意义:
file :外部命令
alias :命令别名
builtin :bash内置命令
不显示任何数据时,表示name不是任何命令
......................................
-p //后面接外部命令时,才会显示出命令的完整文件名
........................................
-a //会由PATH变量定义的路径中,将所有含name的指令都列出来,包括alias

l历史命令:history

history //列出全部历史命令记录
history 10 //显示最近10条执行过的命令
history -c //清除目前 shell 中的所有历史命令
history -w //即刻写入 .bash_history

使用了history后还可以进行如下操作:

!25 //执行第25条历史命令
! ser  //执行最近一次以 “ser”开头的命令
!!   //执行上一条命令
  • history 无法记录时间
    解决方法:可以透过~/.bash_logout来进行history的记录,并加上date来增加时间参数
    注意:同一帐号同时多次在线执行命令时,这样会产生多个bash,那么会以最后一个登出的命令历史记录为准
    建议使用一个用户登入bash,再用[Ctrl]+z fg bg 来控制前后台来切换不同的工作

2.主机的欢迎登陆信息
存放在:/etc/issue 、/etc/motd

微信图片_20191219165012.png

3.文件系统的程序限制关系
为了放置有人恶意打开多个大容量的档案,是内存耗尽导致系统宕机,bash可以限制用户的某些系统资源。


微信图片_20191219170318.png

最常用的就是 -f 了
例如:限制用户仅等建立10MBytes以下容量的文件

ulimit -f 10240

永久生效,编辑 /etc/security/limits.conf

4.Bash 快捷键

编辑命令
Ctrl + a :移到命令行首
Ctrl + e :移到命令行尾
Ctrl + f :按字符前移(右向)
Ctrl + b :按字符后移(左向)
Alt + f :按单词前移(右向)
Alt + b :按单词后移(左向)
Ctrl + xx:在命令行首和光标之间移动
Ctrl + u :从光标处删除至命令行首
Ctrl + k :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Alt + d :从光标处删除至字尾
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符
Ctrl + y :粘贴至光标后
Alt + c :从光标处更改为首字母大写的单词
Alt + u :从光标处更改为全部大写的单词
Alt + l :从光标处更改为全部小写的单词
Ctrl + t :交换光标处和之前的字符
Ctrl+c 终止目前在进行的命令
Ctrl+d 输入结束(EOF),例如写邮件结束的时候
Ctrl+u 在提示符下,删除光标前面所有的字符
Ctrl+h 在命令提示符下,删除光标前面的单个字符
Ctrl+k 在命令提示符下,删除光标后面所有的字符

通配符
* 代表【0到无穷多个】任意字符
?代表一个任意字符
[ ] 代表一定有一个括号内的字符(非任意字符;一定是括号内有的)
[ - ] 代表【在编码顺序内有的所有字符】如:[a-z]
[^ ] 非括号内的

特殊符

# 批注符号
\ 转移符号,可以将具有特殊意义的符号变为一般字符
| 管道符,把前一个命令的结果传递给后一个命令,可以多个,以此类推
; 连续下达命令的分隔符
$ 取用变量值的前缀符号
& 将一个工作置于后台
! 逻辑运算意义上的非
/ 路径分隔符
,>> 输出重定向,>覆盖, >>追加
<,<< 输入重定向
'' 单引号,单引号内的字符均视为一般字符
"" 双引号,其内的字符具有特殊意义,具有变量置换功能
`` 其内的命令可以先执行,建议用$( )取代
() 在中间为子shell的起始与结束
{} 在中间为命令区块的组合

cut 补充

-d 分割的分隔标志
-f 第几列

文件描述符

系统默认 的描述符 文件
0 默认是键盘,也可以是文件 输入文件----标准输入
1 默认是屏幕,也可以是文件或者其他命令的输出 输出文件---标准输出
2 默认是屏幕,也可以的hi文件 错误输出文件----标准戳我输出
3- $(limit -n) 是可以自定义的描述符也可以&3来表示一个文件描述符

你可能感兴趣的:(shell 编程(1)bash)