07.认识与学习bash

1. 由于核心在内存中是受保护的区块,因此我们必须要透过『 Shell 』将我们输入的命令与 Kernel 沟通,好让 Kernel 可以控制硬件来正确无误的工作。   

2.为何要学习命令行界面shell?

(1) .命令行界面的shell

(2) .远程管理:命令行界面比较快

(3) .Linux的任督二脉

3. 系统合法的 shell 均写在 /etc/shells 文件中;

4.用户默认登陆取得的 shell 记录于 /etc/passwd 的最后一个字段

5.bash 的功能主要有:

1)命令记忆能力;

2)命令与文件补全功能;

    [Tab] 接在一串命令的第一个字的后面,则为命令补全;

   [Tab] 接在一串命令的第二个字以后时,则为『文件补齐』!

3)命令别名配置功能(alias);

4)作业控制、前台 后台控制;

5)程序化脚本;

(6)通配符;

6. type 可以用来找到运行命令为何种类型,亦可用于与 which 相同的功能;

7. 变量:

   1)变量就是以一组文字或符号等,来取代一些配置或者是一串保留的数据。

2)变量的显示:echo

     变量设置规则:

1. 变量与变量内容以一个等号『=』来连结,如下所示: 

myname=VBird』

2. 等号两边不能直接接空格符,如下所示为错误: 

myname = VBird』或『myname=VBird Tsai』

3. 变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误: 

2myname=VBird』

4. 变量内容若有空格符可使用双引号『"』或单引号『'』将变量内容结合起来,但

1. 双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:

var="lang is $LANG"』则『echo $var』可得『lang is en_US』

2. 单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:

var='lang is $LANG'』则『echo $var』可得『lang is $LANG』

5. 可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;

6. 在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』。特别注意,那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:

version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』

7. 若该变量为扩增变量内容时,则可用 "$变量名称" 或 ${变量} 累加内容,如下所示:

PATH="$PATH":/home/bin』

8. 若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:

export PATH』

9. 通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;

3取消变量的方法为使用 unset : 

unset 变量名称』例如取消 myname 的配置:unset myname

8.使用 env 与 export 可观察环境变量,其中 export 可以将自定义变量转成环境变量。

9.set 可以观察目前 bash 环境下的所有变量。

10.$? 亦为变量,是前一个命令运行完毕后的回传值。在 Linux 回传值为 0 代表运行成功。

11.locale 可用于观察语系数据。

12.变量键盘读取、数组与宣告

1) read [-pt] varible

     read 之后不加任何参数,直接加上变量名称,那么底下就会主动出现一个空白行等待你的输入(如范例一)。 如果加上 -t 后面接秒数,那么 30 秒之内没有任何动作时, 该命令就会自动略过了;如果是加上 -p ,在输入的光标前就会有比较多可以用的提示字符给我们参考

(2) .数组 (array) 变量类型

   var[index]=content

(3)declare [-airx] varible

变量类型默认为『字符串』,所以若不指定变量类型,则 1+2 为一个『字符串』而不是『计算式』。

13. ulimit 可用以限制用户使用系统的资源情况。

14. 命令别名配置: alias, unalias

那么命令别名与变量有什么不同呢?

命令别名是『新创一个新的命令, 你可以直接下达该命令』的,至于变量则需要使用类似『 echo 』命令才能够呼叫出变量的内容。

15. 历史命令:history

16. Bash Shell 的操作环境:

(1)路径与命令搜寻顺序

 **以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』;

**由 alias 找到该命令来运行;

**由 bash 内建的 (builtin) 命令来运行;

**透过 $PATH 这个变量的顺序搜寻到的第一个命令来运行。

(2)bash 的配置文件主要分为 login shell 与 non-login shell。    login shell 主要读取 /etc/profile 与 ~/.bash_profile,    non-login shell 则仅读取 ~/.bashrc

(3)终端机的环境配置: stty, set

eof   : End of file 的意思,代表『结束输入』。

erase : 向后删除字符,

intr  : 送出一个 interrupt (中断) 的讯号给目前正在 run 的程序;

kill  : 删除在目前命令列上的所有文字;

quit  : 送出一个 quit 的讯号给目前正在 run 的程序;

start : 在某个程序停止后,重新启动他的 output

stop  : 停止目前屏幕的输出;

susp  : 送出一个 terminal stop 的讯号给正在 run 的程序。

 

17. 通配符与特殊符号

符号

意义

*

代表『 0 个到无穷多个』任意字符

?

代表『一定有一个』任意字符

[ ]

同样代表『一定有一个在括号内』的字符(非任意字符)。例如 [abcd] 代表『一定有一个字符, 可能是 a, b, c, d 这四个任何一个』

[ - ]

若有减号在中括号内时,代表『在编码顺序内的所有字符』。例如 [0-9] 代表 0 到 9 之间的所有数字,因为数字的语系编码是连续的!

[^ ]

若中括号内的第一个字符为指数符号 (^) ,那表示『反向选择』,例如 [^abc] 代表 一定有一个字符,只要是非 a, b, c 的其他字符就接受的意思。

符号

内容

#

批注符号:这个最常被使用在 script 当中,视为说明!在后的数据均不运行

\

跳脱符号:将『特殊字符或通配符』还原成一般字符

|

管线 (pipe):分隔两个管线命令的界定(后两节介绍);

;

连续命令下达分隔符:连续性命令的界定 (注意!与管线命令并不相同)

~

用户的家目录

$

取用变量前导符:亦即是变量之前需要加的变量取代值

&

工作控制 (job control):将命令变成背景下工作

!

逻辑运算意义上的『非』 not 的意思!

/

目录符号:路径分隔的符号

>, >>

数据流重导向:输出导向,分别是『取代』与『累加』

<, <<

数据流重导向:输入导向 (这两个留待下节介绍)

' '

单引号,不具有变量置换的功能

" "

具有变量置换的功能!

` `

两个『 ` 』中间为可以先运行的命令,亦可使用 $( )

( )

在中间为子 shell 的起始与结束

{ }

在中间为命令区块的组合!

 

18. 数据流重导向

(1)什么是数据流重导向啊?这得要由命令的运行结果谈起!一般来说,如果你要运行一个命令,通常他会是这样的:

 

(2)standard output 与 standard error output

标准输出指的是『命令运行所回传的正确的信息』

标准错误输出可理解为『 命令运行失败后,所回传的错误信息』

标准输出:读取 /etc/crontab 后,将该文件内容显示到屏幕上;

标准错误输出:因为无法找到 /etc/vbirdsay,因此在屏幕上显示错误信息

3)标准输入  (stdin) :代码为 0 ,使用 < 或 << ;

标准输出  (stdout):代码为 1 ,使用 > 或 >> ;

标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;

19. 命令运行的判断依据: ; , &&, ||

20. 管道命令 (pipe)

(1)选取命令: cut grep

Cut -d 分隔字符’ -f fields

Cut -c 字符范围

Grep [-acinv] [--color] 查找字符串 filename

(2)排序命令: sort, wc, uniq

     Sort [-fbMnrtuk] [file or stdin]

     Wc  [-iwm]

     Uniq [-ic]

(3) 双向重导向: tee

   

(4) 字符转换命令: tr, col, join, paste, expand

  Tr [-ds] SET1

  Col [-xb]

  Join [-ti12] file1 file2

在使用 join 之前,你所需要处理的文件应该要事先经过排序 (sort) 处理

Paste [-d] file1 file2

Expand [-t] file

(5) 分割命令: split

(6) 参数代换: xargs

   Xargs [-0epn] command

 

 

 

猜你喜欢

转载自blog.csdn.net/weixin_42217819/article/details/80454484
今日推荐