shell特性
1、history
[root@daixuan ~]# history                          查看shell的命令历史
[root@daixuan ~]# echo $HISTSIZE           查看历史记录的变量
1000
[root@daixuan ~]# !!                                  查看上一条命令
echo $HISTSIZE
1000
[root@daixuan ~]# ls 1234.txt
1234.txt
[root@daixuan ~]# cat !$                           !$代表上一条命令的最后一个参数
cat 1234.txt
jlkdjlkfjslkf[root@daixuan ~]# history         
1171  ls 1234.txt
1172  cat 1234.txt
1173  history
[root@daixuan ~]# !1172                       !+命令历史编号,执行1172条命令,
cat 1234.txt
jlkdjlkfjslkf[root@daixuan ~]#
[root@daixuan ~]# !c                              !c 执行命令历史中最近使用的以c开头的命令
cat 1234.txt
jlkdjlkfjslkf
双击tab键补全命令

2、别名alias
[root@daixuan ~]# alias aaa='cat 1234.txt'   只在当前shell中有效,需要加入配置文件中,其他shell才能生效
[root@daixuan ~]# alias
alias aaa='cat 1234.txt'
[root@daixuan ~]# aaa
jlkdjlkfjslkf
[root@daixuan ~]# unalias aaa                     取消aaa别名

3、通配符
* 匹配任何字符
[root@daixuan ~]# ls *.txt                           列出了当前目录下任何以txt结尾的文件
1234.txt  123.txt  12.txt  1.txt  test.txt
?匹配一个字符
[root@daixuan ~]# ls ?.txt                           一个问号?匹配一个字符
1.txt
[root@daixuan ~]# ls ???.txt                        三个问号?匹配三个字符
123.txt  456.txt

4、管道符 | 作用是把一条命令的结果丢给另一条命令
[root@daixuan ~]# cat /etc/passwd | wc -l        查看/etc/passwd文件内容,查看行数
32

5、重定向 
重定向 >  覆盖之前的内容
[root@daixuan ~]# cat 1.txt
test
[root@daixuan ~]# echo "12345678" > 1.txt
[root@daixuan ~]# cat 1.txt                             内容已经更改
12345678

追加重定向 >  不会覆盖之前的内容
[root@daixuan ~]# echo "9 10 11 12" >> 1.txt
[root@daixuan ~]# cat 1.txt                            内容已经添加,并且之前内容没有被覆盖
12345678
9 10 11 12

反向重定向 <,把文件的内容丢给一条命令
[root@daixuan ~]# wc -l < 1.txt                     1.txt的内容是2行

错误重定向 2>(把错误信息重定向到指定文件中),覆盖文件内容
[root@daixuan ~]# ls 1111
ls: 无法访问1111: 没有那个文件或目录
[root@daixuan ~]# ls 1111 > 1.txt                错误信息不能重定向到1.txt文件中
ls: 无法访问1111: 没有那个文件或目录
[root@daixuan ~]# cat 1.txt
[root@daixuan ~]# ls 1111 2> 1.txt              使用2> 可以将错误信息重定向到1.txt中
[root@daixuan ~]# cat 1.txt
ls: 无法访问1111: 没有那个文件或目录
追加错误重定向,错误信息追加后不会将之前的文件内容覆盖
[root@daixuan ~]# ls 1111 2>> 1.txt
[root@daixuan ~]# cat 1.txt
ls: 无法访问1111: 没有那个文件或目录
ls: 无法访问1111: 没有那个文件或目录

6、进程的前后台调用fg、bg,暂停ctrl+z,查看jobs
[root@daixuan ~]# sleep 1234                       ctrl+Z中断到后台
^Z
[3]+  Stopped                 sleep 1234
[root@daixuan ~]# jobs                                 3+优先级更高,2-优先级次,1优先级最低
[1]   Stopped                 sleep 100
[2]-  Stopped                 sleep 166
[3]+  Stopped                 sleep 1234
[root@daixuan ~]# fg                                    fg调用优先级最高的到前台继续运行,调用的是默认的3+
sleep 1234
[root@daixuan ~]# fg 2                                 fg 2调用指定的id,id=2优先级升高
sleep 166
[root@daixuan ~]# jobs
[2]+  Stopped                 sleep 166
[3]   Stopped                 sleep 1234
[root@daixuan ~]# fg
sleep 166
[root@daixuan ~]# fg
sleep 1234
^Z
[3]+  Stopped                 sleep 1234
[root@daixuan ~]# bg                                     使用bg将id=3的进程调到后台继续运行
[3]+ sleep 1234 &
[root@daixuan ~]# jobs
[3]+  Running                 sleep 1234 &              Running表示在后台继续运行

shell变量
系统变量和自定义变量   变量名不大写,不用ls等系统命令,不用数字开头,不用一些关键字if、else等
1、系统环境变量
[root@daixuan ~]# env                                查看系统环境变量
HOSTNAME=daixuan
TERM=xterm
SHELL=/bin/bash
[root@daixuan ~]# echo $HOSTNAME         显示变量的内容,或者引用变量,使用$
daixuan
[root@daixuan ~]# a=1
[root@daixuan ~]# set                                set输出所有环境变量,包括系统变量和自定义变量
BASH=/bin/bash
a=1
[root@daixuan ~]# a=1;b=2;a_2=12
[root@daixuan ~]# echo $a $b $a_2
1 2 12
[root@daixuan ~]# b='ls /tmp/'                  变量内容包含空格、*,# 等字符需要单引号‘’ 
[root@daixuan ~]# echo $b
ls /tmp/
[root@daixuan ~]# which vim
/usr/bin/vim[root@daixuan ~]# myvim=`which vim`     使用反引号``,把命令作为变量来使用<==>/usr/bin/vim
[root@daixuan ~]# echo $myvim
/usr/bin/vim
[root@daixuan ~]# d="$myvim"3                把$myvim=/usr/bin/vim当做变量
[root@daixuan ~]# echo $d                          输出变量d的内容
/usr/bin/vim3                                               /usr/bin/vim3  

有时候使用变量需要做全局申明
[root@daixuan ~]# bash                               输入bash进入到子shell,则子shell的变量已经不能使用了
[root@daixuan ~]# echo $d                          输出为空
[root@daixuan ~]# export a=1
[root@daixuan ~]# bash
[root@daixuan ~]# echo $a1
[root@daixuan ~]# unset a
[root@daixuan ~]# echo $a                            值为空
注:反引号用来直接引用反引号里面的命令,双引号里面如果有特殊符合比如说$,它是可以识别其含义的。而单引号里面如果有特殊符号,是不被识别的


PATH HOME SHELL定义环境变量
1、/etc/profile 表示系统内针对任何用户(root或daixuan)都生效的环境变量的配置文件
[root@daixuan ~]# vim /etc/profile       /etc/profle 会定义很多环境变量,直接修改/etc/profile是不太好的,最好是创建/etc/profile.d/custom.sh
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in /etc/profile.d/ 
[root@daixuan ~]# vim /etc/profile.d/path.sh
#!/bin/bash
export PATH=$PATH:/tmp/:data/bin/
[root@daixuan ~]# source /etc/profile             让配置文件生效,source加载/etc/profile,会加载/etc/profile.d/下的所有.sh文件
[root@daixuan ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/tmp/:data/bin/                                                                                     a/bin/

2、/etc/bashrc                                                        全局的环境变量别名
[root@daixuan ~]# vim /etc/bashrc
# /etc/bashrc
# System wide functions and aliases
# Environment stuff goes in /etc/profile
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.

3、~/.bash_profile  定义用户自己的一些环境变量的配置文件

4、~/.bashrc  用户自定义alias命令写入下面那个配置文件 ,用户登录时或者打开shell执行的文件


shell通配符
* 任何字符
?一个字符
#注释符号,解释说明 [root@daixuan ~]# #ls 1.txt   没有结果,因为命令已经注释掉
\ 脱意符号
[root@daixuan ~]# ls #1.txt       111      1234.txt     1.tar.gz  相当于[root@daixuan ~]# ls ,#后面的没有任何意义
[root@daixuan ~]# ls \#1.txt                                                   系统认为#1.txt是一个目录
ls: 无法访问#1.txt: 没有那个文件或目录
[root@daixuan ~]# touch \#1.txt                                              创建#1.txt文件
[root@daixuan ~]# ls \#*                                                          创建#1.txt文件成功
#1.txt

| 管道符,把一条命令的结果丢给另一条命令
[root@daixuan ~]# cat 1.txt | wc -l
2


[root@daixuan ~]# echo $PATH            表示在使用这个变量
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/tmp/:data/bin/
[root@daixuan ~]# cat !$                      !$表示上一条命令的最后一个参数
cat $PATH
在vim中$符号作为一行的行尾

; 把两条命令写在一行,中间加分号
[root@daixuan ~]# ll 1234.txt;ll 123.txt
-rw-r--r-- 1 root root 24 10月 29 17:38 1234.txt
-rw-r--r-- 1 root root 13 10月 25 00:37 123.txt

&把一条命令移动到后台运行
[root@daixuan ~]# sleep 10&
[1] 22423
[root@daixuan ~]# jobs
[1]+  Running                 sleep 10 &
[root@daixuan ~]# jobs
[1]+  Done                    sleep 10

&&表示把两条命令写在一起
[root@daixuan ~]# ls && touch 1.txt

>          重定向,覆盖内容
>>       追加重定向,不覆盖内容
2>        错误重定向,错误信息追加,覆盖内容
2>>     错误追加重定向,错误信息追加,但是不覆盖
<         反重定向,把右边文档的内容重定向给左边的命令
[root@daixuan ~]# wc -l < 1.txt
2

[0-9]  表示0-9之间的任何一位数字
[root@daixuan ~]# ls [12].txt
1.txt  2.txt
[root@daixuan ~]# ls 1.txt 2.txt 
1.txt  2.txt
[root@daixuan ~]# ls [1-9].txt
1.txt  2.txt

[root@daixuan ~]# ls [1-9a-zA-Z].txt
1.txt  2.txt  b.txt  C.txt