19单元 —— 认识 BASH 这个 Shell

BASH 与 shell 的 概念 与 关系

  • Shell (贝壳):命令行
  • BASH :Shell 命令行的的一种类型 (各大 Linux 发行版本的默认 Shell)

Shell  命令行的功能:(人 与 计算机硬件 沟通的桥梁  —— 人找命令行 命令行通知内核 内核驱动硬件工作)

  • 执行命令
  • 程序编程

通配符与特殊符号

通配符

  • *:代表【0个到无穷多个】任意字符
  • ?:代表【一定有一个】任意字符
  • []:代表【一定有一个在括号内】的字符
  • [-]:代表【在编码顺序内的所有字符】
  • [^]:代表【反向选择】

特殊符号

  • \:转义符,将【特殊字符或通配符】还原成一般字符
  • |:管道符,分隔两个管道命令的符号
  • ;:连续执行分隔符
  • $:使用变量前导符
  • &:任务管理,将命令变成后台任务
  • !:逻辑运算意义上的【非】not 的意思
  • '':单引号,不具有变量功能
  • "":双引号,具有变量功能
  • ··:反引号 【·】中间为可先执行命令,也可以用 $()
  • ():在中间为子Shell 的起始与结束
  • {}:在中间为命令区块的组合

三种引号的应用

1)单引号的用法:单引号中的内容就是纯纯的字符或者字符串,保持原本的样子,任何特殊符号、变量都会变成普通字符。

2)双引号的用法:双引号就是保持各种特殊符号和变量、命令的作用,可以起到隔离字段的作用。

3)反引号的用法:反引号 ·· 中的命令会被优先执行,并且把得到的结果赋值给 list 变量

巧用 Linux 命令行的返回值—— 在 Shell 脚本,中用来判断一行命令是否执行成功

数据流重定向

  • 标准输入 (stdin):代码为 0,使用 < 或 <<
  • 标准输出(stdout):代码为1,使用 1>(覆盖) 或 1>>(累加)
  • 标准错误输出(stderr):代码为 2,使用 2>(覆盖) 或 2>>(累加)

标准输出及错误输出的特殊写法应用

  • 2> /dev/null 垃圾黑洞设备 —— 将错误信息忽略掉而不显示或存储
  • 2>&1   将正确与错误数据写到同一个文件中

标准输入 —— 将原本需要由键盘输入的数据,改由文件内容来代替

命令执行的判断依据 : ;、&&、||

  • cmd cmd (不考虑命令相关性的连续命令执行)
  • $? (命令返回值) 与 && 或 ||   (两个命令有依赖性,依赖性主要判断的地方在于前一个命令执行的结果是否正确)

cmd 1 && cmd 2

  1. 若 cmd 1 执行完毕且正确执行($?=0),则开始执行 cmd 2
  2. 若 cmd 1 执行完毕且为错误($?≠0),则不执行 cmd 2

 cmd 1 || cmd 2

  1. 若 cmd 1 执行完毕且正确执行($?=0),则不执行 cmd 2
  2. 若 cmd 1 执行完毕且为错误($?≠0),则开始执行 cmd 2

例:使用 ls 查看目录 /root/abc  是否存在,若存在则用 touch 建立 /root/abc/hehe。

  • ls /root/abc && touch /root/abc/hehe

ls: cannot access '/root/abc': No such file or directory               # ls 为找到目录,报错。touch 未执行

  • mkdir /root/abc                                                                   # 新建 /root/abc  目录
  • ls /root/abc && touch /root/abc/hehe
  • ll /root/abc

-rw-r--r-- 1 root root 0 Jul  2 17:56 hehe                                   # ls 找到目录 , touch 执行

例:测试 /root/abc 是否存在,如不存在则予以建立,若存在不做任何操作

  • rm -fr /root/abc
  • ls /root/abc || mkdir /root/abc

ls: cannot access '/root/abc': No such file or directory

  • ll -d /root/abc

drwxr-xr-x 2 root root 6 Jul  2 18:06 /root/abc

例:不清楚 /root/abc 是否存在,但就是要建立 /root/abc/hehe 文件

  • ls /root/abc || mkdir /root/abc && touch /root/abc/hehe

管道命令 (pipe)—— BASH 命令执行的输出数据,需要管道命令处理后才能得到想要的格式

  • 管道命令仅会处理标准输出 ,对于标准错误会予以忽略
  • 管道命令必须要能够接受来自前一个命令数据成为标准输入继续处理才行

注意:让标准错误可以被管道命令使用,用数据重定向 , 让 2>&1 加入命令,即可让 2> 变成 1>

信息选取命令:cut、grep

cut 命令

  • -d '分隔字符'  -f fields : 根据 -d 的分隔字符将一段信息划分成数段,用 -f 取出第几段
  • -c 字符区间 :以字符 (characters)的单位取出固定字符区间;

grep 命令

  • -a:将二进制文件以文本文件的方式查找数据
  • -c:计算找到 ' 查找字符 ' 的次数
  • -i:忽略大小写的不同
  • -n:输出行号
  • -v:反向选择,即显示出没有 ' 查找字符 ' 的那一行
  • --color=auto:将找到的关键字符部分加上颜色

例:将 last 当中,出现 ' root ' 的行选取出,显示

  • last | grep 'root'

例:将 last 当中,只要没有 ' root ' 的行就选取出,显示

  • last | grep  -v 'root'

例  将 last 当中,只要出现 ' root ' 的行就选取出,并且仅取第一栏

  • last | grep 'root' | cut -d ' '  -f 1

信息排序命令:sort 、wc 、uniq

sort  [ -fbMnrtuk ]  [ file or stdin ] 命令        以文字 或 数字 来排序

  • -f:忽略大小写差异
  • -b:忽略最前面的空格字符部分
  • -n:使用 【纯数字】进项排序 (默认以文字形式来排序)
  • -r:反向排序
  • -u:即 uniq ,相同输出数据,仅出现一行代表
  • -t:分隔符号,默认使用 [Tab] 键来分隔
  • -k:以哪个区间 (field)来进行排序
  • -M:以月份的名字来排序

例:将账号记录 /etc/passwd  进行排序

例:将 password 的内容,以 : 分隔,并以第三栏来排序

例:将 last 输出数据,仅显示账号 ,并加以排序

uniq [ -ic ] 命令     (将重复的行删掉,只显示一个)

  • -i:忽略大小写字符的不同
  • -c:进行计数

例:使用 last 将账号列出,仅取出账号栏,进行排序后仅取出一位,并计算重复数量

  • last | cut -d ' ' -f1 | sort | uniq -c

wc [ -l wn ] 命令    计算输出信息的整体数据(文件内含多少字?多少行?多少字符?等)

  • -l: 仅列出行
  • -w:仅列出多少字(英文字母)
  • -m:多少字符

例:/etc/passwd 里面有多少相关字、行、字符数?

  • cat /etc/passwd | wc

   52     115    2866 

例:使用 last 可以输出登录者,但last最后两行并非账号内容,如何以命令串取得登录系统的总人次?

  •  last | grep [a-zA-Z] | grep -v 'wtmp'|grep -v 'unkown' | \
    > grep -v 'reboot'| wc -l

14

test 命令 

test = [ ]                    # [ ] 相当于 test 命令

例: " test $a =$b " = [ "$a" = "$b" ]

test 数字对比

= / !=

  • -eq:  等于
  • -ne:不等于
  • -le:小于等于
  • -lt:小于
  • -ge:大于等于
  • -gt:大于

test 的条件关系

  • -a:并且
  • -o:或者

test 对空的判定

  • -n:  nozero  判定内容不为空
  • -z:  zero      判定内容为空

test 对文件的判定

  • -ef:文件节点号是否一致
  • -nt:文件1 是不是比文件 2 新
  • -ot:文件1 是不是比文件 2 旧
  • -d:目录
  • -S:套字节
  • -L:软连接
  • -e:存在
  • -f:普通文件
  • -b:快设备
  • -c:字符设备

例 :编写脚本完成以下条件

file_check.sh 在执行时,①如果脚本未指定检测文件报错 “未指定检测文件,请指定” ,②如果脚本执行后指定文件不存在 ,报错“此文件不存在”,且当文件存在时请检测文件类型,并显示到输出中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值