SHELL —— BASH环境

Posted Z贺

tags:

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

一 、什么是SHELL

shell一般代表两个层面的意思,一个是命令解释器,比如BASH,另外一个就是shell脚本。本节我们站在命令解释器的角度来阐述shell

 

二 、命令的优先级

命令分为:

==> alias

  ==> Compound Commands

    ==> function

      ==> build_in

        ==> hash

          ==> $PATH

            ==> error: command not found

alias别名:别名命令是为了简化输出给一个长参数命令的整合,别名的定义方法 alias la=‘ls -al‘ 取消别名 unalias la

buildin内部命令:是BASH自带的命令 功能简单,内部命令的帮助在builtin(1)里

外部命令:是就是一个小程序存在于/bin/ /sbin/ /usr/bin 等地方,源码安装的软件添加环境变量就应该改PATH。

 

 三、元字符

元字符(是被shell解释的)

``

命令替换 取命令的执行结果

[[email protected] ~]# ls
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz
[[email protected] ~]# res=`ls` #取命令的运行结果,赋值给变量res
[[email protected] ~]# echo $res #查看变量res的值
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz

$

$ 变量取值

[[email protected] ~]# money=10
[[email protected] ~]# echo $money
10
[[email protected] ~]# echo 00000$money
0000010
[[email protected] ~]# echo $money0000

[[email protected] ~]# echo ${money}0000
100000
$[] 整数计算 echo $[2+3] - * / % 浮点数用 echo "scale=3; 10/3" | bc -l

${}

变量名的范围

 

$()

同``  ,但它弥补了``的嵌套缺陷

[[email protected] ~]# res=`echo `ls`` #嵌套使用后无法达到预想的效果:取echo 一堆文件名的效果。

[[email protected] ~]# echo $res
ls

[[email protected] ~]# res=$(echo $(ls)) #替代方案
[[email protected] ~]# echo $res
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3 nginx-1.10.3.tar.gz

~

家目录

[[email protected] tmp]# cd ~
[[email protected] ~]# pwd
/root

!

取非

[[email protected] ~]# ls /dev/sda
sda sda1 sda2
[[email protected] ~]# ls /dev/sda[0123]
/dev/sda1 /dev/sda2
[[email protected] ~]# ls /dev/sda[!01]
/dev/sda2

 

历史命令调用

[[email protected] ~]# !343
hostname
MiWiFi-R3-srv

 

匹配最近一次历史命令

[[email protected] ~]# !ls
ls /dev/sda[!01]
/dev/sda2

 

! ls 带空格 将命令的返回值取反

[[email protected] ~]# echo ok
ok
[[email protected] ~]# echo $? #上一条命令执行的结果,0代表执行成功,非0代表执行失败
0
[[email protected] ~]# ! echo ok #将结果取反
ok
[[email protected] ~]# echo $?
1

0-255之间,0则为真,非0位假

@

无特殊含义

 

#

# 注释

 

%

杀后台进程 jobs号; 取模

 

^

取非 和 ! 雷同

[[email protected] ~]# ls /dev/sda[^01]
/dev/sda2
[[email protected] ~]# ls /dev/sda[!01]
/dev/sda2

 

替换

[[email protected] ~]# systemctl restart network
[[email protected] ~]# ^network^sshd^
systemctl restart sshd

&

后台执行

 

&&

逻辑与

 

*

匹配任意长度字符串;计算乘法

 

()

在子进程中执行

[[email protected] ~]# x=1
[[email protected] ~]# (x=666)
[[email protected] ~]# echo $x
1
[[email protected] ~]#
[[email protected] ~]# (x=666;echo $x)
666

-

减号;区间;cd -

 

_

无特殊含义

 

+

加号

 

=

赋值

 

|

管道

 

||

逻辑或

 

\

转译

[[email protected] test]# echo \\
\
[[email protected] test]# echo \‘

[[email protected] test]# echo "‘"

{}

命令列表 ,注意括号内的开头和结尾必须是空格{    ls; cd /;   }

 

[]

字符通配,匹配括号内之一

 

: 空命令 真值

[[email protected] ~]# :
[[email protected] ~]# echo $?
0

可以接多个命令:ls;pwd;echo 123;无论对错,会一直执行到最后一条命令

 

“”

"" 软引,引号中的字符有意义

[[email protected] test]# x=1
[[email protected] test]# echo "$x" #双引号的代表软引用,引号内特殊字符有特殊意义,比如$,``等
1
[[email protected] test]# echo ‘$x‘ #单引号代表硬引用,引号内所有字符都无特殊意义
$x

’‘

‘硬引,引号中的所有字符无特殊含义

< 输入重定向

 

> 输出重定向

 

>> 

>> 追加

 

<< 

<< here document

 

>&

>& 合并2和1输出

 

,

, 枚举分隔符

 

. source

. source ; 当前目录

 

/

/ 目录分隔符

 

?

? 单个字符

 
 

? 通配符:任一字符

 

回车

回车 命令执行

 

*

* 通配符:任意字符

 
 

[abc] 列表项之一

 
 

[^abc] 对列表取非 也可以使用范围 [a-z] 代表aAbBcC...,[0-9]代表012345。。。

 

{}

{} 循环列表

[[email protected] test]# touch {1..3}{a..d}.txt
[[email protected] test]# ls
1a.txt 1b.txt 1c.txt 1d.txt 2a.txt 2b.txt 2c.txt 2d.txt 3a.txt 3b.txt 3c.txt 3d.txt

 

控制变量名的范围 echo ${AB}C

 

 

































































以上是关于SHELL —— BASH环境的主要内容,如果未能解决你的问题,请参考以下文章

bash shell 环境

bash shell中的环境变量

Bash编程013——环境变量

Shell第一篇:BASH 环境

bash shell环境变量

SHELL —— BASH环境