shell编程基础

shell(外壳)与内核(Kernel)相对,一内一外构成完整的系统...............

Redhat/CentOS系统默认安装的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,简称sh。

1.历史命令记录

我们知道敲过的命令,linux是会有记录的,history预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中(只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中)

!就是一个与历史有关的非常有意思的字符

   1. !! 连续两个 ‘!’, 表示执行上一条指令;

1 [root@izgt88z6l1kvd7z ~]# echo $?
2 0
3 [root@izgt88z6l1kvd7z ~]# !!
4 echo $?
5 0
6 [root@izgt88z6l1kvd7z ~]# 

  2. !n 这里的n是数字,表示执行命令历史中第n条指令。例如 !52 表示执行命令历史中第52条命令;

1 [root@izgt88z6l1kvd7z ~]# history |grep 25
2    25  ls
3   110  history |grep 25
4 [root@izgt88z6l1kvd7z ~]# !25
5 ls
6 administration  docker  install.sh  t1.txt  test  web

 3.!字符 字符大于等于1,例如!mk表示执行最近一次以mk开头的命令(报错是因为目录已经存在)

1 [root@izgt88z6l1kvd7z ~]# !mk
2 mkdir administration
3 mkdir: cannot create directory ‘administration’: File exists

2.别名

我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令。如果不想用了,还可以用unalias解除别名功能。直接敲alias会看到目前系统预设的alias

1 [root@izgt88z6l1kvd7z ~]# alias ?='echo $?'
2 [root@izgt88z6l1kvd7z ~]# ?
3 0
4 [root@izgt88z6l1kvd7z ~]# unalias ?
5 [root@izgt88z6l1kvd7z ~]# ?
6 -bash: ?: command not found

3.通配符

*匹配0或多个字符,?匹配一个字符。

1 [root@izgt88z6l1kvd7z ~]# ls tes*
2 test:
3 t1.txt
4 
5 test1,test2,tesa,tesb:
6 [root@izgt88z6l1kvd7z ~]# ls tes?
7 t1.txt

4.输入,输出重定向及管道符

>输出重定向  ,错误重定向2>  >>追加重定向 <输入重定向  |管道符

5.进程控制快捷键

ctrl+z暂停进程

例如:我们打开了tcpdump来抓包,然后ctrl+z暂停

 1 [root@izgt88z6l1kvd7z ~]# tcpdump
 2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 3 listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
 4 23:58:23.268094 IP izgt88z6l1kvd7z.ssh > 116.209.213.92.62076: Flags [P.], seq 3428140470:3428140658, ack 434735173, win 251, length 188
 5 23:58:23.268372 IP izgt88z6l1kvd7z.36751 > 100.100.2.136.domain: 5794+ PTR? 92.213.209.116.in-addr.arpa. (45)
 6 23:58:23.296464 IP 100.100.2.136.domain > izgt88z6l1kvd7z.36751: 5794 NXDomain 0/1/0 (103)
 7 23:58:23.297201 IP izgt88z6l1kvd7z.50902 > 100.100.2.138.domain: 53930+ PTR? 185.96.26.172.in-addr.arpa. (44)
 8 23:58:23.297435 IP 100.100.2.138.domain > izgt88z6l1kvd7z.50902: 53930 NXDomain* 0/1/0 (98)
 9 23:58:23.297563 IP izgt88z6l1kvd7z.46290 > 100.100.2.136.domain: 56500+ PTR? 136.2.100.100.in-addr.arpa. (44)
10 23:58:23.297620 IP izgt88z6l1kvd7z.ssh > 116.209.213.92.62076: Flags [P.], seq 188:360, ack 1, win 251, length 172
11 23:58:23.298287 IP 100.100.2.136.domain > izgt88z6l1kvd7z.46290: 56500 NXDomain* 0/1/0 (99)
12 23:58:23.298428 IP izgt88z6l1kvd7z.60977 > 100.100.2.138.domain: 65211+ PTR? 138.2.100.100.in-addr.arpa. (44)
13 23:58:23.298458 IP izgt88z6l1kvd7z.ssh > 116.209.213.92.62076: Flags [P.], seq 360:604, ack 1, win 251, length 244
14 23:58:23.298713 IP 100.100.2.138.domain > izgt88z6l1kvd7z.60977: 65211 NXDomain* 0/1/0 (99)
15 23:58:23.298844 IP izgt88z6l1kvd7z.ssh > 116.209.213.92.62076: Flags [P.], seq 604:1488, ack 1, win 251, length 884
16 23:58:23.420263 IP izgt88z6l1kvd7z.ssh > 116.209.213.92.62076: Flags [P.], seq 1488:1644, ack 1, win 251, length 156
17 ^Z
18 [1]+  Stopped                 tcpdump

第十八行我们可以看到已经停了,我们可以用jobs查看停掉的任务,fg在前台跑,bg在后台跑

ctrl+c关闭进程......不用赘述

原文地址:https://www.cnblogs.com/hxlinux/p/12840088.html