命令和文件自动补齐

[root@hadoop04 ~]# yum -y install bash-completion

命令历史记忆功能

1.上下键
查看历史命令 2.!number
执行history中第number个记录 3.!string
执行history最近的一个以某个字符串开头的命令 4.!$
上一条命令的最后一个参数 5.!!
上一条命令(完整的一条命令) 6.^R
搜索历史命令

别名功能

1.alias

查看当前shell中的别名

2.unalias 

取消当前shell中的别名

(1)在命令前面加上\可以跳过别名,比如 alias cp='cp -i',\cp 就是执行真正的'cp',而不会执行别名'cp -i'

(2)定义永久生效的别名,需要在用户家目录下的.bashrc文件中( ~username/.bashrc)

快捷键

Ctrl + 具体某个字母键

1.^R
搜索历史命令
2.^D
相当于 exit/logout,退出Shell
3.^A
光标移到到首部
4.^E
光标移到到尾部
5.^L
相当于clear,清屏
6.^U
剪切光标之前的所有
7.^K
剪切光标以及光标之后的所有
8.^Y
在光标处粘贴(由^U、^K剪切的命令可以通过这个方式粘贴)
9.^S
锁屏
10.^Q
解锁

前后台作业控制

1.&
后台运行,但是终端退出就结束了 2.nohup
后台运行,即使终端退出依旧不会结束 3.^C
结束前台进程 4.^Z
将前台进程切换到后台,并且暂停运行
[root@hadoop04 ~]# sleep 800
^Z
[1]+ Stopped sleep 800 5.bg %1
将一个在后台暂停的命令,变成继续执行
[root@hadoop04 ~]# fg %1
sleep 800
^Z
[1]+ Stopped sleep 800
[root@hadoop04 ~]# bg %1
[1]+ sleep 800 & 6.fg %1
将后台运行的编号为1的job切换到前台继续运行 7.kill %3
向当前终端中job号为3的进程发送信号
如果是 kill 3,意味着向当前终端中pid为3的进程发送信号 8.screen(推荐)
# 创建会话,名称为test_screen,如果不命名的话,就直接使用screen;之后在screen会话中操作
[root@hadoop04 ~]# screen -S test_screen # 查看当前有哪些screen会话
[root@hadoop04 ~]# screen -list
There are screens on:
4585.test_Screen2 (Attached)
4553.test_screen (Detached)
2 Sockets in /var/run/screen/S-root. # 进入到某一个screen会话
[root@hadoop04 ~]# screen -r 4553 # 在具体screen会话中结束screen会话
[root@hadoop04 ~]# exit
exit
[screen is terminating]

输入输出重定向

1. 0 标准输入(键盘)
2. 1 标注输出(屏幕)
3. 2 错误输出 (屏幕)
4. > 输出重定向(覆盖)
5. >> 输出重定向(追加)
6. 2> 错误输出重定向
7. 2>>错误输出重定向
8. 2>&1 错误输出重定向到标准输出
9. &> 混合输出
10. cat < /etc/hosts 将/etc/hosts输入给cat,标准输出到屏幕
11. cat < /etc/hosts > /etc/hosts1 将/etc/hosts输入给cat,再重定向输出到/etc/hosts1,相当于cp命令
12. cat <<EOF
[root@hadoop04 ~]# cat <<-EOF
> 111
> 222
> 333
> EOF
111
222
333
13. cat >file1 <<EOF
标准输入(以EOF为结束),输出重定向到文件file1
[root@hadoop04 ~]# cat <<-EOF > test.txt
> 111
> 222
> 333
> EOF
[root@hadoop04 ~]# cat test.txt
111
222
333

管道 | tee

| 前一个命令的输出,作为后一个命令的输出

tee 从标准输入中复制到每一个文件,并输出到标准输出

ip addr |grep 'inet ' |grep eth0

# 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行
[root@hadoop04 ~]# ip addr |grep 'inet '
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0 # 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行,再次作为输入给后一个grep 去匹配
[root@hadoop04 ~]# ip addr |grep 'inet ' |grep eth0
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0

ip addr |grep 'inet ' |tee test.txt |grep eth0 (覆盖test.txt的内容)

ip addr |grep 'inet ' |tee -a test.txt |grep eth0 (-a 追加到test.txt)

# 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行
[root@hadoop04 ~]# ip addr |grep 'inet '
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0 # 将ip addr的输出作为grep的输入,grep 在输入中匹配出存在'inet '的行,再次作为输入传给tee,tee将内容保存到test.txt中,并且标准输出到屏幕
[root@hadoop04 ~]# ip addr |grep 'inet '| tee test.txt
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0 [root@hadoop04 ~]# cat test.txt
inet 127.0.0.1/8 scope host lo
inet 172.22.34.20/24 brd 172.22.34.255 scope global noprefixroute eth0
[root@hadoop04 ~]# date &> date.txt

[root@hadoop04 ~]# date| tee date.txt
Sat Dec 7 16:15:47 CST 2019
[root@hadoop04 ~]# cat date.txt
Sat Dec 7 16:15:47 CST 2019

命令排序

1.;
不具备逻辑判断 # 即使;前面的命令执行失败,;后面的命令依旧会执行,所以;不具备逻辑判断的功能
[root@hadoop04 ~]# cd /home/444444;ls
-bash: cd: /home/444444: No such file or directory
anaconda-ks.cfg date.txt test.txt 2. && ||
具备逻辑判断 # && 前面的命令执行失败,&& 后面的命令不会执行;反之,&& 前面的命令执行成功,&& 后面的命令才会执行
[root@hadoop04 ~]# cd /home/444444 && ls
-bash: cd: /home/444444: No such file or directory
[root@hadoop04 ~]# cd /home/sysadmin && ls
test.txt # || 前面的命令执行失败,|| 后面的命令才会执行;反之,|| 前面的命令执行成功,|| 后面的命令就不会执行 [root@hadoop04 ~]# cd /home/444444 || ls
-bash: cd: /home/444444: No such file or directory
anaconda-ks.cfg date.txt test.txt
[root@hadoop04 ~]# cd /home/sysadmin || ls
[root@hadoop04 sysadmin]#

注意

command & 后台执行
command &>/dev/null 混合重定向(标准输出 1,错误输出 2)
command1 && command2 命令排序,逻辑判断

shell 通配符

shell 通配符(元字符),表示的不是本意

* 星号

*匹配任意多个字符

ls in* 

rm -rf * 

rm -rf *.pdf

find / -iname "*-eth0"

? 问号

? 匹配任意一个字符

touch love loove live l7ve; 

ll l?ve

[] 中括号

[] 匹配括号中任意一个字符

[abc] [a-z] [0-9] [a-zA-Z0-9]

ll l[io]ve
ll l[^a-z]ve
ll /dev/sd[a-z]

() 小括号

() 在子 shell 中执行

(cd /boot;ls)
(umask 077; touch file1000)

在子shell(subshell)中执行命令

(命令)

在子shell中执行脚本

./xxxx/xxxx/xxxx.sh

bash /xxxx/xxxx/xxxx.sh

在当前shell中执行脚本

source /xxxx/xxxx/xxxx.sh

. /xxxx/xxxx/xxxx.sh(脚本与.之间有空格)

{} 大括号

{} 集合

touch file{1..9}
mkdir /home/{111,222}
mkdir -pv /home/{333/{aaa,bbb},444} # cp -rv /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.old # cp -rv /etc/sysconfig/network-scripts/{ifcfg-eth0,ifcfg-eth0.old} # cp -rv /etc/sysconfig/network-scripts/ifcfg-eth0{,.old}

在子shell(subshell)中执行命令

(命令)

在子shell中执行脚本

/xxxx/xxxx/xxxx.sh

bash /xxxx/xxxx/xxxx.sh

在当前shell中执行脚本

source /xxxx/xxxx/xxxx.sh

. /xxxx/xxxx/xxxx.sh

\转义符

\转义符,让元字符回归本意

# echo *
# echo \* # touch yang\ sheng [root@hadoop04 ~]# echo \\
\ [root@hadoop04 ~]# echo -e "atb"
atb
[root@hadoop04 ~]# echo -e "a\tb"
a b
[root@hadoop04 ~]# echo -e "anb"
anb
[root@hadoop04 ~]# echo -e "a\nb"
a
b

Shell入门01-bash Shell特性的更多相关文章

  1. Ubuntu下把缺省的dash shell修改为bash shell

    Ubuntu下缺省使用的是shell是dash,而不是bash.从/bin/sh软连接的指向可以看出这点. dash shell 虽然比bash shell更轻便,但是它并不支持所有的语法,运行she ...

  2. Shell入门01

    Shell入门 1.基于硬件的虚拟化 2.基于平台的虚拟化 3.基于服务的虚拟化 4.基于库的虚拟化 5.基于操作系统的虚拟化 管理员使用Shell程序与操作系统进行交互,之前学习的shell脚本都是 ...

  3. Shell - 简明Shell入门01 - 第一个脚本(HelloShell)

    示例脚本及注释 #!/bin/bash echo "hello shell!" # 打印字符串"hello shell!" echo "Date: & ...

  4. Shell入门教程:Shell变量

    变量 是一种很“弱”的变量,默认情况下,一个变量保存一个串,Shell不关心这个串是什么含义.所以若要进行数学运算,必须使用一些命令例如 let.declare.expr.双括号等. Shell变量可 ...

  5. Shell入门教程:Shell的基本结构

    shell程序的基本组成结构 shell结构大体是由设定变量.内置命令.shell的语法结构.函数组成. 使用实例说明:test.sh #!/bin/bash #说明使用/bin/bash作为这个脚本 ...

  6. Shell入门教程:Shell当中的特殊变量

    Shell当中的特殊变量 一.保留变量 $IFS 这个变量中保存了用于分割输入参数的分割字符,默认识空格. $HOME 这个变量中存储了当前用户的根目录路径. $PATH 这个变量中存储了当前 She ...

  7. Shell入门教程:Shell函数详解

    Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1.函数定义 ...

  8. Shell入门教程:Shell函数的返回值

    shell函数返回值一般有3种方式: 1.return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回. 比如: #!/bin/bash functio ...

  9. Shell - 简明Shell入门

    本文以示例和注释的方式,对Shell编程的基本知识点进行了总结和回顾,所有脚本均已做了基本的调试和验证. Shell - 简明Shell入门 01 - 第一个脚本 脚本的定义.执行方法以及echo命令 ...

  10. linux杂记(十一)Bash Shell的使用环境

    Bash Shell使用环境 Bash Shell使用环境 1.登录讯息显示数据:/etc/issue,/etc/motd 我们在终端机接口(tty1~tty6)登入的时候,会有几行提示的字符串,那个 ...

随机推荐

  1. [考试反思]1008csp-s模拟测试64:契机

    暴力没打满...有点垃圾... 考得稍绝望,啥也不会啊??? T3的测试点分治还写挂了... 其实就是没有沉下心好好的思考,在三道题上来回切换结果一个成型思路都没有 T2既然已经想到那一步了居然没有继 ...

  2. 正睿OI集训游记

    什么嘛....就是去被虐的... 反正就是难受就是了.各种神仙知识点,神仙题目,各式各样的仙人掌..... 但是还是学会了不少东西...... 应该是OI生涯最后一次集训了吧.... 这次的感言还是好 ...

  3. Intellij IDEA配置JDK、Maven和Tomcat

    一.配置JDK 1.File-->Project Structure 2.选择SDKs 3.点击+号添加自己本地jdk的安装目录,保存即可 二.配置Maven 1.File -> Othe ...

  4. beacon帧字段结构最全总结(一)——beacon基本结构

    一.beacon帧主要结构 二.MAC  header 1.Version:版本号,目前为止802.11只有一个版本,所以协议编号为0 2.Type:定义802.11帧类型,802.11帧分为管理帧( ...

  5. phpstorm设置内存限制的方法

    phpstorm设置内存限制的方法有时候用phpstorm写代码 1个文件代码多的话会很卡 那就要修改内存限制 E:\Program Files (x86)\JetBrains\PhpStorm 20 ...

  6. element 动态合并表格

    前言 element 官方的例子太简单了,不满足实际的需求 数据肯定是动态的,合并的行数,列数都是动态的,该如何知道每一行的合并数呢 需求 动态合并表格,数据来源于数据库 正文 一开始,我的数据源是单 ...

  7. 详细讲解 Redis 的两种安装部署方式

    Redis 是一款比较常用的 NoSQL 数据库,我们通常使用 Redis 来做缓存,这是一篇关于 Redis 安装的文章,所以不会涉及到 Redis 的高级特性和使用场景,Redis 能够兼容绝大部 ...

  8. PHP读取Excel内的图片

    今天接到了一个从Excel内读取图片的需求,在网上查找了一些资料,基本实现了自己的需求,不过由于查到的一些代码比较久远,不能直接移植到自己的项目里,需要稍加改动一下. 这里介绍一下分别使用phpspr ...

  9. python06-列表表达式、生成器表达式及其面试题、解耦简单介绍、函数递归相关

    目录: 一.列表推导式 二.生成器表达式 三.集合生成器 四.生成器面试题 五.解耦简单介绍 六.函数递归相关 一.列表推导式 需求:将[1,3,5]中的每个元素平方 正常思路: new_list = ...

  10. Idea集成SpringBoot实现两种热部署方式(亲测有效)

    即将介绍的两种热部署方式: 1.SpringLoaded 2.DevTools 区别: SpringLoader:SpringLoader 在部署项目时使用的是热部署的方式. DevTools:Dev ...