bash基本特性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash基本特性相关的知识,希望对你有一定的参考价值。
bash基本特性
bash是Linux中最常使用到的shell,它给用户提供了许多便利的功能和特性,下面就介绍一些bash的基本特性。
1、命令历史history
bash能为我们提供命令的存储功能,我们也可以借由history命令来查看我们以往输入过的命令有哪些。
[[email protected] ~]# history
1 ss -lnt
2 ifconfig
…省略…
767 history
【语法格式】:
history [option]…
【参数选项】:
参数 | 说明 |
-c | clear 清除历史记录 |
-d num | 删除某一条历史记录 |
-a | 将现在的历史命令追加到历史文件中尾端 |
-w | 将现在的历史命令写入到历史文件中 |
bash会把历史命令保存在用户的家目录的.bash_history文件中即 ~/.bash_history,bash默认用户在退出本次shell时自动将登陆后输入过的命令追加至文件中,在用户还未退出本次shell时,我们的历史命令记录在缓存中
HISTSIZE:缓存中能记录的历史命令条数,默认为1000条
HISTFILESIZE:历史文件中能保存的历史命令条数,默认为1000条
HISTFILE:历史文件路径,默认为~/.bash_history
[[email protected] ~]# echo $HISTSIZE
1000
[[email protected] ~]# echo $HISTFILESIZE
1000
[[email protected] ~]# echo $HISTFILE
/root/.bash_history
调用历史命令:
!!:再一次执行上一条命令
!#:再一次执行第#条命令
!string:再一次执行以string开头的命令
2、命令和路径补全
bash很便捷的为用户提供了,命令以及文件路径补全的功能。即当用户输入命令和路径的过程中可以使用【Tab】键来自动补全命令和路径。
当我们输入部分字符串后如果系统能锁定目标,则按一次【Tab】键就可以补全,
若系统不能锁定,则我们可以按两次【Tab】键,使系统给出命令或文件列表。
3、命令行展开
把命令行的给定的特殊符号自动替换为相应字符串的机制
~: 自动替换为用户家目录;
~USERNAME:自动替换为指定用户的家目录;
{}:可承载一个以逗号分隔的路径列表,能够将其展开为多个独立路径;
例:使用一条命令窗创建/tmp/x/y1,/tmp/x/y2,/tmp/x/y1/a,/tmp/x/y1/b这些目录
[[email protected] tmp]# mkdir -pv /tmp/x/{y1/{a,b},y2}
mkdir: created directory ‘/tmp/x’
mkdir: created directory ‘/tmp/x/y1’
mkdir: created directory‘/tmp/x/y1/a’
mkdir: created directory ‘/tmp/x/y1/b’
mkdir: created directory ‘/tmp/x/y2’
[[email protected] tmp]# tree /tmp/x
/tmp/x
├── y1
│ ├── a
│ └── b
└── y2
4 directories, 0 files
4、命令执行结果返回值
我们在bash中执行的命令都会有一个返回值来决定命令是否正确执行,这个状态码的结果保存在环境变量?中
?=0,则命令执行成功
?=1-255,则命令执行失败
[[email protected] tmp]# echo "hello"
hello
[[email protected] tmp]# echo $? 当上一条命令正确执行时,返回码为0
0
[[email protected] tmp]# ehco "hello" 这里输错命令
bash: ehco: command not found...
[[email protected] tmp]# echo $?当上一条命令错误时,返回码为非0
127
5、命令别名
在bash中我们可以为已有命令或命令和选项的组合、命令和命令的组合进行别名的定义,这样更加方便用户的操作,也可以保护系统的安全,我们使用alias命令进行别名定义
alias
【功能说明】:
设置别名
【语法格式】:
alias[-p] [name[=value] ... ]
【参数选项】:
参数 | 说明 |
-p | 打印所有别名的定义 |
【实践操作】:
-p参数使用
[[email protected]]# alias -p 其实没-p 效果一样
alias cp=‘cp -i‘ 别名的设置格式
aliasl.=‘ls -d .* --color=auto‘
aliasll=‘ls -l --color=auto‘
aliasls=‘ls --color=auto‘
aliasmv=‘mv -i‘
aliasrm=‘rm -i‘
aliaswhich=‘alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde‘
使用alias使复杂的东西变简单
[[email protected]]# alias print=‘echohello world‘
[[email protected]]# print
helloworld
防止使用rm危险命令
[[email protected]]# alias rm=‘echo"rm can not be used,pls use mv"‘
[[email protected]]# rm test.txt
rmcan not be used,pls use mv test.txt
注意:在命令行中定义的别名,仅对当前shell进程有效;如果想永久有效,要定义在配置文件中;
仅对当前用户:~/.bashrc
对所有用户有效:/etc/bashrc
6、快捷键
bash命令行中提供给用户一些便于操作的快捷键,下面列出部分常用的快捷键
ctrl + a:跳至命令行行首
ctrl + e:跳至命令行行尾
ctrl + u:删除光标所在位置到命令行行首的数据
ctrl + k:删除光标所在位置到命令行行尾的数据
ctrl + l:清空屏幕上的数据
7、通配符
bash使用某些特殊的符号进行对文件名的通用匹配被称为通配符
? | 匹配任意单个字符 |
* | 匹配任意长度的任意字符 |
[ ] | 匹配[ ]中指定范围内的任意字符 |
[^ ] | 匹配[^ ]中范围外的任意字符 |
专用字符集合:
[:digit:]:任意数字,相当于0-9
[:lower:]:任意小写字母
[:upper:]:任意大写字母
[:alpha:]:任意大小写字母
[:alnum:]:任意数字或字母
[:space:]:空白符
[:punct:]:标点符号
例:
显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数字的文件或目录;
# ls -d /var/l*[0-9]*[[:lower:]]
显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;
# ls -d /etc/[0-9]*[^0-9]
显示/etc/目录下,以非字母开头,后面跟了一个字母及其它任意长度任意字符的文件或目录;
# ls /etc/[^[:alpha:]][[:alpha:]]*
复制/etc目录下,所有以m开头,以非数字结尾的文件或目录至/tmp/mageedu目录中;
# cp -a /etc/m*[^0-9] /tmp/mageedu
8、重定向
重定向就是对数据流向的位置引导,重定向分为输入和输出重定向
标准输入重定向:<或<<,代码为0
标准输出重定向:>或>>,代码为1
错误输出重定向:2>或2>>,代码为2
输入重定向:
<:标准输入重定向,command</path/to/file,这里是由文件提供数据给命令
<<:此处创建文件,cat<<eof 文件内容 eof 这里eof是文件内容输入的提示及边界符号
输出重定向:
>:标准输出重定向,覆盖原有内容
[[email protected] tmp]# echo "hello world">text
[[email protected] tmp]# cat text
hello worldtext
>>:追加输出重定向,在文件后追加内容
[[email protected] tmp]# echo "hello linux">>text
[[email protected] tmp]# cat text
hello world
hello linux
2>:错误输出重定向,当命令执行错误时,将错误信息输出到指定位置,并对指定文件覆盖
2>>:追加错误重定向,同上,但在文件尾部追加而不是覆盖
[[email protected] tmp]# ehco "hello error"2>text
[[email protected] tmp]# cat text
bash: ehco: command not found...
Similar command is: ‘echo‘
&>:合并正确及错误输出流,并覆盖
&>>:合并正确及错误输出流,并追加
[[email protected] tmp]# echo "hello world again"&>text 正确输出
[[email protected] tmp]# ehoc "error again"&>>text 错误输出
[[email protected] tmp]# cat text
hello world again
bash: ehoc: command not found... 错误信息被追加到文末
合并正确与错误输出流也可以用下面的表示方法
command >/path/to/file 2>&1 覆盖
command >>/path/to/file2>&1 追加
9、管道
管道符号 “ | ”可以连接两个或多个命令,实现将前面一个命令的标准输出作为后面一个命令的标准输入
command1 | command2 | command3…
10、hash命令
hash命令可以缓存使用过的命令所在路径
当用户在输入命令时,bash会在PATH环境变量下路径进行搜索,搜索到命令路径后方可使用命令,当用户使用过一次命令后,bash会把命令路径缓存下来,这样在下次使用时,就可以不要在去搜索PATH环境变量了,这样更便捷。
[[email protected] tmp]# hash
hits command
2 /usr/bin/grep 这里的数值是命令的使用次数
5 /usr/bin/cat
1 /usr/bin/mkdir
7 /usr/bin/ls
1 /usr/bin/tree
2 /usr/bin/vimtutor
以上是关于bash基本特性的主要内容,如果未能解决你的问题,请参考以下文章