一 、什么是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。

设置环境变量,同样可以使用export命令。

由于用户启动会分别执行以下文件:

/etc/profile

用户/.bash_profile

用户/.bashrc

/etc/bashrc

而每次打开新终端都会执行/etc/bashrc,所以可以在文件末尾添加一行环境变量设置,使得每次重启后任然能够保留PATH的更改。

 三、元字符

元字符(是被shell解释的)

``

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

[root@MiWiFi-R3-srv ~]# ls
4.txt anaconda-ks.cfg a.txt B.txt c.txt D.txt nginx-1.10.3
nginx-1.10.3.tar.gz
[root@MiWiFi-R3-srv ~]# res=`ls` #取命令的运行结果,赋值给变量res
[root@MiWiFi-R3-srv ~]# 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

$

$ 变量取值

[root@MiWiFi-R3-srv ~]# money=10
[root@MiWiFi-R3-srv ~]# echo $money
10
[root@MiWiFi-R3-srv ~]# echo 00000$money
0000010
[root@MiWiFi-R3-srv ~]# echo $money0000

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

${}

变量名的范围

 

$()

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

[root@MiWiFi-R3-srv ~]# res=`echo `ls`` #嵌套使用后无法达到预想的效果:取echo 一堆文件名的效果。

[root@MiWiFi-R3-srv ~]# echo $res
ls

[root@MiWiFi-R3-srv ~]# res=$(echo $(ls)) #替代方案
[root@MiWiFi-R3-srv ~]# 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

~

家目录

[root@MiWiFi-R3-srv tmp]# cd ~
[root@MiWiFi-R3-srv ~]# pwd
/root

!

取非

[root@MiWiFi-R3-srv ~]# ls /dev/sda
sda sda1 sda2
[root@MiWiFi-R3-srv ~]# ls /dev/sda[0123]
/dev/sda1 /dev/sda2
[root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]
/dev/sda2

 

历史命令调用

[root@MiWiFi-R3-srv ~]# !343
hostname
MiWiFi-R3-srv

 

匹配最近一次历史命令

[root@MiWiFi-R3-srv ~]# !ls
ls /dev/sda[!01]
/dev/sda2

 

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

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

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

@

无特殊含义

 

#

# 注释

 

%

杀后台进程 jobs号; 取模

 

^

取非 和 ! 雷同

[root@MiWiFi-R3-srv ~]# ls /dev/sda[^01]
/dev/sda2
[root@MiWiFi-R3-srv ~]# ls /dev/sda[!01]
/dev/sda2

 

替换

[root@MiWiFi-R3-srv ~]# systemctl restart
network
[root@MiWiFi-R3-srv ~]# ^network^sshd^
systemctl restart sshd

&

后台执行

 

&&

逻辑与

 

*

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

 

()

在子进程中执行

[root@MiWiFi-R3-srv ~]# x=1
[root@MiWiFi-R3-srv ~]# (x=666)
[root@MiWiFi-R3-srv ~]# echo $x
1
[root@MiWiFi-R3-srv ~]#
[root@MiWiFi-R3-srv ~]# (x=666;echo $x)
666

-

减号;区间;cd -

 

_

无特殊含义

 

+

加号

 

=

赋值

 

|

管道

 

||

逻辑或

 

\

转译

[root@MiWiFi-R3-srv test]# echo \\
\
[root@MiWiFi-R3-srv test]# echo \'
'
[root@MiWiFi-R3-srv test]# echo "'"
'

{}

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

 

[]

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

 

: 空命令 真值

[root@MiWiFi-R3-srv ~]# :
[root@MiWiFi-R3-srv ~]# echo $?
0

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

 

“”

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

[root@MiWiFi-R3-srv test]# x=1
[root@MiWiFi-R3-srv test]# echo "$x" #双引号的代表软引用,引号内特殊字符有特殊意义,比如$,``等
1
[root@MiWiFi-R3-srv test]# echo '$x' #单引号代表硬引用,引号内所有字符都无特殊意义
$x

’‘

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

<

< 输入重定向

 

>

> 输出重定向

 

>>

>> 追加

 

<<

<< here document

 

>&

>& 合并2和1输出

 

,

, 枚举分隔符

 

. source

. source ; 当前目录

 

/

/ 目录分隔符

 

?

? 单个字符

 
 

? 通配符:任一字符

 

回车

回车 命令执行

 

*

* 通配符:任意字符

 
 

[abc] 列表项之一

 
 

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

 

{}

{} 循环列表

[root@MiWiFi-R3-srv test]# touch
{1..3}{a..d}.txt
[root@MiWiFi-R3-srv 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环境的更多相关文章

  1. 20181225-Linux Shell Bash环境下自动化创建ssh互信脚本

    20181225-Linux Shell Bash环境下自动化创建ssh互信脚本 1. 我的Blog 博客园 https://www.cnblogs.com/piggybaba/ 个人网站 http: ...

  2. Linux编程环境介绍(2) -- shell(Bash) 介绍

    1. 在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于DOS下的command和后来的cmd.exe. 2. bash (Bourne Aga ...

  3. Bash shell使用环境的终端的环境设置:stty

    Bash shell使用环境的终端的环境设置:stty Bash shell使用环境的终端的环境设置:stty stty -a 将当前所有的stty参数列出来 intr:给正在运行的程序发送中断信号 ...

  4. Bash Shell的环境配置文件

    login shell:取得bash时需要完整的登录流程 non-login shell:取得bash接口的方法不需要重复登录,举例来说,你以x window登录Linux后,再以x的图形界面启动终端 ...

  5. shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)

    如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...

  6. shell bash ksh

    shell 是一个交互性命令解释器.shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell.shell让你在命令行键入命令,经过shell解释后传送给操作系统(内核)执行.     ...

  7. Linux Shell——bash shell 脚本简介

    bash shell 脚本简介 shell 运行环境 如果你运行的是 Unix 或 Linux 系统,例如 Ubuntu,Red Hat,SUSE Linux,还有macOS,都是内置了 bash s ...

  8. 第6天【egrep、bash环境配置及脚本、vim编辑器】

    bash环境配置及脚本(02)_recv bash环境配置及脚本(02)_recv bash环境配置文件: 按生效范围划分,存在两类: 全局配置: /etc/profile /etc/bashrc 个 ...

  9. Linux 下Shell变量,环境变量的联系与区别

    Linux下Shell变量,环境变量的联系与区别 by:授客 QQ:1033553122 1.  简介 linux下的变量可分成两种:Shell变量和环境变量. Shell变量,又称本地变量,包括私有 ...

随机推荐

  1. sign-up 签约注册

    sign-up    搜索网络['sin,ʌp]      n.  注册; 签约;

  2. .Net HttpContext.Current.Request 常用处理方案

    1.清理request的请求数据 PropertyInfo isreadonly =typeof(System.Collections.Specialized.NameValueCollection) ...

  3. 第一百四十九节,封装库--JavaScript,表单验证--验证用户名

    封装库--JavaScript,表单验证--验证用户名 注册验证功能,顾名思义就是验证表单中每个字段的合法性,如果全部合法才可以提交表单. 效果图 聚集光标时 信息不合法是 信息合法时 html &l ...

  4. Visual Studio 2012/2010/2008 远程调试

    第一步:将你本地的账号密码设置成跟服务器一样,因为远程调试也是需要用户凭证的. 第二步:将vs工具里的Remote Debugger文件夹拷贝到目标机器.大致的目录应该是:D:\Program Fil ...

  5. 【vijos】1769 网络的关键边(割边)

    https://vijos.org/p/1769 啊,割边写挫了害得我交了那么多发... 本题多想想就出来了.. 首先求出割边,显然关键边就在割边上. 求完割边后,我们先从一个点dfs,维护A的点数和 ...

  6. (转)git使用教程

    git基础使用:http://geek.csdn.net/news/detail/77455 github介绍:http://stormzhang.com/github/2016/05/25/lear ...

  7. Storm集成Kafka编程模型

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3974417.html 本文主要介绍如何在Storm编程实现与Kafka的集成 一.实现模型 数据流程: ...

  8. JVM命令行工具&垃圾收集器&垃圾收集策略思维导图

    1.JVM命令行工具 2.垃圾回收算法 3.垃圾收集器

  9. 面试心得与总结—BAT、网易、蘑菇街 - ImportNew

    1. 九种基本数据类型的大小,以及他们的封装类. 2. Switch能否用string做参数? 3. equals与==的区别. 4. Object有哪些公用方法? 5. Java的四种引用,强弱软虚 ...

  10. Eclipse虚拟内存不足【Eclipse中虚拟内存设置】

    Eclipse最近在做J2EE项目中 发现老是出现虚拟内存不足的提示 前2天去加了根内存 问题同样存在 为了让我在写代码时 不在出现那讨厌的内存不足的提示 也为了 不让那破机器再卡住 今天找到了解决方 ...