1.登录主机:

  • 本机登录(7个接口tty1~tty7)

    • 文本接口(tty1~tty6)

    • 图形接口(tty7)

  • 远程登录

2.通配符:   

  • *:代表任意的字符串,可以是空字符串

  • ?:代表一个字符,但是不可以为空

3.转义字符:\

4.续行符号:\

5.字符集合:

  1. [a-z]:英文小写字母

  2. [A-Z]:英文大写字母

  3. [a-zA-Z]:英文大小写字母

  4. [0-9]:数字

  5. [a-zA-Z0-9]:英数字

  6. [xyz]:x,y或是z

6.括号扩展:{}

    {g,nc,s}ftp即:gftp,ncftp,sftp

7.检查script的语法:bash -v test.sh

8.查看script的程序代码:bash -n test.sh

9.追踪script的执行:bash -x test.sh

10.父shell和子shell:

在执行shell script之前,我们身处在一个login shell中,称为父shell.当我们执行某一个shell script时,父shell会根据script程序的第一行#!之后所指定的shell程序开启(此操作称为fork)一个子shell中的script执行完毕,此子shell随即结束,仍然回到父shell中,不会影响父shell原本的环境.

子shell和父shell一样,会开启三个文件:标准输入(键盘),标准输出(屏幕),标准错误(屏幕),同时,子shell会继承父shell的若干变量值的内容,这些变量称为环境变量

11.子shell再开启子shell:

查看当前位于在几层shell中:

echo $SHLVL  OR   ps axf

12.系统默认开启的文件

标准输入:0

标准输出:1

标准错误:2

13.转向输入和转向输出合用

sort < unsort.txt > sorted.txt

14.登陆(login)

登陆主机时,login shell先执行/etc/profile,接着检查用户的主目录中,是否有.bash_profile或者是否有.profile。若有,则会读取并执行其中一个文件,执行顺序为:

.bash_profile最优先 --> .bash_login其次 --> .profile最后

15.注销(logout)

注销主机时,bash检查主目录中是否有.bash_logout。若有,则读取并执行它.

16.执行新shell

执行新shell(非login shell),可分为两种情况

  • 执行交互式的shell:例如直接执行bash.产生一个子shell.此时,bash会读取并执行/etc/bash.bashrc,以及主目录中的.bashrc

  • 执行shell script(即非交互式):例如,执行script文件test.sh,它会检查BASH_ENV变量的内容,若该变量有定义,则执行该变量所定义的启动文件的内容.

假设BASH_ENV的内容指向bash_env.sh如下所示:

export BASH_ENV="/root/tmp/bash_env.sh"

17.printf:依照格式显示参数内容

wKioL1TO2p_xVzLPAAFVl6QwhJY217.jpg

一个格式的字符对应到一个参数的输出.如果想输出变量值,最好用双引号包括住.假设变量str="Hello world"

用法:

[root@rabbitmq-node1 ~]# str="Hello World"
[root@rabbitmq-node1 ~]# printf "%-5s\n" "$str"
Hello World
[root@rabbitmq-node1 ~]# printf "%20s\n" "$str"
         Hello World

wKiom1TO4Q3DitsBAAERO5n1c6Y253.jpg

18.关于history的三个参数

wKioL1TO49qQVzu4AANlwpiZeSU912.jpg

19.列出登陆主机后,最近执行过的命令

[root@rabbitmq-node1 ~]# fc -l
78     /etc/init.d/rabbitmq-server restart
79     /etc/init.d/rabbitmq-server status
80     init 3
81     str="Hello World"
82     printf "%-5s" "$str"
83     printf "%-5s\n" "$str"
84     printf "%5s\n" "$str"
85     printf "%20s\n" "$str"
86     str2="China"
87     printf "%-5s\n,%10s\n" "$str,$str2"
88     printf "%-5s\n,%10s" "$str,$str2"
89     printf "%-5s\n,%20s" "$str,$str2"
90     printf "%-5s\n%20s" "$str$str2"
91     echo $HISTFILESIZE
92     echo $HISTSIZE
93     echo $HISTFILE

20.time在script或指令执行结束后,显示real,user,cpu3种耗用时间的统计

[root@rabbitmq-node1 ~]# time yes | cp -rvf test/* /opt/test2/
cp: overwrite `/opt/test2/123.txt'? `test/123.txt' -> `/opt/test2/123.txt'
cp: overwrite `/opt/test2/1.oxo'? `test/1.oxo' -> `/opt/test2/1.oxo'
cp: overwrite `/opt/test2/2.oxo'? `test/2.oxo' -> `/opt/test2/2.oxo'
cp: overwrite `/opt/test2/3.oxo'? `test/3.oxo' -> `/opt/test2/3.oxo'
cp: overwrite `/opt/test2/4.oxo'? `test/4.oxo' -> `/opt/test2/4.oxo'
cp: overwrite `/opt/test2/5.oxo'? `test/5.oxo' -> `/opt/test2/5.oxo'

real    0m0.008s
user    0m0.000s
sys    0m0.008s

21.read

#!/bin/bash
read -p "Please Input Your name:"
echo "you name is $REPLY"

#读入数组:
read -a arr << (echo 123 45 6 7)
#输出数组的第三个元素
echo ${arr[2]}

#如果数据行的各字段之间使用:分隔,如/etc/passwd,可用下列方法,分别读取各字段值
IFS=":"
read f1 f2 f3 f4 f5 f6 f7 < /etc/passwd
echo $f1

#read在读取数据时,默认会去掉转义字符的意义(即滤掉\),例如,\n会剩下n,但若要允许输入时能保留\,可用-r选项
[root@rabbitmq-node1 ~]# read -r test
\n\t\s
[root@rabbitmq-node1 ~]# echo $test
\n\t\s
[root@rabbitmq-node1 ~]# read test
\n\t\s
[root@rabbitmq-node1 ~]# echo $test
nts

22.eval:读取参数,结合成一个新的命令,进行变量替换后,予以执行

[root@rabbitmq-node1 ~]# test="ls -l /opt/test2/*"
[root@rabbitmq-node1 ~]# eval $test
-rw-r--r--. 1 root root 16 Feb  1 21:40 /opt/test2/123.txt
-rw-r--r--. 1 root root  0 Feb  1 21:40 /opt/test2/1.oxo
-rw-r--r--. 1 root root  0 Feb  1 21:40 /opt/test2/2.oxo
-rw-r--r--. 1 root root  0 Feb  1 21:40 /opt/test2/3.oxo
-rw-r--r--. 1 root root  0 Feb  1 21:40 /opt/test2/4.oxo
-rw-r--r--. 1 root root  0 Feb  1 21:40 /opt/test2/5.oxo
[root@rabbitmq-node1 ~]# HIS="fc -l"
[root@rabbitmq-node1 ~]# eval "$HIS >> $USER.txt"

23.exec:执行指定的程序/命令,执行完毕后退出当前shell

exec ls -l

24.ln -f f1 f2 如果软链接f2已经存在则删除链接后,再重新链接

[root@rabbitmq-node1 ~]# ln -sv /root/test /tmp/link_file
`/tmp/link_file' -> `/root/test'
[root@rabbitmq-node1 ~]# ls -l /tmp/link_file
lrwxrwxrwx. 1 root root 10 Feb  1 22:29 /tmp/link_file -> /root/test
[root@rabbitmq-node1 ~]# ln -svf /tmp/link_file
`./link_file' -> `/tmp/link_file'

25.basename:取得路径名称中最后的文件名部分

[root@rabbitmq-node1 link_file]# basename /tmp/link_file/123.txt 
123.txt

26.sort -r(降序) -n(以数值大小为标准) -t(定义分隔符) -k(定义字段)

[root@rabbitmq-node1 link_file]# sort -nr -t: -k3 /etc/passwd

27.cut -d(分隔符) -f3,4(截取第三行,第四行)

[root@rabbitmq-node1 link_file]# cut -d: -f3,4 /etc/passwd
0:0
1:1
2:2
3:4

28.dirname:取得文件的路径名

[root@rabbitmq-node1 link_file]# dirname /opt/test2/123.txt 
/opt/test2

29.tr转换字符或删除字符

[root@rabbitmq-node1 link_file]# cat 123.txt 
this is a test!
[root@rabbitmq-node1 link_file]# tr i I < 123.txt 
thIs Is a test!