Bash特性

Posted xmtxh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bash特性相关的知识,希望对你有一定的参考价值。

Bash
Linux系统终端概述
图形化
       服务器终端切换:Ctrl + Alt + F1 _ F6
       虚拟机终端切换:Ctrl + Shift +Alt + F1 _ F6

字符终端
       服务器终端切换:Alt + F1 _ F6
       pkill -9 -t tty2
             -t:终端名称
            -9:强制

2.Linux系统和Bash管理
Linux提供的用户界面
       字符界面
              shell
                     bash(默认)
[root@oldboy ~]# echo $SHELL #查看当前系统使用的shell版本(默认是bash)
/bin/bash

[root@oldboy ~]# cat /etc/shells #查看Linux当前系统支持的shell版本有哪些
sh -->bash的软(符号)链接
bash
nologin

/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

图形化界面
       gnome
       kde

date
查看时间
一般使用+格式的方式来显示我们所需要的时间格式
[root@oldboy ~]# date +%F_%R
2019-10-15_14:37
[root@oldboy ~]# date +%F-%R
2019-10-15-14:38
[root@oldboy ~]# date +"%F %R"
2019-10-15 14:39

touch log_`date +%F_%R`.bak
touch log_$(date +%F_%R).bak

whoami 查看当前位置

Bash特性:命令补全
通过上下方向键来调取过往执行过的Linux命令;
命令或参数仅需输入前几位的可以用Tab键补全

Bash特性:命令快捷键
终端快捷键的使用可以帮助我们大大提升效率

Ctrl + a #光标跳转至正在输入的命令行的首部 home
Ctrl + e #光标跳转至正在输入的命令行的尾部 end
Ctrl + c #终止前台运行的程序
Ctrl + d #在shell中,ctrl-d表示推出当前shell。
Ctrl + z #将任务暂停,挂至后台
Ctrl + l #清屏,和clear命令等效。
Ctrl + k #删除从光标到行末的所有字符
Ctrl + u #删除从光标到行首的所有字符
Ctrl + r #搜索历史命令, 利用关键字

//在命令行前加“#”,则该命令不会被执行

History查看系统命令历史,追溯之前发生情况

[root@oldboy ~]# echo $HISTSIZE
1000
[root@oldboy ~]# HISTSIZE=200
[root@oldboy ~]# echo $HISTSIZE
200

命令选项:
       -w 保存命令历史到历史文件
       -c 清空命令历史记录,不会情况文件
       -d 删除命令历史的第N条行
            !可以调用之前的命令
                  !num
                            调用第num行的命令历史
                   !!
                            执行上一条命令
                   !cmd
                            调用离当前最近以该cmd开头的命令
                   !$/按住ESC,松开按.
                            执行上条命令的参数

命令别名
alias
       alias cmd=‘cmd ‘
       unalias cmd
注意:
       1.使用alias命令就可以查看当前生效的别名有哪些
       2.使用unalias 接别名名称 取消
       3.alias只对当前环境临时生效
       4.如需永久生效,需将定义别名的命令写入登录配置问价
              ~/.bash_profile 只对当前用户生效,局部配置文件
              ~/.bashrc 只对当前用户生效,局部配置文件
              /etc/profile 对所有用户生效,全局配置文件
              /etc/bashrc 对所有用户生效,全局配置文件

[root@oldboy ~]# alias ifconfig=‘ifconfig ens33‘


命令流程
当我们执行一个命令,整个命令执行流程如下 :
1.判断命令是否通过绝对路径执行
2.判断命令是否存在别名
3.判断用户输入的是内部命令还是外部命令
      内部命令:shell程序自带的命令
      外部命令:在系统PATH变量的某个路径下的可执行程序
      使用type命令检测用户输入的命令属于内部命令还是外部命令
4.内部命令直接执行,外部命令检测是否存在缓存
5.检测PATH路径,有执行,无报错

//表缓存命令所在位置
[root@oldboy ~]# hash
命中 命令
3 /usr/bin/locate
1 /usr/bin/ls
1 /usr/bin/find

//已缓存命令,如果移动位置会导致无法找到该命令
[root@oldboy ~]# mv /usr/bin/find /tmp/
[root@oldboy ~]# find
-bash: /usr/bin/find: 没有那个文件或目录

//删除缓存过的find命令,即可执行
[root@oldboy ~]# hash -d find
[root@oldboy ~]# find

//当然可以清空缓存表
[root@oldboy ~]# hash -r

//命令缓存hash需要注意如下情况
1.如果执行外部命令1次就会对该命令进行缓存
2.如果将命令移动了位置
a.使用绝对路径执行
b.删除hash表的缓存指令

总结,当我们执行了一个Ping命令之后,整个命令执行的流程步骤如下:

1.检查执行的是否是绝对路劲
2.检查该ping命令是否存在别名
3.检查该ping命令是内部命令还是外部命令
4.如果是内部命令直接执行,如果是外部命令
5.检测该命令是否有缓存,如果没有,查找PATH变量
6.检查PATH路径知道查到该命令然后执行
7.如果没有找到该命令则返回错误。command not found

路径展开
思考:在/tmp路径下创建以下目录
etc/init.date
etc/sysconfig
usr/lib
usr/bin
usr/include
var/spool
var/run
proc
sys
bin

mkdir -pv /tmp/{etc/{init.d,sysconfig},usr/{bin,lib,include},var/{spool,run},proc,sys,bin}

[root@oldboy ~]# tree /tmp/
/tmp/
├── bin
├── etc
│   ├── init.d
│   └── sysconfig
├── proc
├── sys
├── usr
│   ├── bin
│   ├── include
│   └── lib
└── var
├── run
└── spool

转义符
反斜杠():使反斜杠后面的一个变量变为字符串
单引号(‘‘):转义其中所有的变量为单纯字符串
双引号(""):保留其中的变量属性,不进行转义处理
反引号(``): 把其中的命令执行返回结果

//将特殊字符转换为正常字符
[root@oldboy ~]# echo "shop is $500"
shop is 00
[root@oldboy ~]# echo "shop is $500"
shop is $500
//转义其中特殊字符为普通字符串
[root@oldboy ~]# echo ‘shop is $500‘
shop is $500

//使用$()实现命令替换
[root@oldboy ~]# echo "The dir is $(pwd)"
The dir is /root
//使用``实现命令替换
[root@oldboy ~]# echo "The dir is `pwd`"
The dir is /root

//转义其中所有的变量为单纯的字符串
[root@oldboy ~]# touch file-`date +%F-%H-%S`
[root@oldboy ~]# ls
anaconda-ks.cfg file-2019-10-17-22-54 log_2019-10-15_14:47.bak

[root@oldboy ~]# touch ‘file-`date +%F-%H-%S`‘
[root@oldboy ~]# ls
file-`date +%F-%H-%S`

[root@oldboy ~]# cat >>.bashrc <<EOF
> echo "server ip is `ifconfig| awk ‘NR==2{pring $2}‘`"
> EOF

 

以上是关于Bash特性的主要内容,如果未能解决你的问题,请参考以下文章

bash特性

Bash基础特性

bash基本特性

shell编程bash特性

bash特性

bash 基础特性命令引用