再读:Linux系统命令及Shell脚本实践指南(二)

 

再读:Linux系统命令及Shell脚本实践指南(二)

第十章 正则表达式

linux命令下的正则规则和其他语言的规则类似

大多时候与 grep结合使用,比如 grep 'ro.t'

通配符使用:cat *.txt,ls fla?.txt ls [a-c].txt,ls [^a-c].txt

 

第十一章 shell编程概述

图11-1显示了Shell在操作系统中的位置。

再读:Linux系统命令及Shell脚本实践指南(二)

了解下kernel

The Linux® kernel is the main component of a Linux operating system (OS) and is the core interface between a computer’s hardware and its processes. It communicates between the 2, managing resources as efficiently as possible.

The kernel is so named because—like a seed inside a hard shell—it exists within the OS and controls all the major functions of the hardware, whether it’s a phone, laptop, server, or any other kind of computer.

kernel的功能

The kernel has 4 jobs:

  1. Memory management: Keep track of how much memory is used to store what, and where

  2. Process management: Determine which processes can use the central processing unit (CPU), when, and for how long

  3. Device drivers: Act as mediator/interpreter between the hardware and processes

  4. System calls and security: Receive requests for service from the processes

参考https://www.redhat.com/en/topics/linux/what-is-the-linux-kernel

事实上,Shell不只是一种解释器(在用户和系统间起着桥梁的作用),还是一种编程工具,称为脚本语言,shell和编程语言一样,有很多版本的shell

再读:Linux系统命令及Shell脚本实践指南(二)

Shell的功能

当一台系统运行起来时,内核(kernel)会被调入内存中运行,由内核执行所有底层的工作,它会将所有应用程序及用户的操作翻译成CPU的基本指令,并将其送至处理器。这些过程听起来非常复杂,而且实际上也确实是非常底层和技术化的。
为了对用户屏蔽这些复杂的技术细节,同时也是为了保护内核不会因用户直接操作而受到损害,有必要在内核之上创建一个层,该层就是一个“壳”,也就是Shell名称的由来。

Shell的内建命令

所谓Shell内建命令,就是由Bash自身提供的命令,而不是文件系统中的某个可执行文件。

通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘I/O,还需要fork出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前Shell进程的一个函数。

 

有关的常用命令

  1. 确定是否为内建命令 : type

再读:Linux系统命令及Shell脚本实践指南(二)

cd为内建命令,vim为可执行文件

  1. 执行程序:“.”(点号)和 source

即使没有运行权限,也可以可以执行脚本文件。

再读:Linux系统命令及Shell脚本实践指南(二)

 

  1. 别名:alias------------删除别名:unalias

使用

再读:Linux系统命令及Shell脚本实践指南(二)

  1. break和break 2 的区别

break退出当前循环,break 2 退出当前循环外面的循环

  1. eval执行shell命令

kang@Mac :: ~/Downloads/PWN 127 » cmd="ls -l"
kang@Mac :: ~/Downloads/PWN » eval $cmd
  1. export:将局部变量转化为全局变量(也就环境变量

第十三章 shell编程基础

三种变量:局部变量,全局变量(也就是环境变量),特殊变量

赋值和其他脚本语言类似

unset:取消变量或者方法

kang@Mac :: ~/Downloads/PWN » unset cmd
kang@Mac :: ~/Downloads/PWN » eval $cmd

shell下的位置参数

首先是“位置参数”,位置参数的命名简单直接,比如,脚本本身为$0,第一个参数为$1,第二个参数为$2,第三个为$3,以此类推。
当位置参数的个数大于9时,需要用${}括起来标识,比如说第10个位置参数应该记为${10}。另外,$#表示脚本参数的个数总和,$@或$*表示脚本的所有参数。

声明数组

kang@Mac :: ~/Downloads/PWN 1 » arr=('name' 'sue')
echo $arr[1]
echo $arr[*]#输出所用元素
#数组截断操作
kang@Mac :: ~/Downloads/PWN » echo ${arr[2]:2:4}
e

单引号和双引号

单引号和双引号在很多时候是一样的,只是要记住,在双引号中的$符、反引号、转义符还是会被解析成其特殊含义,而在单引号中所有的字符都只是字面意思。
使用双引号括起的内容中,$PWD被解析成/root,而在单引号中只是按照原样输出“$PWD”字符。

命令执行替换

$(ls) 和 反引号 都是相同的效果

使用场景:命令替换是指将命令的标准输出作为值赋给某个变量

kang@Mac :: ~/Downloads/PWN » ppwwdd=`pwd`
kang@Mac :: ~/Downloads/PWN » echo $ppwwdd
/Users/Mac/Desktop/PWN

kang@Mac :: ~/Downloads/PWN » pwwd=$(pwd)
kang@Mac :: ~/Downloads/PWN » echo $pwwd
/Users/Mac/Desktop/PWN

计算运算符和其他语言类似,就不提了。

通配符在正则章节也说过了。

 

上一篇:再读:Linux系统命令及Shell脚本实践指南(三)


下一篇:shell编程之循环语句与控制语句