zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Linux bash(bash shell) 特性

Linuxshell 特性 Bash
2023-09-11 14:16:58 时间

[root@localhost ~]#  echo $SHELL

/bin/bash

一,补全

1.命令补全

shell程序在接受到用户执行命令的请求,分析完成之后,最左侧的字符串会被当做命令;查找内部命令;根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;

在给定的一个打头的字符串,如果这个字符串能够唯一的标识程序文件,直接补全;如果不能唯一标定,需要再次敲击Tab键,会给出列表

2.路径补全(依赖根文件系统)

在给定的起始路径下,以对应路径下的打头字符串来逐一匹配起始路径下的每个文件;

Tab:

如果能唯一标识,则直接补全; 否则,再一次敲击Tab,给出列表

二,快捷键

Ctrl+l 清屏(并不是删除页面的内容)

Ctrl+c 终止 / 终止前台运行的程序(ping 192.168.0.152)

Ctrl+d 退出 等价exit

Ctrl+a 光标移动到命令行的最前端

Ctrl+e 光标移动到命令行的最后端

Ctrl+u 删除光标前所有字符

Ctrl+k 删除光标后所有字符

Ctrl+r 搜索历史命令,利用关键词

三,命令历史   history

变量      (查看变量方法:echo $变量名)

1.HISTSIZE  当前shell进程可以保存命令历史的条数

2.HISTFILE  保存命令历史的文件

3.HISTFILESIZE  命令历史文件的大小

history  -c 清空命令历史列表

             -d offset(指的就是序号):指定删除命令历史

             -r(读)  从命令历史文件中读取命令历史命令历史列表

             -w(写) 从列表到文件

命令历史列表:shell进程中保留的历史命令

命令历史文件:.bash_history   非实时

!!:再一次执行上一条命令

!#:执行命令历史列表中的第#命令

! string:再一次执行命令历史列表中最近一个以string打头的命令(string为字符串)

!$:调用上一个命令的最后一个参数(或Esc + .   Esc键加点号)

HISTCONTROL

         ignoredups  忽略重复命令

         ignorespace  忽略以空白开头的命令(以空白开头的命令不会记录在命令历史中)

         ignoreboth  以上两者都生效

修改变量的方法:只在当前shell环境中有效

        NAM='VALUE'     HISTCONTROL='ignorespace'

四,命令别名

1. 命令别名:

 alias  查看命令别名

2.定义别名 alias NAME='commond' (NAME不能是系统中的命令)

alias Net='vi /etc/sysconfig/network-scripts/ifcfg-eth0'

3.撤销别名 

unalias NAME

4.永久生效别名  vi /etc/bashrc  中添加一行  alias NAME='commond'

添加之后如果想生效,需重载  source /etc/bashrc 

5.如果想跳过别名,执行原有命令  \command(反斜杠+命令)

五,特殊符号

|  管道符  把上一个命令的执行结果(输出)当做下一个命令的输入

tee  可以把执行中的信息保留下来

.  在Linux中代表当前目录

..  在Linux系统中代表上一级目录

;  在Linux中执行多条命令时,可以用分号隔开,每个命令之间互不干扰,所有命令都会执行

``  反单引号  命令替换,反单引号引起的内容当做命令执行

''  单引号  强引用,所见即所得

[root@localhost ~]#  echo '$SHELL'     结果为 $SHELL

" " 双引号 弱引用,可以实现命令替换

[root@localhost ~]#  echo "$SHELL"    结果为 /bin/bash

{ }  做扩展使用

*  通配作用

[root@localhost ~]# ls a* (a开头的所有的文件)

六,重定向

Linux提供的三种IO设备

STDIN标准输入0(文件描述符)默认来自于键盘
STDOUT标准输出1默认到终端窗口
STDERR标准错误2默认到终端窗口

正确输出重定向 

[root@localhost dev]# cd /tmp/

[root@localhost tmp]# date 1> date.file

[root@localhost tmp]# ls
date.file         vmware-root_6136-969586290  yum.log
ks-script-s_Trsx  vmware-root_6138-961263600

[root@localhost tmp]# cat date.file
Tue Jan 18 22:47:52 CST 2022

1> 覆盖 

1>> 追加

[root@localhost tmp]# ls /home/
[root@localhost tmp]# ls /aaa
ls: cannot access /aaa: No such file or directory
[root@localhost tmp]# ls /home/ /aaa
ls: cannot access /aaa: No such file or directory
/home/:
[root@localhost tmp]# ls /home/ /aaa 1> stdout
ls: cannot access /aaa: No such file or directory
[root@localhost tmp]# cat stdout
/home/:
[root@localhost tmp]# ls /home/ /aaa 1>> stdout
ls: cannot access /aaa: No such file or directory
[root@localhost tmp]# cat stdout
/home/:
/home/:

错误输出重定向 

2> 覆盖

[root@localhost tmp]# ls /home/ /aaa 2> stderr
/home/:
[root@localhost tmp]# cat stderr
ls: cannot access /aaa: No such file or directory

2>> 追加

混合输出

&>

[root@localhost tmp]# ls /home/ /aaa &> std
[root@localhost tmp]# cat std
ls: cannot access /aaa: No such file or directory
/home/:

2>&1

首先,先把错误的重定向到正确的,然后从正确的一同输入到文件

设备文件

/dev/null  数据黑洞    不想要的数据都可以给他

[root@localhost tmp]# ls /home/ /aaa &> /dev/null(相当于出来的数据都直接丢弃了)

/dev/zero  吐零机    可以提供无穷无尽的0

七,命令行的通配符

*    匹配任意长度的任意字符

?    匹配任意单个字符

[]  匹配指定范围内的任意单个字符

[^] 匹配指定范围外的任意单个字符

[0-9] 所有数字

[a-z] aAbB......z   

[A-Z] AbB......zZ

[[:lower:]]  小写字母

[[:upper:]]   大写字母

[[:digit:]]   数字

[[:alpha:]]   所有字母

[[:punct:]]   标点符号

[[:alnum:]]   数字+字母

[[:space:]]   空白字符

[^[:lower:]]  除小写字母

[root@localhost tmp]# touch af
[root@localhost tmp]# touch a1
[root@localhost tmp]# touch a234
[root@localhost tmp]# ls a*
a1  a234  af
[root@localhost tmp]# ls a?
a1  af

eg:

 1、以一个小写字母开头,中间出现任意一个单个字符以一个大写字母结尾
 2、以任意一位数字开头,以非数字结尾
 3、以字母nmpl任意一位开头,后面跟一个数字,以及其他任意长度的任意字符

 1、[[:lower:]]?[[:upper:]]      2、[0-9] *[^0-9]       3、[nmpl] [0-9]* 或 [nmpl] [[:digit:]]*