您的位置:首页 > 运维架构 > Shell

Linux学习笔记(11)——bash

2015-07-09 14:18 597 查看
1) bash简介

a) bashshell的内建指令:type name

b) 反斜杠(\)跳脱紧接着的字符:指令太长时可以使用[\Enter]来换行继续在>之后输入

2) 变量

a) 读取:echo $变量名/echo ${变量名}

b) 变量设定规则

c) 变量与变量内容用【=】等号连接,但是两边不能接空格字符。

d) 变量内容若有空格符,可以用双引号【“】或者单引号【‘】将变量内容结合起来。但双引号的特殊字符,如$,可以保有原有特性,而单引号只表示一般纯文本。

e) 可用跳脱字符[\],将特殊符号变成一般字符。

f) 在一串指令中,还需要借由其它的指令提供的信息,可以使用反单引号[`指令`]或[$(指令)]。

g) 若该变量为扩增变量内容时,可以使用$变量或者${变量}来累加。如:PATH=”$PATH”:/home/bin

h) 若该变量需要在其他子程序(再开启一个bash)中执行,需要用export来使变量变成环境变量。如:export PATH

i) 取消变量:unset 变量名称

j) 简化工作目录:#work="/usr/local/hadoop2.5";#cd$work

k) 观察环境变量:#env environment的简称

l) 观察所有变量:#set

m) 键盘输入变量内容:#read [-pt] 变量名

n) 变量声明:#declare/typeset [-aixr] 变量名

o) 数组变量:#var[index]=content

p) 文件限制:ulimit

3) 变量删除、取代、替换

a) 总体说明

b) 变量删除

c) 变量取代

d) 变量测试

#new_var=${old_var-content}

若old_var为空,则new_var为content

4) 命令别名

#alias 查看系统所有指令的别名

#alias alias_name=’指令’ 设置指令别名

#unalias alias_name 取消指令别名

#history 查询曾经执行过得命令

路径与指令搜寻顺序:先alias再builtin再由$PATH来搜寻,可以使用【type –a –指令名】来查看具体路径。

5) bash配置文件设定

a) 注销bash,前期设定的变量都会失效,除非写入bash配置文件。

b) loginshell与 non-loginshell环境,进入bash需要输入账号密码时为loginshell,否则为non-login shell。

c) loginshell只会读取以下两个配置文件 :

d) /etc/profile:系统整体设定

e) ~/.bash_profile或~/.bash_login或~/.profile:个人设定。其实 bash 的 login shell 设定只会读取上面三个档案的其中一个, 而读取的顺序则是依照上面的顺序。

f) source:读入环境配置文件的指令,无需注销即可生效

#source 变量文件

g) ~/.bashrc(non-login shell 会读)

h) ~/.bash_history:登陆bash之后,首先读取该档案,历史命令

i) ~/.bash_logout:注销 bash 后,系统再帮我做完什么后才离开

6) 终端机的环境设定,stty,set

a) #stty–a 列出所有stty参数,setting tty的简写

b) [#stty按键内容 按键组合] 设定按键功能

#stty erase ^h #删除功能按键组合变为ctrl + h

c) bash中通配符

d) bash中特殊符号

7) 数据流重导向(redirect)

a) standardoutput 与 standarderror output

stdout:指令执行所回传的正确的讯息

stderr:指令执行失败后,所回传的错误讯息

数据流重导向可以将stdout和stderr分别传送到其他的档案或者装置中去。所使用的特殊字符为:

b) 重导向之[>]与[>>]

该档案若不存在,则系统自动建立;若案存在,系统会将之清空,然后再写入;及若以[>]输出到一个已经存在的档案中,该档案会被覆盖掉。

如果需要累加而不覆盖的话,只需要把[>]替换成[>>]即可

c) /dev/null垃圾桶黑洞装置

d) 正确与错误的数据都写到同一档案

e) 重导向之[<]与[<<]

[<]:将原本需要键盘输入的数据,改由档案内容来取代

[<<]:结束的输入字符,相当于ctrl+d

f) 命令执行的判断依据:

g) [;]分号,不考虑指令相关性的连续指令下达

h) 若前一个指令的结果正确,Linux底下会回传一个$?=0的值

记忆的时候,可以记为与、或的关系,认为最终的结果为TRUE

i) 顺序:command1 && command2 || command3

j) 一般情况下,command2和command3放置可以成功执行的指令。

8) 管线命令(pipe)

a) 在每个管线后面接的数据必定是『指令』,而且这个指令必须要能够接受 standard input 的数据才行,这样的指令才可以称为【管线命令】

b) 管线命令仅会处理stdout,对于stderr会忽略。

c) 管线命令必须要能够接受前一个指令的数据成为stdin继续处理才行

d) 撷取命令:cut,grep

#echo $PATH | cut –d ‘:’ –f3,5

# export | cut -c 12-

cut的主要用途在于将同一行里面的数据进行分解,取出想要的。

e) grep:分析行信息

f) 排序命令sort,wc,uniq

# cat /etc/passwd | wc –l 查看系统有多少账户

g) 双向重导向tee

tee 会同时将数据流分送到档案与屏幕(screen),而输出到屏幕的,其实就是stdout,可以让下个指令继续处理。

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

a) tr:删除或者替换讯息

b) col:将【Tab】按键取代成空格键

c) join:两个档案中有相同数据的那一行,才将他加在一起

d) paste:将两行贴在一起,且中间以tab键隔开

e) expand:将tab按键转成空格键、

f) split:档案命令

g) xargs:参数代换

xargs 可以读入 stdin 的数据,并以空格符或断行字符作为分辨,将 stdin 的资料分割成为 arguments。

使用xargs的原因,很多指令其实并不支持管线命令,因此我们可以透过 xargs 来提供该指令引用standard input之用。

10) 总结

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

b) 系统合法的shell均写在/etc/shells档案中

c) 用户默认登陆的 shell 记录于 /etc/passwd 的最后一个字段;

d) locale:用于查看语言资料。

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

f) 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。

------以上整理自鸟哥的Linux私房菜
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: