1. 程式人生 > 其它 >再讀:Linux系統命令及Shell指令碼實踐指南(二)

再讀: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在作業系統中的位置。

瞭解下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

Shell的功能

當一臺系統執行起來時,核心(kernel)會被調入記憶體中執行,由核心執行所有底層的工作,它會將所有應用程式及使用者的操作翻譯成CPU的基本指令,並將其送至處理器。這些過程聽起來非常複雜,而且實際上也確實是非常底層和技術化的。
為了對使用者遮蔽這些複雜的技術細節,同時也是為了保護核心不會因使用者直接操作而受到損害,有必要在核心之上建立一個層,該層就是一個“殼”,也就是Shell名稱的由來。

Shell的內建命令

所謂Shell內建命令,就是由Bash自身提供的命令,而不是檔案系統中的某個可執行檔案。

通常來說,內建命令會比外部命令執行得更快,執行外部命令時不但會觸發磁碟I/O,還需要fork出一個單獨的程序來執行,執行完成後再退出。而執行內建命令相當於呼叫當前Shell程序的一個函式。

有關的常用命令

  1. 確定是否為內建命令 : type

cd為內建命令,vim為可執行檔案

  1. 執行程式:“.”(點號)和 source

即使沒有執行許可權,也可以可以執行指令碼檔案。

  1. 別名:alias------------刪除別名:unalias

使用

  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

計算運算子和其他語言類似,就不提了。

萬用字元在正則章節也說過了。

本文來自部落格園,作者:OutBxx,轉載請註明原文連結:https://www.cnblogs.com/OutBxx/p/15714033.html